使用 AWS Pipeline 从 S3 传输到 RedShift 时展平 JSON 文件
Flattening JSON file while transferring from S3 to RedShift using AWS Pipeline
我在 S3 上有 json 个文件,我想将它传输到 Redshift。一个问题是该文件包含以下格式的条目:
{
"user_id":1,
"metadata":
{
"connection_type":"WIFI",
"device_id":"1234"
}
}
在将其保存到 Redshift 之前,我想将文件展平以包含列:
user_id | connection_type | device_id
我如何使用 AWS Data Pipeline 执行此操作?
有没有activity可以把json转换成想要的形式?我不认为 transform sql 会支持 json 个字段。
你不需要把它弄平。您可以在定义 jsonpaths
配置文件后使用 copy
命令加载它,以便轻松地从每个 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
table.
中的内容
查看 Redshift copy command and examples。
我在 S3 上有 json 个文件,我想将它传输到 Redshift。一个问题是该文件包含以下格式的条目:
{
"user_id":1,
"metadata":
{
"connection_type":"WIFI",
"device_id":"1234"
}
}
在将其保存到 Redshift 之前,我想将文件展平以包含列:
user_id | connection_type | device_id
我如何使用 AWS Data Pipeline 执行此操作? 有没有activity可以把json转换成想要的形式?我不认为 transform sql 会支持 json 个字段。
你不需要把它弄平。您可以在定义 jsonpaths
配置文件后使用 copy
命令加载它,以便轻松地从每个 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
table.
查看 Redshift copy command and examples。