我试图通过使用下面的查询来理解如何放置数据。
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
关键字 PARTITIONED BY
将在下面像dir结构一样分布数据。
/user/hive/warehouse/mytable/y=2015/m=12/d=02
但我不明白,怎么办 employee_id
将分布在这些目录中?将创建256个bucket(文件),所有这些文件都将具有 employee_id
但哪个文件将放在哪个目录下,如何决定?
有人能帮我理解这个吗?
1条答案
按热度按时间rfbsl7qr1#
目录是分区或表位置。bucket是这些目录中的文件。
复杂分区是分层目录。就你而言:
每个文件将不包含所有员工id。哪个记录将位于哪个文件中使用以下公式确定:
哪里
hash_function
是整数,如果是intemployee_id
等于员工id。256
-是桶的数量MOD 256
将产生[0..255]范围内的整数值,对应于桶编号。同一个id总是在同一个bucket中。每个每日分区将包含它自己的文件(bucket),每个分区最多包含256个bucket。
假设employee\u id=1024进入bucket 0,如果同一个employee\u id在很多天内都存在,那么它将在每个day目录的00000文件中。
employee_id=1050
进入文件000026,因为1050 MOD 256 = 26
.因此,首先数据是按分区键进行分区的,在分区内它是扣接的(分布在文件之间)。