假设我有一个 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 分区。
是的,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的所有分区。