下面是我试图在执行引擎为tez的hive上运行的查询。
SELECT A.CITY, A.NAME, B.PRICE
,(ROW_NUMBER() OVER (PARTITION BY A.NAME ORDER BY B.PRICE) ) AS RNUM
FROM TABLE1 A
LEFT JOIN TABLE2 B
ON A.NAME = B.NAME
WHERE ( A.COLUMN2 >= B.COLUMN3 AND A.COLUMN2 < B.COLUMN4)
GROUP BY A.CITY, A.NAME, B.PRICE;
当我在配置单元中对数据运行上述查询时,它会持续运行数小时而没有任何结果,但从语法上讲,上述查询是正确的。
表A和表B都有数百万条记录。
我尝试更改数据格式、增加容器大小、更改缩减器的数量和更改堆大小。无论我更改什么参数,查询都会被卡住。
在进一步的研究中,我注意到where条件和window函数导致查询无限运行。
我的问题是:
有什么变化会使查询在海量数据上端到端地运行?
谢谢你的帮助
1条答案
按热度按时间shstlldc1#
我猜这不是由内存分配或减速机计数引起的。可能是数据倾斜造成的。也从这一点来分析。此链接将有助于:https://cwiki.apache.org/confluence/display/hive/skewed+join+optimization
下面的链接提供了关于倾斜表和列表排序的见解。不要错过阅读。
https://cwiki.apache.org/confluence/display/hive/listbucketing
谢谢!