Snowflake/SQL 基于逗号分隔列表中的值的重复记录
Snowflake/SQL Duplicate Records based on values within comma seperated list
我有一个用户 ID 和标签的数据框,如下所示 'Current Data'。
目标:
我希望能够根据 tags 列下的每个值复制记录。正如您在目标输出中看到的那样,用户 ID 21 对于源 'TAGS' 中的三个标签中的每一个都重复了 3 次 - 除了标签列之外的所有内容都是重复的 - 逗号分隔列表中的每个项目 1 条记录。
问题:
我查看了在 snowflake 中使用 SPLIT_TO_TABLE 功能,但它在我的用例中不起作用,因为并非所有标签都始终按某种顺序排列,在某些情况下,单元格也是空白的.
当前数据:
USER_ID CITY STATUS PPL TAGS
21 LA checked 6 bad ui/ux,dashboards/reporting,pricing
32 SD checked 9 buggy,laggy
21 ATL checked 9
234 MIA checked 5 glitchy, bad ui/ux, horrible
目标:
USER_ID CITY STATUS PPL TAGS
21 LA checked 6 bad ui/ux
21 LA checked 6 dashboards/reporting
21 LA checked 6 Pricing
32 SD checked 9 buggy
32 SD checked 9 laggy
21 ATL checked 9
234 MIA checked 5 glitchy
234 MIA checked 5 bad ui/ux
234 MIA checked 5 horrible
Sql:
select table1.value
from table(split_to_table('a.b', '.')) as table1
SPLIT_TO_TABLE 有效。以下是使用您的示例数据的查询:
select USER_ID, CITY, STATUS, PPL, VALUE
from (values
(21,'LA','checked',6,'bad ui/ux,dashboards/reporting,pricing')
,(32,'SD','checked',9,'buggy,laggy')
,(21,'ATL','checked',9,'')
,(234,'MIA','checked',5,'glitchy, bad ui/ux, horrible')
) as tbl (USER_ID,CITY,STATUS,PPL,TAGS)
, lateral split_to_table(tbl.tags,',');
结果:
USER_ID CITY STATUS PPL VALUE
21 LA checked 6 bad ui/ux
21 LA checked 6 dashboards/reporting
21 LA checked 6 pricing
32 SD checked 9 buggy
32 SD checked 9 laggy
21 ATL checked 9
234 MIA checked 5 glitchy
234 MIA checked 5 bad ui/ux
234 MIA checked 5 horrible
我有一个用户 ID 和标签的数据框,如下所示 'Current Data'。
目标:
我希望能够根据 tags 列下的每个值复制记录。正如您在目标输出中看到的那样,用户 ID 21 对于源 'TAGS' 中的三个标签中的每一个都重复了 3 次 - 除了标签列之外的所有内容都是重复的 - 逗号分隔列表中的每个项目 1 条记录。
问题:
我查看了在 snowflake 中使用 SPLIT_TO_TABLE 功能,但它在我的用例中不起作用,因为并非所有标签都始终按某种顺序排列,在某些情况下,单元格也是空白的.
当前数据:
USER_ID CITY STATUS PPL TAGS
21 LA checked 6 bad ui/ux,dashboards/reporting,pricing
32 SD checked 9 buggy,laggy
21 ATL checked 9
234 MIA checked 5 glitchy, bad ui/ux, horrible
目标:
USER_ID CITY STATUS PPL TAGS
21 LA checked 6 bad ui/ux
21 LA checked 6 dashboards/reporting
21 LA checked 6 Pricing
32 SD checked 9 buggy
32 SD checked 9 laggy
21 ATL checked 9
234 MIA checked 5 glitchy
234 MIA checked 5 bad ui/ux
234 MIA checked 5 horrible
Sql:
select table1.value
from table(split_to_table('a.b', '.')) as table1
SPLIT_TO_TABLE 有效。以下是使用您的示例数据的查询:
select USER_ID, CITY, STATUS, PPL, VALUE
from (values
(21,'LA','checked',6,'bad ui/ux,dashboards/reporting,pricing')
,(32,'SD','checked',9,'buggy,laggy')
,(21,'ATL','checked',9,'')
,(234,'MIA','checked',5,'glitchy, bad ui/ux, horrible')
) as tbl (USER_ID,CITY,STATUS,PPL,TAGS)
, lateral split_to_table(tbl.tags,',');
结果:
USER_ID CITY STATUS PPL VALUE
21 LA checked 6 bad ui/ux
21 LA checked 6 dashboards/reporting
21 LA checked 6 pricing
32 SD checked 9 buggy
32 SD checked 9 laggy
21 ATL checked 9
234 MIA checked 5 glitchy
234 MIA checked 5 bad ui/ux
234 MIA checked 5 horrible