PRELUDEHiveテーブルの動的パーティションのフォーマットを変更できますか?
ダイナミックパーティショニングを使用する外部Hiveテーブルを使用しています。
INSERT INTO `dnies_click_log`
PARTITION(year, month, day, hour)
SELECT * FROM `other_db`.`other_table`
WHERE year=2016 and month=4 and day=1 and hour=0
LIMIT 1;
挿入作品、私は実際に作成しています:私はこのようなINSERT INTO ... SELECT ...
クエリを経由して挿入するんだ、今
CREATE EXTERNAL TABLE `some_test`(
`id` bigint,
`timestamp` int,
`some_other_values` bigint)
PARTITIONED BY (
`year` int,
`month` int,
`day` int,
`hour` int)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
'hdfs://nameservice1/user/Sh4pe/hive-test'
:
SET hive.exec.dynamic.partition = true
SET hive.exec.dynamic.partition.mode = nonstrict
表には、このliktになりますテーブル内のエントリ、もちろんHDFS内のファイルです。
私の質問
しかし、私はHDFS内のディレクトリが格納されている方法によって、非常に満足していない:
Sh4pe:/home/Sh4pe$ hdfs dfs -ls /user/Sh4pe/hive-test/
Found 1 items
drwxr-xr-x - hdfs dnies 0 2016-04-05 14:33 /user/Sh4pe/hive-test/some_test/year=2016
私を悩ます何がyear=2016
一部です。私は代わりに2016
を持っていたいと思います。同様に、ネストされたフォルダはmonth=4
と呼ばれます。代わりに04
(末尾のゼロ)を使用したいと思います。私はまた、ネストされた昼と時間のディレクトリも数字だけで命名されることを好むでしょう。
ダイナミックパーティションがHDFSに保存される形式を変更することはできますか?
良い質問ですが、現時点では動的に変更することはできません。私はあなたができる最良の方法は、後ですべてのパーティションの名前を変更するいくつかのHDFSコマンドを実行することだと思います。これは外部テーブルがデータをどのように読み込むかに影響します。 – Jared
dinamically挿入しないと、新しいパーティションを作成したり、その場所を変更するためにパーティションを変更することができます。 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable/PartitionLocation – Miguel