开发者社区> 问答> 正文

Flink sql 在使用<&gt;或者!=做过滤时候,null也会像在hive里面样被过滤掉么?

Flink sql 在使用<>或者!=做过滤时候,null也会像在hive里面样被过滤掉么? hive里面感觉这有点坑,每次还要小心处理下.

*来自志愿者整理的flink邮件归档

展开
收起
毛毛虫雨 2021-12-06 16:23:04 1722 0
1 条回答
写回答
取消 提交回答
  • 不仅在 hive 中,在 Flink 中也是一样的,两个系统的SQL解析优化框架都是参考了Calcite, hive的SQL解析是自己的,flink的SQL解析和优化都是基于Calcite,

    对于null值是否过滤,SQL中 一个 bool表达式(如 a > b) 的返回值 是有三个的,true,false,unknown,unknown 主要出现在有null值得情况下,比如 null > ‘hello’ 的返回值就是unknown, unknown的返回值可以在calcite中配置,Flink 默认的配置是 unknown as mode,就是 null > ‘hello’ 返回false,看你条件是过滤false的话,那么null值就会被过滤掉.

    社区之前有个issue[1]在跟进这个问题, 在此之前建议处理 null 时,都用 IS NULL , IS NOT NULL 先做下过滤再做逻辑判断,一般SQL里面也是这样处理的。

    [1] https://issues.apache.org/jira/browse/FLINK-18164 https://issues.apache.org/jira/browse/FLINK-18164

    *来自志愿者整理的flink邮件归档

    2021-12-06 17:02:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hive Bucketing in Apache Spark 立即下载
spark替代HIVE实现ETL作业 立即下载
2019大数据技术公开课第五季—Hive迁移到MaxCompute最佳实践 立即下载