在嵌套字段中搜索

jv4diomz  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(375)

我有一个名为items.productname的嵌套字段,我想在其中检查产品名称是否包含特定字符串。

SELECT * FROM test WHERE hasAny(items.productName,['Samsung'])

这只适用于产品名称为三星的情况。
我试过数组连接

SELECT 
    *
FROM test
ARRAY JOIN items
WHERE items.productName LIKE '%Samsung%'

这是可行的,但速度非常慢(500万条记录只需1秒钟)
有没有办法像哈萨尼那样表演?

dz6r00yl

dz6r00yl1#

您可以使用arrayfilter函数来实现这一点。clickhouse文档
查询

Select * from test where arrayFilter(x -> x LIKE '%Samsung%', items.productName) != []

如果不使用!=[]然后您将得到一个错误“db::exception:非法类型数组(string)of column for filter。必须是uint8或nullable(uint8)或它们的const变体。“

相关问题