You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake中扁平化嵌套JSON数组并提取子数组到单独表

从Snowflake Variant字段提取子数组到单独表

前提说明

假设你已将JSON加载到名为json_source_table的表中,存储JSON的Variant字段为raw_json。

具体操作步骤

  • 第一步:展开数组并提取数据
    使用Snowflake的FLATTEN函数,先展开父级的ParentArray,再嵌套展开子级的ChildArray,同时保留父ID用于关联:

    SELECT
        parent.value:ParentId::STRING AS parent_id,
        child.value:id::STRING AS child_id,
        child.value:value::STRING AS child_value
    FROM
        json_source_table,
        LATERAL FLATTEN(input => raw_json:ParentArray) AS parent,
        LATERAL FLATTEN(input => parent.value:ChildArray) AS child;
    
  • 第二步:持久化到单独表
    如果需要把提取的数据存到独立表,先创建目标表再插入数据:

    -- 创建子表
    CREATE TABLE child_array_table (
        parent_id STRING,
        child_id STRING,
        child_value STRING
    );
    
    -- 插入提取结果
    INSERT INTO child_array_table
    SELECT
        parent.value:ParentId::STRING AS parent_id,
        child.value:id::STRING AS child_id,
        child.value:value::STRING AS child_value
    FROM
        json_source_table,
        LATERAL FLATTEN(input => raw_json:ParentArray) AS parent,
        LATERAL FLATTEN(input => parent.value:ChildArray) AS child;
    

关键提醒

  • 确认FLATTEN的input路径和JSON层级完全匹配,比如raw_json:ParentArray对应根节点下的ParentArray数组
  • 根据实际数据类型调整字段转换规则,比如value如果是数字就用::NUMBER,日期用::DATE
  • 若原JSON存在空数组,FLATTEN会自动跳过,不会生成空行

内容的提问来源于stack exchange,提问作者user13975334

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:28:18