分区和集群方式在配置单元表中是如何工作的



我正试图通过使用数据的放置方式来理解下面的查询。

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个存储桶(文件(,所有这些文件都将具有所有employee_id,但哪个文件将位于哪个目录下,如何决定?

有人能帮我理解吗?

目录是分区或表位置。Buckets是这些目录中的文件。

复杂分区是分层目录。在您的情况下:

`/user/hive/warehouse/mytable/` - Table location, contains partition directories:
`y=2015/` - year partition directory, contains months directories: 
`m=12/` - month partition, contains days partitions directories:
`d=02/` - day partition, contains 256 files(buckets)
00000
...
00255
`d=03/` -Each day partition will contain 256 files (if you have enough data)
00000
...
00255     

每个文件不会包含所有employee_id。哪个记录将放在哪个文件中是使用以下公式决定的:

bucket_number=hash_function(employee_id) MOD 256 

其中hash_function是整数,在Intemployee_id的情况下,它等于employee_id。

256-是的桶数

MOD 256将产生[0.255]范围内的整数值,对应于存储桶编号。

相同的id将总是在相同的桶中。每个日常分区将包含自己的文件(bucket(,每个分区最多256个bucket。

假设employee_id=1024进入bucket 0,如果在许多天内存在相同的employee_id,则它将在每天目录中的文件00000中。

CCD_ 8进入文件000026,因为CCD_。

因此,首先通过分区键对数据进行分区,在分区内对数据进行分块(分布在文件之间(。

最新更新