微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS Redshift Spectrum外部表-分配给列的Varchar数据类型无法处理同一列的数组和字符串数据

如何解决AWS Redshift Spectrum外部表-分配给列的Varchar数据类型无法处理同一列的数组和字符串数据

任务:尝试使用Redshift Spectrum从s3存储桶中将一堆JSON文件加载到Redshift。 问题:少数文件中的JSON对象的数据用方括号括起来,但是其他JSON文件的对象相同,但没有方括号。使用Redshift频谱表创建外部表时,有没有办法使用带/不带方括号“ []”的数据?

要使用的JSON文件

文件1:"x":{"y":{ "z":["ABCD"]}}

文件2:"x":{"y":{ "z":"EFGH"}}

案例1

当z列定义为数组时,我从JSON文件中丢失了“没有方括号”的数据

CREATE EXTERNAL TABLE spectrum.table
(x struct<y:struct<z:array<varchar(256)>>>)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( 'dots.in.keys'='true') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeytextoutputFormat'
location 's3://****'

查询Select c from spectrum.table t,t.x.y.z c;

案例2

当将z列定义为varchar(不声明为数组)时,出现以下错误

创建语句:

CREATE EXTERNAL TABLE spectrum.table
(x struct<y:struct<z:varchar(256)>>)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( 'dots.in.keys'='true') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeytextoutputFormat'
location 's3://****'

查询Select regexp_replace( t.x.y.z,'\\([\\"])','' ) from spectrum.table t;Select t.x.y.z from spectrum.table t;

 [XX000][500310] [Amazon](500310) Invalid operation: Spectrum Scan Error
 Details:
-----------------------------------------------
 error:  Spectrum Scan Error
 code:      15001
 context:   Unsupported implicit cast: Column ('x' 'y' 'z'),From Type: LIST,To Type: VARCHAR,----------------------------------------------

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。