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

Redshift中如何扁平化未知长度JSON列实现订阅级数据拆分

在Redshift中展开JSON数组实现订单转订阅级别数据

Redshift可以通过JSON_PARSE(处理字符串类型JSON)结合UNNEST的组合,自动展开未知长度的JSON数组,实现将订单级数据转换为订阅级(每个订阅一行)的需求,不需要手动处理单个元素。

假设你的表结构

假设你有一张存储订单数据的表order_subscriptions,包含:

  • order_id:订单编号(字符串类型)
  • subscriptions_json:存储订阅数组的JSON字符串列

处理字符串类型JSON列的SQL示例

SELECT
  o.order_id,
  -- 提取并转换customer_id为整数类型
  JSON_EXTRACT_PATH_TEXT(sub.sub_item, 'customer_id')::INT AS customer_id,
  JSON_EXTRACT_PATH_TEXT(sub.sub_item, 'subscription_id') AS subscription_id
FROM
  order_subscriptions o,
  -- 先解析JSON字符串为数组,再展开每个元素为单独行
  UNNEST(JSON_PARSE(o.subscriptions_json)) AS sub(sub_item)

如果使用Redshift SUPER类型存储JSON

如果你的JSON列是Redshift的SUPER类型(原生支持JSON结构),可以更简洁地处理:

SELECT
  o.order_id,
  sub_item.customer_id,
  sub_item.subscription_id
FROM
  order_subscriptions o,
  -- 直接展开SUPER类型的数组
  UNNEST(o.subscriptions_super) AS sub(sub_item)

关键函数说明

  • JSON_PARSE:将JSON格式的字符串转换为Redshift可识别的JSON数组对象
  • UNNEST:将数组的每个元素拆分为独立的行,这是实现从订单行转订阅行的核心操作
  • JSON_EXTRACT_PATH_TEXT:从单个JSON对象中提取指定字段的值,支持类型转换(如::INT)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:09:59