Redshift POSIX регулярное выражение не имеет значения - PullRequest
0 голосов
/ 27 декабря 2018

Я запрашиваю данные из AWS Redshift с помощью регулярных выражений POSIX.Однако у меня возникают трудности с поиском всей строки путем нахождения нескольких слов без учета порядка.

Таблица выглядит следующим образом:

ID  | full_term 
123 | juice apple farm
123 | apple juice original
123 | banana juice

Например, я ищу целую строку, которая содержит как apple, так и juice, поэтому я ожидаю получить первоедва ряда.Мой текущий запрос:

SELECT full_term FROM data_table
WHERE full_term ~ '(.*apple+)(.*juice+).*$'

Однако порядок имеет значение в этом методе.Я также попытался full_term ~ '(?=.*apple+)(?=.*juice+).*$', но получил сообщение об ошибке [Amazon](500310) Invalid operation: Invalid preceding regular expression prior to repetition operator. The error occurred while parsing the regular expression fragment: '(?>>>HERE>>>=.*apple+)'. Я только что понял, ?= не работает в Redshift.

Является ли использование UDF единственным решением в этом случае?Кроме того, я хочу только точные apple и juice в полном объеме.То есть pineapple не должно быть включено.

1 Ответ

0 голосов
/ 28 декабря 2018

Вероятно, это наиболее четко написано как AND ed отдельных совпадений регулярных выражений.Чтобы убедиться, что вы не соответствуете, например, pineapple при поиске apple, вам необходимо убедиться, что по обе стороны от поискового термина есть либо пробел, либо начало / конец строки:

SELECT full_term FROM data_table
WHERE full_term ~ '(^|\\s)apple(\\s|$)'
  AND full_term ~ '(^|\\s)juice(\\s|$)'
...