【问题标题】:Athena with partition projection returns no results带有分区投影的 Athena 不返回任何结果
【发布时间】:2021-03-16 01:35:54
【问题描述】:

在为我们的新 ETL 管道进行概念验证时,我发现了在 AWS Athena 中使用分区投影的一些问题。 用胶水创建了下表:

CREATE EXTERNAL TABLE `test_interactions`(
  `id` string, 
  `created_at` timestamp, 
  `created_by` string, 
  `type` string, 
  `entity` string)
PARTITIONED BY ( 
  `dt` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
WITH SERDEPROPERTIES ( 
  'projection.dt.format'='yyyy-MM-dd-HH', 
  'projection.dt.interval'='1', 
  'projection.dt.interval.unit'='HOURS', 
  'projection.dt.range'='2020-12-01-00,NOW', 
  'projection.dt.type'='date', 
  'projection.enabled'='true', 
  'storage.location.template'='s3://test-aggs/test-interactions/dt=${dt}') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://test-aggs/test-interactions/'
TBLPROPERTIES (
  'classification'='parquet')

在 S3 上,有来自 Kinesis Data Firehose 的匹配 .parquet 文件:

test-aggs/test-interactions/dt=2020-12-03-22/file1.parquet
test-aggs/test-interactions/dt=2020-12-03-22/file2.parquet

尝试通过以下方式查询数据:

SELECT * FROM "test_aggs"."test_interactions"
WHERE dt >= '2020-12-02-00' 
AND dt < '2020-12-04-01'

或通过

SELECT * FROM "test_aggs"."test_interactions"
WHERE dt = '2020-12-03-22' 

返回零个结果。

跑步

MSCK REPAIR TABLE;

使数据可查询,但使用这个慢速命令,我不必启用分区投影。

任何想法为什么这不起作用?

干杯!

【问题讨论】:

  • Athena 无法自行检测新分区。您可以使用预定的 Glue Crawlers 添加新分区。
  • @grnc 可以。在 AWS 文档中查看分区投影 ????但是您仍然需要匹配的配置单元元数据来查询 athena 之外的数据。
  • @maxgr 解决问题了吗?
  • @grnc 现在不行。已就此问题联系 AWS 业务支持,我将在解决此问题后立即提供更新✌️

标签: amazon-web-services hadoop hive amazon-athena amazon-kinesis-firehose


【解决方案1】:

解决了这个问题。 问题是我在SERDE PROPERTIES 下添加了投影配置,而不是在TBLPROPERTIES 下。

CREATE EXTERNAL TABLE `test_interactions`(
  `id` string, 
  `created_at` timestamp, 
  `created_by` string, 
  `type` string, 
  `entity` string)
PARTITIONED BY ( 
  `dt` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://test-aggs/test-interactions/'
TBLPROPERTIES (
  'classification'='parquet', 
  'projection.dt.format'='yyyy-MM-dd-HH', 
  'projection.dt.interval'='1', 
  'projection.dt.interval.unit'='HOURS', 
  'projection.dt.range'='2020-12-01-00,NOW', 
  'projection.dt.type'='date', 
  'projection.enabled'='true', 
  'storage.location.template'='s3://test-aggs/test-interactions/dt=${dt}')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多