所以我试图在redshift频谱上运行以下简单查询:
select * from company.vehicles where vehicle_id is not null
,它返回0行(表中的所有行均为null)。但是,当我在雅典娜上运行相同的查询时,它可以正常工作并返回结果。尝试了msck修复,但是athena和redshift都使用相同的元存储,因此没关系。 我也没有看到任何错误。
文件格式为orc。
创建表查询为:
CREATE EXTERNAL TABLE 'vehicles'(
'vehicle_id' bigint,
'parent_id' bigint,
'client_id' bigint,
'assets_group' int,
'drivers_group' int)
PARTITIONED BY (
'dt' string,
'datacenter' string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
's3://company-rt-data/metadata/out/vehicles/'
TBLPROPERTIES (
'CrawlerSchemaDeserializerVersion'='1.0',
'CrawlerSchemaSerializerVersion'='1.0',
'classification'='orc',
'compressionType'='none')
有什么主意吗?
答案 0 :(得分:1)
您是如何创建外部表的? 对于Spectrum,您必须显式设置参数以将应视为空的参数
在表属性中添加参数'serialization.null.format'='',以便将带有''的所有列都视为光谱中的外部表为NULL
**
CREATE EXTERNAL TABLE external_schema.your_table_name(
)
row format delimited
fields terminated by ','
stored as textfile
LOCATION [filelocation]
TABLE PROPERTIES('numRows'='100', 'skip.header.line.count'='1','serialization.null.format'='');
**
或者,您可以在创建将自动识别NULL值的外部表时设置SERDE-PROPERTIES
答案 1 :(得分:1)
最终,事实证明这是redshift中的错误。为了修复它,我们需要运行以下命令:
yellow
pink light
red
blue
red
答案 2 :(得分:0)
只需使用以下查询
select * from vehicles where vehicle_id is not null