【问题标题】:How can I use arrayExists function when the array contains a null value?当数组包含空值时,如何使用 arrayExists 函数?
【发布时间】:2018-05-21 10:04:51
【问题描述】:

我的表中有一个可为空的数组列:Array(Nullable(UInt16))。我希望能够使用 arrayExists(或 arrayAll)查询此列,以检查它是否包含高于某个阈值的值,但是当数组包含空值时出现异常:

异常:函数 arrayExists 的表达式必须返回 UInt8,发现 Nullable(UInt8)

我的查询低于数组列的距离:

SELECT * from TracabEvents_ArrayTest
where arrayExists(x -> x > 9, distance);

我尝试将 lambda 中的比较更新为“(isNotNull(x) and x > 9)”,但仍然出现错误。有没有办法处理这些表达式中的空值,或者它们还不支持?

【问题讨论】:

    标签: sql clickhouse


    【解决方案1】:

    添加条件以使用 notEmpty 过滤具有空列表的行,并为 arrayExists 中的 x 假设 NotNull。

    SELECT * FROM TracabEvents_ArrayTest WHERE notEmpty(distance) AND arrayExists(x -> assumeNotNull(x) > 9, distance)
    

    【讨论】:

    • 谢谢米哈伊尔。我找不到关于“assumeNotNull”的任何文档。是不是一个新功能。我一直在使用这个文件,它不是最新的吗? clickhouse.readthedocs.io/en/latest/reference_en.html
    • 我能找到的唯一描述在这里 FunctionsNull 同样在这个文档中你可以找到这个函数的使用例子,但是没有描述 https://clickhouse.yandex/docs/en/single 我不确定这个函数是哪个版本的介绍了。您是否在安装时尝试过此查询?
    • 也许我将来会使用该文档。它似乎是最新的。是的,我已经在我正在使用的版本(版本 1.1.54310)上尝试过它并且它正在工作。谢谢
    猜你喜欢
    • 2018-02-28
    • 2019-05-04
    • 2018-02-09
    • 2016-09-01
    • 2020-01-01
    • 2022-01-11
    • 2022-12-15
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多