Bucting 是另一种将数据集分解为更易于管理的部分的技术。例如,假设一个表使用 date作为顶级分区,使用 employee_id作为第二级分区,这会导致太多的小分区。相反,如果我们桶的雇员表和使用 employee_id作为桶的列,该列的值将被散列一个用户定义的数字到桶。具有相同 employee_id的记录将始终存储在相同的存储桶中。假设 employee_id的数量远大于桶的数量,那么每个桶将有许多 employee_id。在创建表时,您可以像 CLUSTERED BY (employee_id) INTO XX BUCKETS;那样指定其中 XX 是桶的数量。桶装有几个好处。桶的数量是固定的,因此它不会随着数据而波动。如果有两个表受到 employee_id的挑战,Hive 可以创建逻辑正确的抽样。桶也有助于做有效的地图边连接等。
CREATE TABLE mytable (
name string,
city string,
employee_id int )
PARTITIONED BY (year STRING, month STRING, day STRING)
CLUSTERED BY (employee_id) INTO 256 BUCKETS