sql - 在 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')
任何想法?
解决方案
您是如何创建外部表的?对于 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
推荐阅读
- text-editor - 创建文本程序
- javascript - 查找元素的 XPath
- html - 如何对齐这些项目?
- python - 有没有办法在数组列表中找到唯一二进制数组的计数?
- java - 如何检查数组是否在java中增加数字序列?
- maven - ANTRUN_NOHUP 适用于 maven,但当我从 jenkins 执行时不起作用
- java - 使用流从字符串中删除多个字符串
- asp.net - ASP.NET IIS Web.Config 文件 - 防止绕过防火墙
- json - 我想向 JSON 对象添加一个属性,其中包含整数数组作为 Java 中的值
- symfony - 在 Symfony 5 的 textarea 表单中添加 onkeyup="countChar(this)"