array_intersect
материализует результат (пересечение), тогда как единственное, что вы проверяете, - это членство в определенных предопределенных элементах. В этом случае я бы рекомендовал использовать any_match
.
any_match(links, e -> e IN ('504949547', '504949616', ...))
Если вы используете версии Presto, которые не имеют any_match
,Вы можете использовать reduce
:
reduce(
links, -- array to reduce
false, -- initial state
(s, e) -> s OR e IN ('504949547', '504949616', ...), -- reduction function
s -> s) -- output function
Попытался включить разливной диск, но это не помогло.
Примечание: В Presto разлив поддерживается для определенных операторов (большинство функций «Объединения», «Агрегирование», «По порядку», «Окно»). Это не относится к скалярным функциям, работающим на ARRAY
s. Также не стоит ожидать разлива повышения производительности . Это может только уменьшить объем памяти при стоимости производительности.