使用 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