hadoop - Tez Pushdown Predicate 上的 Hive 在分区表上使用窗口函数的 View 中不起作用

标签 hadoop hive hortonworks-data-platform apache-tez

在 Tez 上使用 Hive 针对此 View 运行此查询会导致全表扫描,即使在 regionid 和 id 上存在分区也是如此。 Cloudera Impala 中的这个查询需要 0.6 秒才能完成,而使用 Hortonworks Data Platform 和 Tez 上的 Hive 则需要 800 秒。我得出的结论是,在 Tez 上的 Hive 中使用窗口函数可以防止谓词被下推到内部选择,从而导致全表扫描。

CREATE VIEW latestposition AS
WITH t1 AS (
  SELECT *, ROW_NUMBER() OVER ( PARTITION BY regionid, id, deviceid order by ts desc) AS rownos FROM positions 
)
SELECT *
FROM t1
WHERE rownos = 1; 

SELECT * FROM latestposition WHERE  regionid='1d6a0be1-6366-4692-9597-ebd5cd0f01d1' and id=1422792010 and deviceid='6c5d1a30-2331-448b-a726-a380d6b3a432';

我已经尝试使用 MAX 函数将此表连接到自身以获取最新记录,它有效,并在几秒钟内完成,但对于我的用例来说仍然太慢。此外,如果我删除窗口函数,谓词将被下推,这将在几毫秒内返回。

如果有人有任何想法,我们将不胜感激。

最佳答案

对于任何感兴趣的人,我在 Hortonworks 社区论坛上发布了这个问题。那边的好心人针对这个问题在 Hive Jira 上提出了一个 bug,并且正在积极解决这个问题。

https://community.hortonworks.com/questions/8880/hive-on-tez-pushdown-predicate-doesnt-work-in-part.html

https://issues.apache.org/jira/browse/HIVE-12808

关于hadoop - Tez Pushdown Predicate 上的 Hive 在分区表上使用窗口函数的 View 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34621949/

相关文章:

hadoop - 为 Hadoop 实践创建或获取环境

java - Hadoop中的MapReduce程序,实现了一个简单的 “People You Might Know”

json - 解析 JSON 数组并加载到配置单元表中

hadoop - 使用kite-dataset导入数据时如何避免IO错误?

hadoop - Ambari 代理不存在

hadoop - 如何找出Hadoop用户的 'group'名称?

java - 无法在 Hive 中实例化元数据.SessionHiveMetaStoreClient(Ubuntu 16.04)

hadoop - 在PIG中合并零件文件

hadoop - 如何确定 YARN 容器的正确数量?

java - Hadoop-MapReduce不减少