我正在尝试使用 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 分配默认值。