我在S3上有json文件,我想将它传输到Redshift。一个问题是该文件包含以下格式的条目:
{
"user_id":1,
"metadata":
{
"connection_type":"WIFI",
"device_id":"1234"
}
}
在我将其保存到Redshift之前,我想将文件展平为包含列:
user_id | connection_type | device_id
如何使用AWS Data Pipeline执行此操作? 是否有可以将json转换为所需形式的活动?我认为转换sql不支持json字段。
答案 0 :(得分:3)
你不需要压扁它。在定义copy
配置文件后,可以使用jsonpaths
命令加载它,以便轻松地从每个json对象中提取列值。
使用您的结构,您可以在S3(s3://bucket/your_jsonpaths.json
)中创建一个文件,如下所示:
{
"jsonpaths": [
"$.user_id",
"$.metadata.connection_type",
"$.metadata.device_id"
]
}
然后你在Redshift中运行这样的东西:
copy your_table
from 's3://bucket/data_objects.json'
credentials '<aws-auth-args>'
json 's3://bucket/your_jsonpaths.json';
如果您遇到问题,请查看stv_load_errors
表中的内容。
查看Redshift copy command和examples。