当从S3自动将数据加载到Redshift表中时,是否有关系?

当从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只有时间戳,令牌和序列中都有数据。这真的是一个案例问题吗?

+0

我也试着用双引号列名创建表来强制大小写匹配,但是红移将它们强制转换为小写: – TheProletariat

使用'auto'开关对S3数据进行红移COPY命令的确对JSON大小写敏感。我拿了一个压缩的JSON文件,将所有内容切换为小写,重新压缩,将表格固化并使用相同的复制命令,并且工作正常。

似乎没有任何强制使用camelCase来处理某些列名的红移方法。我用双引号来创建列,红移仍然强制它们变成小写。

Redshift将所有列名称更改为小写名称(不论定义表时使用什么样的情况)。所以,在你的情况下,只有小写字母的字段才会被加载。