当'自动'将数据从S3加载到Redshift表时,情况是否重要?

时间:2016-12-28 18:12:22

标签: json postgresql amazon-s3 gzip amazon-redshift

我正在使用COPY命令,gzip标志和'auto'格式将数据从S3加载到Redshift中,按照this从S3加载的文档,this文档使用'auto' 'AWS中的格式,以及用于解决压缩文件的this文档。

我的数据是一种高度嵌套的JSON格式,我创建了redshift表,使列名完全匹配JSON结构的最高级别(允许'auto'工作)。

例如,我的JSON数据如下所示:

{"timestamp":{"value":"1480536125926814862"},
"Version":{"value":"0.5.0"},
"token":{"timestamp":"1480536122147094466",
  "field1":"A23",
  "field2":"0987adsflhja0",
  "field3":"asd0-fuasjklhf"},
"camelCaseField":{"value":"asdf1234"},
"camelCaseField2":{"value":"asdfasdfasdf1234"},
"sequence":{"value":1}
}

我的表创建语句如下所示:

CREATE TABLE temp_table (
timestamp varchar(40),
Version varchar(40),
token varchar(500),
camelCaseField varchar(40),
camelCaseField2 varchar(40),
sequence varchar(10));

然后当我使用此命令从S3加载表时:

COPY temp_table FROM 's3://bucket-name/file_name.log.gz' 
credentials '<aws-cred-args>'
json 'auto'
gzip;

它加载数据时没有错误,但是任何带有camelcase的字段都是空的,只有时间戳,标记和序列中包含数据。这真的是一个案例问题吗?

2 个答案:

答案 0 :(得分:2)

使用'auto'开关从S3数据中获得Redshift COPY命令对JSON确实区分大小写。我拿了一个gzip压缩的JSON文件,将所有内容切换为小写,重新打包,对表进行核对并使用相同的复制命令,它运行正常。

似乎没有办法强制使用redshift将camelCase用于某些列名。我使用双引号创建列,红色仍然将它们强制为小写。

答案 1 :(得分:2)

Redshift将所有列名更改为小写名称(无论您在定义表时使用何种情况)。因此,在您的情况下,只加载具有小写名称的字段。