我正在使用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的字段都是空的,只有时间戳,标记和序列中包含数据。这真的是一个案例问题吗?
答案 0 :(得分:2)
使用'auto'开关从S3数据中获得Redshift COPY命令对JSON确实区分大小写。我拿了一个gzip压缩的JSON文件,将所有内容切换为小写,重新打包,对表进行核对并使用相同的复制命令,它运行正常。
似乎没有办法强制使用redshift将camelCase用于某些列名。我使用双引号创建列,红色仍然将它们强制为小写。
答案 1 :(得分:2)
Redshift将所有列名更改为小写名称(无论您在定义表时使用何种情况)。因此,在您的情况下,只加载具有小写名称的字段。