我有一个配置单元表,它在不同的列上进行分区和扣合,如下所述:
CREATE TABLE IF NOT EXISTS employee_partition_bucket(
employeeID Int,
firstName String,
designation String,
salary Int)
PARTITIONED BY (department string)
CLUSTERED BY (designation) INTO 3 BUCKETS
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
分区是数据之间的逻辑边界。bucketing的工作原理是计算列的hashvalue,用bucket的个数计算一个模数,余数决定记录到哪个bucket。数据被聚集到存储桶中。
如果配置单元表只有分区,并且传入的查询包含where子句,那么配置单元将避免读取不需要的分区,从而优化查询并发回结果。
到目前为止,我对Hive分区很清楚,但是对于如何在只有bucketing的情况下选择相应的bucket有点不清楚。
如果一个配置单元表只有一个bucket,而我们的查询没有where子句(一个错误的查询,但假设是这样),那么配置单元如何理解应该从哪个bucket中检索数据呢。hive会从select查询中的列列表中知道带方框的列吗?如果我在select查询中根本不使用该列呢?
ddl说:
PARTITIONED BY (department string)
CLUSTERED BY (designation) INTO 3 BUCKETS
这是否意味着每个分区根据名称进一步聚集到3个bucket中?
暂无答案!
目前还没有任何答案,快来回答吧!