在雅典娜上工作时,数据在redshift外部表上显示为空

时间:2018-08-30 06:44:30

标签: sql amazon-redshift amazon-athena amazon-redshift-spectrum

所以我试图在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')

有什么主意吗?

3 个答案:

答案 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