2016-04-05 49 views
4

PRELUDE你可以更改Hive表的动态分区的格式吗?

我正在使用具有动态分区的外部Hive表。

SET hive.exec.dynamic.partition = true 
SET hive.exec.dynamic.partition.mode = nonstrict 

表看起来是likt这样的:

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' 

现在,我通过INSERT INTO ... SELECT ...查询这样的插入:

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; 

插入的作品,我实际上产生表格中的条目,当然还有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上的存储格式?

+0

好问题,但目前我不认为有可能动态地改变它。我认为你可以做的最好的做法是运行一些HDFS命令,以后重命名所有分区,这可能会影响外部表读取数据的方式。 – Jared

+0

Dinamically与插入不,您可以创建一个新的分区或更改分区以更改其位置: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable/PartitionLocation – Miguel

回答

相关问题