我有一个Hive表,按年份和月份进行分区,并按天进行分区。这是DDL(最初为空):
CREATE EXTERNAL TABLE db.myTable (
id STRING,
...,
date INT
)
PARTITIONED BY (year INT, month INT)
CLUSTERED BY (date) INTO 31 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '<myTable-hdfs-path>';
当插入Hive表时,从文档中,它应该只有最多31个HDFS文件(称为存储桶)。我尝试在这个表上进行单行插入(最后一个字段是日期/日期字段)。
INSERT INTO db.myTable
PARTITION (year=2015, month=10)
VALUES ('1447372800', ... , 15);
MapReduce作业在<myTable-hdfs-path>/year=2015/month=10
中创建31个文件,只有一个文件(比如00000_0
)具有非零字节大小,其余文件为0.
当我尝试插入具有相同年份,月份,日期(其他值不同)的另一个条目时,MapReduce作业会创建另一组31个文件(总共62个),类似于第一个插入。
如果我正确阅读文档,第二个插入应该只是将条目附加到00000_0,尊重表的聚类。为什么这种行为“奇怪”?
P.S。我在Cloudera CDH QuickStart 5.4.0上使用Hive v1.1.0