2015-06-21 71 views
1

这听起来很基本,但这个问题困扰了我一段时间。Hive由vs分配而没有分配

可以说我有以下查询

SELECT s.ymd, s.symbol, s.price_close FROM stocks s 
SORT BY s.symbol ASC; 

在这种情况下,如果数据对符号列很好的传播的话很有道理分配基于符号列,使所有减速获得良好的份额的数据;更改查询到下面会给一个更好的性能

SELECT s.ymd, s.symbol, s.price_close FROM stocks s 
DISTRIBUTE BY s.symbol 
SORT BY s.symbol ASC, s.ymd ASC; 

是什么,如果我不指定by子句分配的效果?在第一个查询中选择的默认地图输出关键字列是什么,即它的分布列是什么?

回答

1

我自己找到了答案。通过排序,映射器的输出键不是应用排序依据的列。关键可能是记录的文件偏移量。 reducer的输出按减速器排序,但同一排序列值可能会出现在多个减速器的输出中。这意味着减速器的输出之间有重叠。通过分配来确保数据在基于按列分布的还原器之间进行拆分,从而确保相同的列值到达同一个还原器,从而确保相同的出文件。