【发布时间】:2018-10-23 20:25:49
【问题描述】:
也许这个问题太笼统了,但我认为值得一试。
我正在处理一个包含 270 个字段的表。它按日期划分(如 dt=20180101)。然而,当我们用查询访问这个表时,我们实际上是在进行整个表扫描,因为我们在 where 子句中使用了不是 dt 的字段。我想知道为该表启用分桶的正确方法是什么。我可以选择其中一个 where 子句字段并为此启用分桶。例如:
PARTITIONED BY (
dt INT
)
CLUSTERED BY (
class
)
INTO 16 BUCKETS
另一种方法是使用多个字段进行分桶:
PARTITIONED BY (
dt INT
)
CLUSTERED BY (
class, other_field, other_field_2
)
INTO 128 BUCKETS
是否值得通过多个字段来支持?我猜它只会在选择中存在相同的确切字段时加快查询速度。
另一个问题,是否值得至少按多个字段排序,以便在读取文件时是顺序读取?像这样:
PARTITIONED BY (
dt INT
)
CLUSTERED BY (
class
)
SORTED BY (
other_field, other_field_2
)
INTO 16 BUCKETS
【问题讨论】: