【发布时间】:2020-04-24 15:55:50
【问题描述】:
我有来自 s3 存储桶的以下格式的数据。
"2010-9","aws cloud","{"id":1,"name":"test"}"
"2010-9","aws cloud1","{"id":2,"name":"test2"}"
我想复制下面的数据库中的数据。
表格
year | env | desc
2010-9 | aws cloud |{"id":1,"name":"test"}
2010-9 | aws cloud1 |{"id":2,"name":"test2"}
我已经写了这个命令,但是没有用。你能帮帮我吗?
copy table
from 's3://bucketname/manifest' credentials 'aws_access_key_id=xx;aws_secret_access_key=xxx'
delimiter ','
IGNOREHEADER 1
REMOVEQUOTES
IGNOREBLANKLINES
manifest;
【问题讨论】:
-
desc字段真的有引号 outside 和 inside 字段吗? ("{"id":1,"name":"test"}") 如果是这样,则 Redshift 无法解析它,因为内部引号使它看起来像该字段已结束。您要么需要以不同的格式生成文件,要么在将文件加载到 Redshift 之前对文件进行一些预处理。 -
“不工作”是什么意思?您是否收到错误消息?
-
是的。 desc 使用逗号归档数据拆分,例如“id”:1。是否有任何属性可以为归档添加单个冒号“”
-
第三个字段中的引号过多。它无法解析。您可能能够“按原样”加载所有字段(包括引号),然后执行一些花哨的 SQL 将数据提取到不同的表中。您需要使用 REGEX 函数。
-
你能提供我花哨的查询来从单个文件中分割出来吗?我自己试过但没有运气 SELECT SUBSTRING_INDEX(desc, ',', 1) c1, SUBSTRING_INDEX(SUBSTRING_INDEX(desc, ',', 2), ',', -1) c2, SUBSTRING_INDEX(SUBSTRING_INDEX(desc, ', ', 3), ',', -1) 来自测试的 c3
标签: sql amazon-web-services amazon-s3 amazon-redshift