【问题标题】:snowflake - Join on result of split function雪花 - 加入拆分功能的结果
【发布时间】:2023-08-24 09:45:01
【问题描述】:

我在加入 split 函数的结果时遇到了问题。 以下查询有效,其中 str_field 是表 my_table 中的字符串字段。

select
    *
    from my_table,
        (lateral flatten(input=>split(str_field, ',')));

当我尝试查询拆分的不同值时,出现错误:

无效的标识符“str_field”

select
    *
    from my_table t,
        (select distinct value from lateral flatten(input=>split(t.str_field, ',')));

如何交叉连接拆分 str_field 的唯一值?我需要获取 my_table 的所有值,所以select * 是必须的(select distinct value 还不够)

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    与 CTE 合作是可行的解决方案。因此,您的查询应如下所示:

    with dist_mytbl as (
    select
        distinct value
        from my_table,
            (lateral flatten(input=>split(str_field, ','))))
    
    select * from dist_mytbl;
    

    【讨论】:

    • 我想要 my_table 中的所有字段,而不仅仅是值。我可以运行 distinct *,value 但这似乎是一个更繁重的查询,因为引擎需要在所有字段上计算 distinct。
    • 因此,如果您添加一些示例值和预期结果可能会有所帮助,因为我不知道您要达到什么目标:)。如果您只想区分所有值,包括原始值,则只需忽略“序列”列。否则我们需要一个例子来帮助你。
    • 我希望得到与我最初工作的查询相同的结果(由于解决 t.str_field 是什么的雪花问题而导致错误
    【解决方案2】:

    要获得独特的价值,你需要做这样的事情

    select distinct value from my_table,(lateral flatten(input=>split(str_field, ',')));
    

    【讨论】: