在 athena 上工作时,数据在 redshift 外部表上显示为空
Posted
技术标签:
【中文标题】在 athena 上工作时,数据在 redshift 外部表上显示为空【英文标题】:data appears as null on redshift external table while working right on athena 【发布时间】:2018-08-30 06:44:29 【问题描述】:所以我试图在红移光谱上运行以下简单查询:
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')
有什么想法吗?
【问题讨论】:
【参考方案1】:您是如何创建外部表的? 对于 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
【讨论】:
您提到的属性仅与文本类型的数据相关。您应该使用它,以防您的文本文件包含您希望光谱读取为空的空字段。但是我的数据类型是 orc - 我添加了创建表查询。我的问题是 redshift 将所有行显示为空,尽管它们确实包含数据。在 athena 上我可以正确查看数据。@theDbGuy 好的。请问文件存储在哪里?是在雅典娜还是频谱目录中 数据存储在s3中,元数据存储在胶水数据目录@theDbGuy 您能否使用主键或其他东西从 athena 中选择一条记录(当您执行 NOT NULL 条件时返回)并尝试在频谱中选择相同的记录并让我知道输出是否匹配 如果可能,尝试使用胶水爬虫创建表,而不是使用CREATE语句【参考方案2】:最终证明这是红移中的一个错误。为了修复它,我们需要运行以下命令:
ALTER TABLE table_name SET TABLE properties(‘orc.schema.resolution’=‘position’);
【讨论】:
你有关于这个错误的更多细节吗?我有一个类似的问题,虽然它只是一些列没有出现。不过,它们在雅典娜中看起来还不错。 您好@confytoday,您找到解决方案了吗?对我来说也只有一些列是空的,这里没有什么不能解决我的问题以上是关于在 athena 上工作时,数据在 redshift 外部表上显示为空的主要内容,如果未能解决你的问题,请参考以下文章