一个典型的问题是一个 Hive 分区是否可以由多个文件组成。我的问题是相反的。多个 Hive 分区可以指向同一个文件吗?我将从我的意思开始,然后是用例。
我的意思是说:
Hive Partition File Name
20120101 /file/location/201201/file1.tsv
20120102 /file/location/201201/file1.tsv
20120103 /file/location/201201/file1.tsv
用例:在过去的许多年里,我们一直以月度格式将数据加载到 Hive 中。所以它看起来像这样:
Hive Partition File Name
201201 /file/location/201201/file1.tsv
201202 /file/location/201202/file1.tsv
201203 /file/location/201203/file1.tsv
但是现在月份太大了,所以我们需要按天分区。所以我们希望以 201204 开头的新文件是每天的:
Hive Partition File Name
20120401 /file/location/20120401/file1.tsv
20120402 /file/location/20120402/file1.tsv
20120403 /file/location/20120403/file1.tsv
但是我们希望所有现有的分区也每天重做,所以我们会按照我上面的建议进行分区。我怀疑这实际上没有问题,除了我怀疑 Hive 会为针对文件定义的每个附加分区重新读取相同的数据文件 N 次。例如,在上面的第一个“我的意思”代码块中,分区 20120101..20120103 都指向文件 201201/file1.tsv。所以如果查询有:
and partitionName >= '20120101' and partitionName <= '20120103"
它会读三遍“201201/file1.tsv”来回答查询吗?或者 Hive 会足够聪明,知道只需要扫描一次“201201/file1.tsv”吗?