首页 > 解决方案 > Apache Hive 上的查询结果不一致(联合、分组依据、时间戳)

问题描述

我开发了一个 HQL 查询来检索两个表之间的差异。

use P00129;
set hive.execution.engine=tez;
set tez.queue.name=HQ_IST;
set hive.strict.checks.large.query = false;
set hive.mapred.mode=unstrict;

SELECT Step2.uv_id, Step2.date_statut, Step2.date_creation, Step2.No_Table_min, Step2.No_Table_max FROM (
SELECT Step1.uv_id, Step1.date_statut, Step1.date_creation, min(Step1.No_Table) as No_Table_min, Max(Step1.No_Table) as No_Table_max
FROM (
SELECT 
1 as No_Table, uv_id, date_statut, date_creation from dev_{mytable}
UNION  
SELECT
2 as No_Table, uv_id, date_statut, date_creation from {mytable} 
) Step1
GROUP BY Step1.uv_id, Step1.date_statut, Step1.date_creation
) Step2
where Step2.No_Table_min = Step2.No_Table_max
ORDER BY Step2.uv_id

通常效果很好。但这里是我在特定桌子上遇到的问题

查询 全查询结果

step2.uv_id       step2.date_statut          step2.date_creation            step2.no_table_min       step2.no_table_max
1          35325195         2019-04-01 09:33:00.0  2019-04-01 10:21:31.0  1            1
2          35325195         2016-02-10 11:58:00.0  2019-04-01 10:21:31.0  2            2

现在让我们通过过滤结果中存在的 uv_id 来关注特定的 uv_id 关注 uv_id

没有一条线。等等......所以没有更多的区别?

好吧,显然,这个 uv_id 上的真实数据从来没有任何差异

_u1.no_table     _u1.uv_id         _u1.date_statut _u1.date_creation
1          1          35325195         2016-02-10 11:58:00.0  2019-04-01 10:21:31.0
2          2          35325195         2016-02-10 11:58:00.0  2019-04-01 10:21:31.0

如您所见,第一个查询为第一个表提供2019-04-01 09:33:00.0而不是2016-02-10 11:58:00.0。我不知道这里会发生什么。怎么了 ?

我们使用 Hive 2.3.0 最好的问候,

西蒙

标签: hiveql

解决方案


推荐阅读