Athena 根据 S3 中引入的分区动态查询更改
Posted
技术标签:
【中文标题】Athena 根据 S3 中引入的分区动态查询更改【英文标题】:Athena queries changes on the fly according to the partitions introduced in S3 【发布时间】:2021-03-05 05:56:02 【问题描述】:我在 S3 中对我的 DATA_BUCKET 进行了分区,其结构为
S3/DATA_BUCKET/table_1/YYYY/MM/DD/files.parquet
现在我在 table_1 中有另外三个列,在 Athena 中显示为“partition_0”、“partition_1”和“partition_2”(分别代表年、月和日)。
到目前为止,我的应用程序一直在根据表中的“time_stamp”列进行与时间相关的查询:
select * from table_1 where time_stamp like '2023-01-17%'
现在要利用分区的性能,相应的新查询是:
select * from table_1 where partition_0 = '2023' and partition_1 = '01' and partition_2 = '17'
问题: 由于在我的应用程序中之前有很多关于 time_stamp 的查询,我不想更改它们,但仍以某种方式将这些查询转换为我的“partitions-type-queries”,就像上面一样。
在雅典娜内部有什么办法吗?
TIA
【问题讨论】:
老实说,我认为这个问题更像是“软件问题”,而不是 Athena 问题。我可以看到您的问题,我认为如果您所有的旧查询都是“从 t1 中选择 c1,c2,其中 time_stamp = #VAR”也许您可以将分区内容附加到所有旧查询中,将 #VAR 拆分为年、月和日? 【参考方案1】:您可以使用新的“time_stamp”列从原始表创建视图。 此列根据日期部分计算 日期:
CREATE OR REPLACE VIEW my_view AS
SELECT mytable.col1,
mytable.col2,
cast(date_add('day', trans_day - 1, date_add('month', trans_month - 1, date_add('year', trans_year - 1970, from_unixtime(0)))) as Date) as time_stamp
FROM my_db.my_table mytable
【讨论】:
以上是关于Athena 根据 S3 中引入的分区动态查询更改的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS Athena 中查询第一个非空值的动态 JSON 字段
Redshift Spectrum 比 Athena 慢很多?
我可以从存储在 S3 中的 sql 文件运行 Athena 查询吗