首页 > 解决方案 > 将 JSON 数据的 CSV 从 S3 上传到 Redshift

问题描述

我在 S3 中有数千个格式异常的 CSV,我需要将它们上传到 Redshift。

CSV 的格式如下:

 Column A            Column B            ..... Column Z
{"id": 2034823"   "created": "2017-1-1"       "result": true} 

换句话说,CSV 的每一行都是有效的 JSON。

我尝试了一个简单的复制命令,但无济于事。我尝试添加format as json 'auto';标志,但仍然收到错误:

Invalid Value: err_code 1216, line number 1, position 0

有没有推荐的方法来处理这种格式的 CSV?我想将它们保存到已定义类型的现有 Redshift 表中

标签: jsoncsvamazon-s3aws-sdkamazon-redshift

解决方案


我有相同类型的文件。我遵循的步骤将它们加载到这样的 Redshift 表中

  1. 在 Redshift Spectrum 表中创建一个外部表struct
  2. 从上表中插入您的 Redshift 表。

在你的情况下

1. 
CREATE EXTERNAL TABLE <spectrum schema>.<your external table>
(
data struct<
id:integer,
created:timestamp,
...
result:varchar(5)>
)
row format serde 'org.openx.data.jsonserde.JsonSerDe'
with serdeproperties (
'dots.in.keys' = 'true',
'mapping.requesttime' = 'requesttimestamp')
 as location 's3:<your S3 bucket>';

2.
INSERT INTO <your Redshift table> 
SELECT data.id, data.created, ..., data.result
  FROM <your external table>

了解如何设置 Redshift Spectrum https://docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum.html

如果您还有其他问题,请告诉我。


推荐阅读