よくある質問は、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 回再読み取りすると思われることを除けば、これは実際には問題なく機能すると思います。たとえば、上記の最初の「What I Mean」コード ブロックでは、パーティション 20120101..20120103 はすべてファイル 201201/file1.tsv を指しています。したがって、クエリに次のものが含まれている場合:
and partitionName >= '20120101' and partitionName <= '20120103"
クエリに答えるために、「201201/file1.tsv」を 3 回読み取りますか? それとも、Hive は "201201/file1.tsv" を 1 回スキャンするだけでよいことを認識できるほどスマートでしょうか?