json - 将 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 表中
解决方案
我有相同类型的文件。我遵循的步骤将它们加载到这样的 Redshift 表中
- 在 Redshift Spectrum 表中创建一个外部表
struct
- 从上表中插入您的 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
如果您还有其他问题,请告诉我。
推荐阅读
- google-apps-script - 我可以将 Google 表格单元格下载为 JS 文件吗?
- redis - Redis zrangebyscore 性能,min 为 -inf 时
- typo3 - 通过 ext_localconf.php 注册类时,自动加载不起作用
- java - Spring/JPA/Jackson 中的 Diff HTTP PUT 方法
- corda - Corda - 验证状态中的公证人和自定义对象
- python - 当字符串和子字符串的长度相等时,Python 中的字符串 find() 是否不起作用?
- python - TypeError:无法将 str 连接到字节
- excel - 如何创建包含条件格式的用户表单表?
- laravel - 如何用你的包语言覆盖 Laravel 的语言文件
- api - 适用于移动设备和 Web 的安全 API