我尝试使用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"
字段),如何设置默认值?
答案 0 :(得分:2)
您无法在复制命令中执行转换。使用ETL工具而不是直接复制到RedShift。使用JSON格式后,将根据表DDL分配默认值。