1

我有如下 Hive 声明:

INSERT INTO TABLE myTable partioned (myDate) SELECT * from myOthertable

myOthertable包含 100 万条记录,并且在执行上述插入时,并非所有行都插入到myTable. 由于它是一个SELECT *没有任何WHERE子句的查询,理想情况下,应该对myOthertableinto中的所有行进行 Insert myTable。它在插入时会忽略某些行。

谁能建议为什么会这样?

4

1 回答 1

0

问题可能是由于,如果表足够大,上述查询将无法正常工作,因为在初始地图任务中创建的文件数量较多。

因此,在这种情况下,将 hive 查询中的记录分组到 map 进程中,并在 reduce 端处理它们。您可以使用 DISTRIBUTE BY 在您的配置单元查询本身中实现相同的功能。下面是查询。

FROM myOthertable 
INSERT OVERWRITE TABLE myTable(myDate) 
SELECT other1, other2 DISTRIBUTE BY myDate;

此链接可能会有所帮助

于 2014-12-01T06:58:44.700 回答