【问题标题】: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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        • 2021-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多