由于从 hdp 3.1.0 升级到 3.1.4,我在 Hive 中遇到了一些我不明白的问题。请注意,我只使用 ORC 事务表。
例如这个查询:
with cte as (
select
e.id
, '{}' as json
from event e
)
-- select count(*) from cte
select
id
, lv.customfield
from cte
lateral view outer
json_tuple(cte.json, 'customfield') cv AS `customfield`
它在升级之前完美运行。
现在,即使 CTE 返回一定数量的行,使用横向视图只会从结果集中删除行,没有任何错误,而 CTE 之外没有额外的 where 子句(在我的实际示例中,查询返回 66 行没有侧视图,但只有 19 个)。
就我而言,我有:
select count(*)
给我66行- 当添加静态字符串的横向视图时,我只得到 19 行。
我尝试了很多变化:
- 如果我用静态 CTE ( ) 替换事件表,
select stack(1, ...)
我会得到我期望的结果 - 如果我删除横向视图,我有我期望的行数(只要我不使用不同)
- 如果我创建并使用临时表而不是 CTE,则结果不会改变。
- 如果我将
json_tuple(cte.json, 'customfield')
选择部分放在 CTE 之外(没有其他内容,因为它无效),没有lateral view
,我有预期的行数, - 如果我
get_json_object
在 CTE 之外的选择部分中使用(并且没有侧视图),我会得到预期的结果。 - 当然,配置单元(服务器或元存储)日志中没有任何内容。
- 附带说明一下,自从升级以来,一个
merge
语句[不断生成重复项][1],而之前它工作得很好。
另一个非常令人惊讶的是,在 CTE 内部有一个 if 语句,例如:if(is_deleted is null, 'true', 'false')
. 如果我替换应该完全有效的is null
with ,CTE 不会返回任何行。is not distinct from null
我完全不知所措,我不知道为什么会发生这种情况,也不知道我怎么能相信蜂巢。
我无法通过生成手动数据来复制错误,因此我无法给出(不)工作示例。