我有一个Hive声明如下:
INSERT INTO TABLE myTable partioned (myDate) SELECT * from myOthertable
myOthertable
包含100万条记录,在执行上述插入时,并非所有行都插入myTable
。由于理论上这是一个SELECT *
个查询而没有任何WHERE
子句,因此应该对从myOthertable
到myTable
的所有行执行插入操作。它在插入时忽略了一些行。
有谁能说明为什么会这样?
答案 0 :(得分:0)
问题可能是由于,如果表足够大,上面的查询将无法工作,似乎是由于在初始地图任务上创建的文件数量较多。
因此,在这种情况下,将hive查询中的记录分组到地图流程上并在reduce侧处理它们。您可以使用DISTRIBUTE BY在您的配置单元查询中实现相同的功能。以下是查询。
FROM myOthertable
INSERT OVERWRITE TABLE myTable(myDate)
SELECT other1, other2 DISTRIBUTE BY myDate;