在配置单元中分区列的顺序重要吗?

50few1ms  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(381)

假设我有一个分区表,其中有多列作为分区键。

partitioned by (department string,year int, month int,day int)

那么这个具体的顺序真的重要吗?所有在线资源都提到了只扫描特定子目录进行搜索的优势。但最终一切都是大数据中的一个文件,目录似乎更像是逻辑分组。当在分区列上指定一个过滤器时,配置单元只需要知道涉及哪些文件以及它们位于何处,不确定目录如何有用--这不像目录加载在内存中--文件加载在内存中--目录路径更像是给定文件的标签。如果是这样的话,不管我们为分区指定哪种顺序,这都不重要。这在hdinsight中尤其明显,在hdinsight中,底层文件系统(blobs)没有目录的概念。

nbewdwxp

nbewdwxp1#

尽管您认为目录是逻辑结构是正确的,但是如果您考虑到为了执行一个平均查询,hiveserver2必须获取和筛选的元数据量,那么顺序确实很重要。如果查询包含 ...WHERE department='IT'... ,并且分区的布局如您所示,假设总共有100个部门,分区修剪机制将能够立即从树中删除99个子目录。但是如果分区列的顺序颠倒,那么同样的查询将需要从hivemetastore检索(30天x 12个月x n年)分区的元数据,以确定分区是否正确 /department=IT 实际上存在于所有的人身上。因此,可以通过分析主要的查询模式来决定分区的顺序。
另一个需要考虑的常见因素是与devops/维护相关的,特别是当数据以增量方式加载到表中时。如果需要从失败的加载中退避/恢复,是否需要删除分区( day=08 )在每个部门子树中,或者可以通过删除分区一次清除所有部门数据( day=08 )?

相关问题