Hive中的分桶是什么?
分桶是Hive中用于组织数据的一种方法。它是一种将数据分成称为桶的范围的概念。当分区变得困难时,Hive中的分桶很有帮助。用户可以通过哈希值确定特定桶的范围。
分区表可以进行分桶以进一步分离数据,从而更有效地执行查询。每个桶都作为表或分区目录中HDFS上的一个文件存储。具有相似列值的记录始终存储在同一个桶中。可以在分区表之上创建分桶,然后将表分割以提高查询性能。
分桶的优势
以下是分桶的优势:
与非分桶表相比,分桶表提供组织良好的采样。
与非分桶表相比,分桶表中的Map端连接更快。
分桶表提供更高效的查询响应。
分桶灵活,可以将每个桶中的记录组织成一个或多个列。
注意 - 分桶不负责正确填充表。因此,最终用户必须自行将数据加载到桶中。
分桶的特性
以下是分桶的主要特性:
分桶基于分桶列中的哈希函数的概念。
hash_function基于分桶表的种类。但是,系统将永久保存具有相似分桶列的数据在同一个桶中。
使用CLUSTERED BY子句将表分成桶。
每个桶在表目录中包含单个文件。
Hive中的分桶可以与分区一起使用,也可以不与分区一起使用。
由分桶表组成的文件几乎均匀分布。
Hive分区和Hive分桶的区别
分区和分桶非常相似。它们都在存储数据之前对数据进行分离。它们之间有一些显着区别。分区可能包含多个目录。因此,它适用于低容量数据。分桶在每个分区中包含等量的数据,从而使Map端连接更快。
表可能同时具有分区和分桶信息。在这种情况下,每个分区内的文件都包含一个分桶文件。
结论
本文中我们讨论的所有内容都表明,Hive中的分桶对于大型数据集连接非常有用,如果没有高端计算机资源能力,这些连接将是不可能的。
对于具有过滤器的分桶列的查询,Hive中的分桶效率更高。总的来说,使用分桶表可以更有效地利用资源。更多的桶需要更少的内存。但请记住,过多的桶会导致不必要的并行性。
广告