确定Hive表的bucket配置



我很好奇是否有人能提供一点关于如何配置Hive表上的bucket属性的澄清。我看到它有助于连接,我相信我读到过,把它放在一个列上,你将使用它来连接。这可能是错误的。我也很好奇如何确定要选择的桶的数量。

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

事先感谢您的协助。

克雷格

如果你想首先在你的表中实现bucket,你应该设置属性

设置hive.enforce.bucketing = true;

它将强制bucket。

肉欲:没有。列的可能值

如果您使用Cluster By子句实现bucket,那么您的bucket列应该具有较高的肉性,那么您将获得更好的性能。

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

根据用例,您可以选择桶的数量。最好选择(桶的数量)<(您的HDFS块大小),它应该是2的幂。bucket总是创建文件而不是目录

在设计bucket时可以考虑以下几点建议:

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

最新更新