Массив Presto содержит элемент, которому нравится какой-то шаблон

Например, один столбец в моей таблице представляет собой массив, я хочу проверить, содержит ли этот столбец элемент, который содержит подстроку «запрещено» (таким образом, такие элементы, как «запрещено в 12:00», «запрещено администратором» будут учитываться, Я считаю, что мне придется использовать «нравится», чтобы определить шаблон). Как написать sql для этого?


person daydayup    schedule 08.06.2018    source источник
comment
Пожалуйста, добавьте образцы данных и ожидаемый результат   -  person mtr.web    schedule 08.06.2018


Ответы (3)


Используйте функции массива от presto:

  • filter(), который возвращает элементы, удовлетворяющие заданному условию
  • cardinality(), который возвращает размер массива:

Как это:

where cardinality(filter(myArray, x -> x like '%denied%')) > 0
person Bohemian♦    schedule 08.06.2018
comment
Вы можете reduce(myArray, false, (a, x -> a OR x like '%denied%')) избежать копирования массива для каждой строки. - person Piotr Findeisen; 09.06.2018

В более новых версиях PrestoSQL (теперь известная как Trino), вы можете использовать функцию any_match:

WHERE any_match(column, e -> e like '%denied%'))
person Martin Traverso    schedule 30.04.2021

См. документацию по оператору массива здесь

contains(array_column,'denied')

person twoy    schedule 20.01.2020
comment
это не отвечает на вопрос. Согласно документу, оператор CONTAINS ищет только точные совпадения. - person bmarcov; 29.04.2020