ClickHouse - поиск во вложенных полях - PullRequest
1 голос
/ 22 мая 2019

У меня есть вложенное поле с именем items.productName, в котором я хочу проверить, содержит ли название продукта определенную строку.

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

Работает только в том случае, если название продукта Samsung.

Я пробовал объединение массивов

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

Это работает, но очень медленно (~ 1 сек для 5 миллионов записей)

Есть ли способ действовать как в hasAny?

1 Ответ

1 голос
/ 22 мая 2019

Этого можно добиться с помощью функции arrayFilter. ClickHouse документы

Запрос

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

Если вы не используете! = [], То вы получите ошибку «DB :: Exception: недопустимый тип Array (String) столбца для фильтра. Должны быть варианты UInt8 или Nullable (UInt8) или Const».

...