разбиение текста на массив или разбиение массива на несколько массивов

#arrays #snowflake-cloud-data-platform #dbt

Вопрос:

Я довольно новичок в работе с массивами в snowflake (и dbt). Я разделяю имена поставщиков, которые у меня есть, когда они заполняются как имена соединений в нашем интерфейсе. Теперь я разделяю их (см. Пример ниже), но я хотел бы знать, можно ли разделить уже разделенный массив или другую функцию, которую я могу использовать для разделения текста. В приведенном ниже примере первые 3 записи разделены правильно, но следующие три разделяются неправильно, и именно здесь я был бы признателен за ввод. Простое утверждение о случае, которое я использую в данный момент, таково:

 ,case
            when upper(vendor_name) like '% AND %' then split(upper(vendor_name), ' AND ')
            when vendor_name like '%amp;%' then split(upper(vendor_name), ' amp; ')
        else array_construct(upper(vendor_name))
        end as arr_vendor_name
 

введите описание изображения здесь

Ответ №1:

Вы можете сделать это в два этапа:

  • Заменить » amp; «, » И «, «, » на «,».
  • Затем разделитесь на «,».
 split(
  replace(replace(replace(vendor_name, ' AND ', ','), ' amp; ', ','), ', ', ',')
  , ','
)
 

Бонус: вам это больше не понадобится case , и array_construct это тоже исчезнет.

Комментарии:

1. или немного безопаснее заменить AND на amp; , а затем разделить на это, таким образом, вы не превратите допустимую запятую в точку разделения.