Athena(Hive/Presto)查询语句中的分区表

Athena(Hive/Presto)查询语句中的分区表,hive,partitioning,presto,amazon-athena,Hive,Partitioning,Presto,Amazon Athena,我在雅典娜(HIVE/Presto)中有以下分区表: 创建不存在的外部表mydb.mytable( id字符串, 数据串 ) 被分割( 年轮, 月弦, 日串 ) 行格式分隔 以“\t”结尾的字段 以“\n”结尾的行 位置“s3://mybucket”; 数据存储在s3中,以路径结构组织,如s3://mybucket/year=2020/month=01/day=30/ 我想知道以下查询是否会利用分区优化: 选择 * 从…起 mydb.mytable 哪里 (年份='2020'和月份='08'以

我在雅典娜(HIVE/Presto)中有以下分区表:

创建不存在的外部表mydb.mytable(
id字符串,
数据串
)
被分割(
年轮,
月弦,
日串
)
行格式分隔
以“\t”结尾的字段
以“\n”结尾的行
位置“s3://mybucket”;
数据存储在s3中,以路径结构组织,如
s3://mybucket/year=2020/month=01/day=30/

我想知道以下查询是否会利用分区优化:

选择
*
从…起
mydb.mytable
哪里
(年份='2020'和月份='08'以及日期('10','11','12'))或
(年份='2020'和月份='07'以及日期('29','30','31');

我假设由于中的
运算符将在一系列
条件中转换,因此这仍然是一个查询,它将通过分区受益。我说的对吗?

是的,我也提到过

当Athena对分区表运行查询时,它会检查查询的WHERE子句中是否使用了任何分区列。如果使用分区列,Athena请求AWS Glue数据目录返回与指定分区列匹配的分区规范。分区规范包括LOCATION属性,它告诉Athena在读取数据时使用哪个AmazonS3前缀。在这种情况下,只扫描存储在此前缀中的数据。如果在WHERE子句中不使用分区列,Athena将扫描属于表分区的所有文件


不幸的是,雅典娜并没有公开能够让人们更容易理解如何优化查询的信息。目前,您唯一能做的就是运行不同的查询变体,并查看
GetQueryExecution
API调用中返回的统计信息

确定Athena是否会在查询中使用分区的一种方法是使用分区列的不同值运行查询,并确保扫描的数据量不同。如果数据量不同,雅典娜可以在查询规划期间修剪分区