Ограничение красного смещения для оператора LIKE в инструкции CASE - PullRequest
0 голосов
/ 15 февраля 2019

Я сталкиваюсь с проблемой, когда, если у меня есть более 15 LIKE операторов внутри оператора case, я получаю ошибку java.lang.StackOverflowError.

Вот пример того, что я делаю стаблица с 60 миллионами строк:

SELECT 
  CASE WHEN field LIKE '%value%' THEN 'result'
       WHEN field LIKE '%value2%' THEN 'result2'
       .... 14 more of those
  END

Я не видел ни одного документированного ограничения.Есть идеи как обойти это?

Ответы [ 3 ]

0 голосов
/ 16 февраля 2019

Вы можете Создать пользовательскую функцию Scalar Python для замены LIKE сравнений.

Затем просто используйте:

SELECT f_myfunc(field)
0 голосов
/ 05 марта 2019

Это оказалось проблемой с драйверами.Первоначально я использовал 1.2.16.1027 и обновился до 1.2.20.1043, и больше не получаю сообщение об ошибке.

0 голосов
/ 16 февраля 2019

Похоже, это ошибка нехватки памяти.

Я думаю, у вас есть несколько вариантов:

  • использовать промежуточную таблицу перед выполнением обработки like (илииспользуйте промежуточные таблицы для обработки подмножеств ваших исходных данных)
  • увеличьте количество слотов очереди, которые вы используете для этого запроса, чтобы иметь больше доступной памяти https://docs.aws.amazon.com/redshift/latest/dg/r_wlm_query_slot_count.html
  • посмотрите навывод explain, чтобы увидеть, дает ли он вам подсказки о том, что идет не так
...