【问题标题】:Is there a way to flatten a json list with snowflake?有没有办法用雪花展平 json 列表?
【发布时间】:2020-02-20 18:17:02
【问题描述】:
我有一个列是我的表中的一个列表,我想展平/扩展为列,以便我可以从这个列表中转换它
{"name a":1,"name b":1,"name c":1,"name d":1,"name e":1}
到这里
|name a |name b|name c|name d |name e|
| 1 |1 |1 |1 |1 |
每个都有自己的列
【问题讨论】:
标签:
sql
json
snowflake-cloud-data-platform
【解决方案1】:
我找不到执行此操作的动态方法。无论您是先展平列然后将其重新旋转,还是以下面的这种方式进行,您都需要引用列名。可能有一种方法可以在存储过程中动态执行此操作,或者在 Python 或其他语言中动态创建 SQL:
-- Creating a Mock table to query
WITH json_table AS (
SELECT TO_VARIANT(PARSE_JSON('{"name a":1,"name b":1,"name c":1,"name d":1,"name e":1}')) AS json_field
UNION ALL
SELECT TO_VARIANT(PARSE_JSON('{"name a":2,"name b":2,"name c":2,"name d":2,"name e":2}')) AS json_field
)
SELECT json_field:"name a" AS "name a"
,json_field:"name b" AS "name b"
,json_field:"name c" AS "name c"
,json_field:"name d" AS "name d"
,json_field:"name e" AS "name e"
FROM json_table j
;
【解决方案2】:
创建或替换表 test222(src 变体)
作为
选择 parse_json(column1) 作为 src
来自值('{"name a":1,"name b":1,"name c":1,"name d":1,"name e":1}')
选择 src:"name a" as "name a",src:"name b" as "name b",src:"name c" as "name c",src:"name d" as "name d ",src:"name e" as "name e" from test222