使用 COPY 命令将数据从 JSON 文件复制到 Redshift

Posted

技术标签:

【中文标题】使用 COPY 命令将数据从 JSON 文件复制到 Redshift【英文标题】:Copy data from a JSON file to Redshift using the COPY command 【发布时间】:2014-12-05 10:08:13 【问题描述】:

我正在尝试使用COPY 命令和JSONPath 将JSON 文件加载到Redshift。据我了解,对于 JSON 文件中的每条记录,COPY 命令都会为 SQL 生成一条记录。

我需要从 JSON 中的一条记录生成 多个 记录到 SQL,但我不清楚如何做到这一点。

这是一个例子。假设我们有以下 JSON 文件:


    
        "id": 1,
        "value": [1, 2, 3, 4],
        "other": "ops"
    ,
    
        "id": 2,
        "value": [5, 6, 7, 8]
    

我想生成以下行以存储在 SQL 中:

id value
1  1
1  2
1  3
1  4
2  5
2  6
2  7
2  8

JSONPath 文件应该是什么样的?是否可行?

在related SO post 中,解决方案是在加载到 Redshift 之前以某种方式生成具有正确模式的数据。我可以预处理 JSON 文件以某种方式将其展平并将其存储回 S3。但这会使事情复杂化很多。

另一个相关问题是,如果一条记录中缺少一个字段(例如上述示例的第二条记录中的"other" 字段),我该如何设置默认值?

【问题讨论】:

【参考方案1】:

您不能在复制命令中执行转换。使用 ETL 工具而不是直接复制到 RedShift。使用 JSON 格式后,默认值将根据表 DDL 分配。

【讨论】:

以上是关于使用 COPY 命令将数据从 JSON 文件复制到 Redshift的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL 脚本执行 AWS S3 到 Redshift Copy 命令?

Redshift 复制命令错误“溢出,列类型:整数”

使用复制命令将数据从 s3 加载到 redshift

需要帮忙! - 无法使用 COPY 命令加载 JSON

Amazon Redshift 使用 COPY 命令仅从 JSON 中获取 1 行

如何用COPY命令把当前选中的文件复制到指定文件夹内