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

如何在Amazon Redshift中展平JSON数据并导入结构化数据表?

解决方案

你的JSON结构以产品名称作为顶层键,对应子对象包含price和quantity字段。Redshift没有直接用通配符迭代JSON键的函数,但可以通过JSON_KEYS+UNNEST的组合拆分所有产品条目,再提取对应字段,具体实现如下:

1. 单条JSON数据处理示例

先将JSON存入临时表(如果数据来自外部文件,可先通过COPY命令导入到临时表):

CREATE TEMP TABLE temp_json_data (json_str VARCHAR);
INSERT INTO temp_json_data VALUES ('{ "lamp": { "price": 18.99, "quantity": 30 }, "desk": { "price": 129.99, "quantity": 12 }, "vase": { "price": 22.49, "quantity": 18 }, "speakers": { "price": 49.99, "quantity": 50 } }');

执行以下SQL拆分数据并导入目标表(假设目标表名为products):

INSERT INTO products (product, price, quantity)
SELECT
    json_key AS product,
    JSON_EXTRACT_PATH_TEXT(json_str, json_key, 'price')::DECIMAL(10,2) AS price,
    JSON_EXTRACT_PATH_TEXT(json_str, json_key, 'quantity')::INT AS quantity
FROM temp_json_data,
UNNEST(JSON_KEYS(json_str)) AS t(json_key);

2. 核心函数说明

  • JSON_KEYS(json_str):提取JSON对象的所有顶层键,返回数组(此处得到['lamp','desk','vase','speakers'])。
  • UNNEST(array):将数组元素拆分为独立行,实现每个产品名对应一行数据。
  • JSON_EXTRACT_PATH_TEXT(json_str, key1, key2):多层遍历JSON,先定位到产品名对应的子对象,再提取price/quantity字段。

3. 批量JSON处理

如果表中存储多条JSON数据(每行一条),上述逻辑同样适用,UNNEST会自动对每行JSON展开对应的产品条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:10:33