确定 Hive 上的分桶配置 Table

Determining Bucketing Configuration on Hive Table

我很好奇是否有人可以提供更多关于如何在 Hive table 上配置分桶 属性 的说明。我看到它有助于连接,我相信我读到将它放在您将用于连接的列上是很好的。那可能是错误的。我也很好奇如何确定要选择的桶数

如果有人能就如何确定所有这些事情给出一个简短的解释和一些文档,那就太好了。

在此先感谢您的帮助。

克雷格

以下是设计水桶时需要考虑的一些建议。

  1. 桶通常在最关键的列、单个列或一组列上创建,因此这意味着这些列将是各种连接条件的主要列,因为分桶的概念是散列这些集合的列并以这样一种方式存储它,使其易于从 hdfs faster.Thus 检索速度是 fast.Its 建议不要只使用所有关键的连接列,我们认为这会提高性能。
  2. 桶的数量将以 2 的指数为单位。桶的数量决定了 reducer 的数量 运行,这决定了存储数据的文件的最终数量。因此,在设计桶数时必须牢记我们正在处理的数据大小,并牢记避免 hdfs 中的大量小文件和少量大文件,从而提高配置单元查询检索速度和优化。

如果您想在 table 中实施分桶,您应该首先设置 属性

设置hive.enforce.bucketing=true;

它将强制分桶。

carnality:no.of 列的可能值。

如果您使用 Cluster By 子句实现分桶,您的分桶列应该具有高亲和力,那么您将获得更好的性能。

如果您使用 Partitioned By 子句实现分区,您的分区列应该具有较低的亲和力,那么您将获得更好的性能

根据用例,您可以选择 buckets.It 的数量(桶数)<(您的 hdfs 块大小),它应该是 2 的幂。 分桶将始终创建文件而不是目录。