有和没有时间分区条件的两个 Hive 查询之间的结果差异

问题描述 投票:0回答:1

我有两个针对表运行的 Hive 查询,并且得到不同的结果,但我不完全确定原因。我想了解造成这种差异的原因。

查询1:

SELECT member_id, record_ts, record_type
FROM record
WHERE member_id = "M-01"
ORDER BY record_ts

查询2:

SELECT member_id, record_ts, record_type
FROM record
WHERE member_id = "M-01"
AND time_partition >= "2023-01"
ORDER BY record_ts

在这两个查询中,我从表“record”中选择记录,其中“member_id”等于“M-01”,并按“record_ts”列对结果进行排序。但是,查询 2 包含一个附加条件,该条件根据“time_partition”列过滤记录。

我的问题:为什么第一个查询产生空结果,而第二个查询返回结果?这两个 Hive 查询之间的结果差异可能是什么原因?

如果有任何见解或解释可以帮助我更好地理解这种行为,我将不胜感激。谢谢!

我尝试添加

hive.fetch.task.conversion=none
但这没有帮助

hadoop hive
1个回答
0
投票

用于填充

record_staging
表的表 (
record
) 使用
bucketing_version'='2'
,这会改变数据在
record_staging
表中的分布和组织方式。因此从那时起,
record
表就使用不同的分桶策略进行填充。
record
表的分桶策略基于member_id 列,这就是它影响与member_id 相关的查询的原因。

这种转变导致记录的存储方式与以前不同,从而导致了我们观察到的数据问题。要解决此问题,我们只需更新

record
表以使用相同的存储策略。

ALTER TABLE record SET TBLPROPERTIES('bucketing_version'='2');
© www.soinside.com 2019 - 2024. All rights reserved.