我有一个分区和群集的配置单元表(使用配置单元1.2):
start /B %~dp0jre\bin\java.exe -jar %~dp0myJar.jar
我将数据插入其中:
hive> describe formatted myClusteredTable;
# col_name data_type
utc_timestamp timestamp
...
clusteredId bigint
# Partition Information
# col_name data_type
datePartition string
# Detailed Table Information
Num Buckets: 100
Bucket Columns: [clusteredId]
Sort Columns: [Order(col:clusteredId, order:1), Order(col:utc_timestamp, order:1)]
Storage Desc Params:
serialization.format 1
我希望它为每个分区生成100个文件。 相反,它产生了更多:
SET hive.enforce.bucketing=true;
SET hive.enforce.sorting=true;
INSERT OVERWRITE TABLE myClusteredTable PARTITION (datePartition)
SELECT ...
utcTimestamp,
clusteredId,
datePartition
FROM (
... subquery ...
) subquery
SORT BY datePartition, clusteredId, utcTimestamp;
请帮助我理解为什么会发生这种情况以及如何避免这种情况。
答案 0 :(得分:1)
可能与你的Hive版本有关。
答案 1 :(得分:0)
似乎由于@lake在Hive 1.2中描述的错误,我需要使用一种语法来明确设置reduce任务的数量:
SET mapred.reduce.tasks = 100;
然后使用DISTRIBUTE BY
或CLUSTER BY
明确分发。