Athena GZIP JSON日期/小时分区投影无结果问题求助
Athena分区投影表无结果排查问题
背景
已配置Firehose将GZIP JSON文件投递至S3,路径模板为yyyy/MM/dd/HH/,示例文件路径:
s3://bucket-name/events/2022/11/08/16/file-2022-11-08-16-47-41-xxx.gz
无投影外部表正常查询
创建无投影的外部表:
CREATE EXTERNAL TABLE `noproj` ( `ts` bigint, `url` string, `useragent` string ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://bucket-name/events/' TBLPROPERTIES ( 'classification'='json', 'compressionType'='gzip', 'typeOfData'='file' )
执行SELECT * FROM noproj可正常获取结果👍。
分区投影表无结果问题
创建分区投影表后,完全无法获取结果😭:
CREATE EXTERNAL TABLE `proj` ( `ts` bigint, `url` string, `useragent` string ) PARTITIONED BY ( `date_created` string, `hour` string ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://bucket-name/events/' TBLPROPERTIES ( 'classification'='json', 'compressionType'='gzip', 'typeOfData'='file', 'projection.enabled' = 'true', 'projection.date_created.type' = 'date', 'projection.date_created.format' = 'yyyy/MM/dd', 'projection.date_created.interval' = '1', 'projection.date_created.interval.unit' = 'DAYS', 'projection.date_created.range' = '2022/01/01, NOW', 'projection.hour.type' = 'integer', 'projection.hour.range' = '0,23', 'projection.hour.digits' = '2', 'storage.location.template'='s3://bucket-name/events/${date_created}/${hour}/' )
尝试了以下查询均无结果:
SELECT * FROM projSELECT * FROM proj WHERE date_created = '2022/11/08'SELECT * FROM proj WHERE date_created = '2022/11/08' AND hour = '16'SELECT * FROM proj WHERE date_created >= date('2022-01-01')
最后一条查询报错:
SYNTAX_ERROR: line 1:41: '>=' cannot be applied to varchar, date
该报错与日期类型分区配置和字符串类型分区列的类型冲突有关。
尝试过多种常规排查方法但均未解决问题。
编辑1:简化投影配置仍无效
尝试更简单的分区投影配置,依旧无法获取结果:
CREATE EXTERNAL TABLE `year` ( `ts` bigint, `url` string, `useragent` string ) PARTITIONED BY ( `year` string ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 's3://bucket-name/events/' TBLPROPERTIES ( 'classification'='json', 'compressionType'='gzip', 'projection.year.type' = 'integer', 'projection.year.range' = '2022,2023', 'projection.enabled' = 'true', 'storage.location.template'='s3://bucket-name/events/${year}/' )
编辑2:修改S3路径格式无效
尝试改用Hive风格的分区路径格式:
s3://bucket-name/events/year=2022/month=11/day=08/hour=16/file-2022-11-08-16-47-41-xxx.gz
问题依旧存在。
编辑3:切换Parquet格式无效
尝试将文件格式改为Parquet,出现完全相同的情况:无分区表可正常查询结果,分区投影表无结果。
内容的提问来源于stack exchange,提问作者Yves M.
相关产品推荐
相关产品推荐

