【问题标题】:How to query a table partitioned on a column in AWS Athena that uses Presto如何查询在 AWS Athena 中使用 Presto 的列上分区的表
【发布时间】:2018-11-16 21:46:34
【问题描述】:

如果我在 AWS Athena 中创建了这样的表:

CREATE EXTERNAL TABLE table (
         `timestamp` BIGINT,
         `id` STRING,
)PARTITIONED BY (
        date_column 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://bucket/key' TBLPROPERTIES ( 'parquet.compress'='SNAPPY', 'CrawlerSchemaDeserializerVersion'='1.0', 'CrawlerSchemaSerializerVersion'='1.0', 'classification'='parquet')

添加数据后,date_column 如下所示:

date_column
date=2018102300
date=2018091500 //(so Sept 15, 2018)

我只想获取 9 月份的数据,但无法构建正确的查询:

到目前为止,我有这个会引发日期格式错误:

SELECT * FROM table 
where date_parse(date_column, 'date=%Y%m%d') >= date_parse('date=2018090100', 'date=%Y%m%d') and date_parse(date_column, 'date=%Y%m%d') < date_parse('date=2018100100', 'date=%Y%m%d')

【问题讨论】:

  • 为什么存储“date=2018102300”而不是“2018102300”?

标签: sql amazon-athena presto


【解决方案1】:

您传递给函数 date_parse() 的参数不正确。它应该采用以下格式以获取正确的时间戳格式

select date_parse('2018091500', '%Y%m%d%H') will fetch you 2018-09-15 00:00:00.000

您可以重写查询以获取 9 月的结果

select * from  table where date_parse(date_column, '%Y%m%d%H') between date '2018-09-01' and date '2018-09-30'

【讨论】:

    猜你喜欢
    • 2021-01-20
    • 1970-01-01
    • 2019-09-16
    • 2020-06-10
    • 1970-01-01
    • 2020-01-13
    • 2017-06-17
    • 2020-10-16
    • 2019-04-08
    相关资源
    最近更新 更多