首页 > 解决方案 > 在 athena 上工作时,数据在 redshift 外部表上显示为空

问题描述

所以我试图在红移光谱上运行以下简单查询:

select * from company.vehicles where vehicle_id is not null

它返回 0 行(表中的所有行都为空)。但是,当我在 athena 上运行相同的查询时,它可以正常工作并返回结果。尝试了 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')

任何想法?

标签: sqlamazon-redshiftamazon-athenaamazon-redshift-spectrum

解决方案


您是如何创建外部表的?对于 Spectrum,您必须明确设置参数以将应视为 null 的内容处理

在 TABLE PROPERTIES 中添加参数'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


推荐阅读