gpt4 book ai didi

hadoop - 在 Hive 中对表进行分区和分桶有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 14:06:05 26 4
gpt4 key购买 nike

我知道两者都是在表中的列上执行的,但每个操作有何不同。

最佳答案

分区 数据通常用于水平分布负载,这具有性能优势,并有助于以逻辑方式组织数据。 示例:如果我们正在处理一个大型employee 表并且经常使用WHERE 子句运行查询,将结果限制在特定国家或部门。为了更快的查询响应,Hive 表可以PARTITIONED BY (country STRING, DEPT STRING)。分区表改变了 Hive 构建数据存储的方式,Hive 现在将创建反射(reflect)分区结构的子目录,如

.../employees/country=ABC/DEPT=XYZ.

如果查询限制country=ABC的employee,它只会扫描一个目录country=ABC的内容。这可以显着提高查询性能,但前提是分区方案反射(reflect)了常见的过滤。分区功能在 Hive 中非常有用,但是,创建过多分区的设计可能会优化某些查询,但对其他重要查询不利。分区太多的另一个缺点是不必要地创建大量 Hadoop 文件和目录以及 NameNode 的开销,因为它必须将文件系统的所有元数据保存在内存中。

分桶 是另一种将数据集分解为更易于管理的部分的技术。例如,假设一张表以date作为顶级分区,以employee_id作为二级分区,导致小分区过多。相反,如果我们对 employee 表进行分桶并使用 employee_id 作为分桶列,该列的值将通过用户定义的数字散列到桶中。具有相同 employee_id 的记录将始终存储在同一个存储桶中。假设 employee_id 的数量远大于 bucket 的数量,那么每个 bucket 都会有很多 employee_id。创建表时,您可以指定 CLUSTERED BY (employee_id) INTO XX BUCKETS; 其中 XX 是桶的数量。分桶有几个优点。桶的数量是固定的,因此它不会随数据波动。如果两个表按 employee_id 分桶,Hive 可以创建逻辑上正确的抽样。分桶还有助于进行高效的 map 端连接等。

关于hadoop - 在 Hive 中对表进行分区和分桶有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19128940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com