使用AWS Pipeline从S3转换到RedShift时展平JSON文件

时间:2016-06-20 21:44:55

标签: amazon-web-services amazon-s3 amazon-redshift amazon-data-pipeline

我在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字段。

1 个答案:

答案 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 commandexamples