Hive中的分区列顺序是否重要?

时间:2019-10-07 10:51:09

标签: hive hdinsight

让我们说我有一个分区表,其中有多列作为分区键,例如

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

那么这个特定顺序真的重要吗?所有在线资源均指仅扫描特定子目录进行搜索的优势。但是最终所有内容都是大数据中的文件,目录似乎更像是逻辑分组。当在分区列上指定过滤器时,hive只需要知道涉及哪些文件以及它们位于何处,就不确定目录将如何发挥作用-好像目录已加载到内存中一样-文件是加载到内存中-目录路径更像是给定文件的标签。如果是这样,无论我们为分区指定哪个顺序,都没有关系。在HDInsight中,这一点尤其明显,其中基础文件系统(BLOB)没有目录的概念。

1 个答案:

答案 0 :(得分:1)

尽管您对目录是逻辑结构是正确的,但如果考虑到HiveServer2为了执行平均查询而必须获取和筛选的元数据量,则顺序确实很重要。如果查询包含...WHERE department='IT'...,并且按您显示的方式对分区进行了布局,则总共有100个部门,分区修剪机制将能够立即从树中删除99个子目录。但是,如果颠倒分区列的顺序,则同一查询将需要从Hive MetaStore检索(30天x 12个月x N年)分区的元数据,只是要弄清楚分区/department=IT是否实际上存在于所有分区中。他们。因此,可以通过分析主要查询模式来确定分区的顺序。

要考虑的另一个常见因素是与开发人员/维护相关,尤其是在将数据增量加载到表中的情况下。如果需要从不成功的负载中回退/恢复,他将需要分别在每个部门子树中删除一个分区(day=08),还是可以通过删除分区(day=08)一次清除所有部门数据?