当从S3自动将数据加载到Redshift表中时,是否有关系?
问题描述:
我正在使用COPY命令,gzip标志和'auto'格式将数据从S3加载到Redshift中,具体请参考this关于从S3加载文档,this AWS中使用'auto'格式的文档和this文档处理压缩文件。当从S3自动将数据加载到Redshift表中时,是否有关系?
我的数据是一个高度嵌套的JSON格式,我创建了红移表,使得列名完全匹配JSON结构的最高级别(允许“自动”工作)。
例如,我的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}
}
而我的表创建statment看起来是这样的:
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的字段是空的和o只有时间戳,令牌和序列中都有数据。这真的是一个案例问题吗?
答
使用'auto'开关对S3数据进行红移COPY命令的确对JSON大小写敏感。我拿了一个压缩的JSON文件,将所有内容切换为小写,重新压缩,将表格固化并使用相同的复制命令,并且工作正常。
似乎没有任何强制使用camelCase来处理某些列名的红移方法。我用双引号来创建列,红移仍然强制它们变成小写。
答
Redshift将所有列名称更改为小写名称(不论定义表时使用什么样的情况)。所以,在你的情况下,只有小写字母的字段才会被加载。
我也试着用双引号列名创建表来强制大小写匹配,但是红移将它们强制转换为小写: – TheProletariat