如果 Athena 表中只有 1 个分区,但用户不按该分区查询,会扫描多少数据?

问题描述 投票:0回答:1

假设我有一个 Athena 表

mytable
按列分区
A, B, and C

我们将通过卸载查询将数据插入到 s3 存储桶中。数据将按

A/B/C
进行分区。每个都有不同的值。

我们希望表仅指向 1 个分区

C
。我们考虑这样做的方式是每次引入
C
的新值时,我们都会

ALTER TABLE mytable DROP PARTITION (A = 'some A value', B = 'some B value')

ALTER TABLE mytable ADD PARTITION (A = 'some A value', B = 'some B value', C = 'new C value')

假设对于给定的 A/B 组合,C 有 10 个不同的值。

A=A1/B=B1/C=C1/
A=A1/B=B1/C=C2/
A=A1/B=B1/C=C3/
A=A1/B=B1/C=C4/
...

如果我仅在 A 和 B 上查询

mytable
,并且
mytable
仅查看 1 个分区,Athena 是否仍会扫描
C2, C3, C4
?我要运行的查询是

SELECT ...
FROM mytable
WHERE A = <some A value>
and B = <some B value>

我不会通过

C
进行查询,所以我想确保 Athena 不会扫描多个 C 分区。

amazon-web-services amazon-s3 amazon-athena
1个回答
0
投票

是的,Athena 会扫描 C 的所有分区,如 C1、C2、C3、C4,除非您不在 where 条件中过滤 C 的分区。

如果你不写这样的查询

select * from table 
      where A = <some A value> and 
            B = <some B value> and 
            C = <some C value >  

如果你这样写

select * from table 
   where A = <some A value> and 
         B = <some B value> 

它将扫描C的所有分区。

© www.soinside.com 2019 - 2024. All rights reserved.