hdp、配置单元、侧视图和空:行消失

ndh0cuux  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(316)

由于从hdp3.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返回一定数量的行,使用横向视图也只会从resultset中删除行,没有任何错误,而在cte之外没有额外的where子句(在我的真实示例中,查询返回66行,没有横向视图,但只有19行有横向视图)。
就我而言,我有: select count(*) 给我66排
当静态字符串上的横向视图被添加时,我只得到19行。
我尝试了很多变化:
如果我用静态cte替换事件表( select stack(1, ...) )我有我期望的结果
如果我删除横向视图,我就得到了我期望的行数(只要我不使用
如果我创建并使用一个临时表而不是一个cte,结果不会改变。
如果我把 json_tuple(cte.json, 'customfield') 在cte之外的select部分(没有其他内容,因为它将是无效的),没有 lateral view ,我有预期的行数,
如果我使用 get_json_object 在cte外的选择部分(没有侧视图),我得到了预期的结果。
当然,配置单元(服务器或元存储)日志中没有任何内容。
顺便说一句,升级后 merge 语句[不断生成重复项][1],而它以前工作得非常好。
另一个非常令人惊讶的事情是,在cte中有一个if语句,例如: if(is_deleted is null, 'true', 'false') . 如果我更换 is nullis not distinct from null ,这应该是完全有效的,cte不返回任何行。
我完全不知所措,我不知道为什么会这样,我怎么能相信Hive。 
我无法通过生成手动数据来复制错误,因此我无法给出一个(非)工作示例。

9njqaruj

9njqaruj1#

我还不了解实际原因,但我可以隔离问题并提交错误报告:https://issues.apache.org/jira/browse/hive-22500
简而言之,如果涉及sort by(隐式或显式),那么lewer-than或equals with隐式字符串到timestamp的转换将失败。

-- valid result
select count(*) from ( select * from opens where load_ts <= '2019-11-13 09:07:00') t;
-- invalid result
select count(*) from ( select * from opens where load_ts <= '2019-11-13 09:07:00' sort by id) t;

您可以查看完整设置或其他示例的错误报告。解决方法是显式地将字符串转换为时间戳。

相关问题