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



我正在尝试使用 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文件应该是什么样子?可行与否?

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

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

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

最新更新