当“自动”将数据从 S3 加载到 Redshift 表中时,大小写是不是重要? [复制]
Posted
技术标签:
【中文标题】当“自动”将数据从 S3 加载到 Redshift 表中时,大小写是不是重要? [复制]【英文标题】:Does case matter when 'auto' loading data from S3 into a Redshift table? [duplicate]当“自动”将数据从 S3 加载到 Redshift 表中时,大小写是否重要? [复制] 【发布时间】:2016-12-28 18:12:22 【问题描述】:我正在使用 COPY 命令、gzip 标志和“自动”格式将数据从 S3 加载到 Redshift,按照关于从 S3 加载的 this 文档、关于在 AWS 中使用“自动”格式的 this 文档, 和 this 用于处理压缩文件的文档。
我的数据是高度嵌套的 JSON 格式,并且我创建了 redshift 表,以便列名与 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
我的表创建语句如下所示:
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;
它加载数据没有错误,但是任何带有驼峰大小写的字段都是空的,只有时间戳、令牌和序列中有数据。这真的是案例问题吗?
【问题讨论】:
我还尝试使用双引号括起来的列名创建表来强制大小写匹配,但红移将它们强制转换为小写: 为了解决这个问题,我现在正在下载所有 JSON 文件,使用 jq 小写所有 JSON 属性名称,将新的 JSON 重新上传到 S3,然后执行 COPY 到 redshift。跨度> 这是一个可行的解决方案***.com/a/58411291/7127824 【参考方案1】:使用“auto”开关的 S3 数据的 Redshift COPY 命令确实对 JSON 区分大小写。我拿了一个经过 gzip 压缩的 JSON 文件,将所有内容切换为小写,重新压缩,对表格进行核对并使用相同的复制命令,它工作正常。
似乎没有任何方法可以强制 redshift 对某些列名使用 camelCase。我使用双引号来创建列,redshift 仍然将它们强制转换为小写。
【讨论】:
【参考方案2】:Redshift 将所有列名称更改为小写名称(无论您在定义表时使用什么大小写)。因此,在您的情况下,只有小写名称的字段才会被加载。
【讨论】:
以上是关于当“自动”将数据从 S3 加载到 Redshift 表中时,大小写是不是重要? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?