Проверка того, является ли поле массива пустым или пустым?

#sql #snowflake-cloud-data-platform

Вопрос:

В snowflake, как я могу фильтровать пустые или пустые поля массива в столбце?

В столбце есть пустая [] или строка значений в этой скобке, которую пытались использовать array_size(column_name, 1) > 0 , но array_size не работает,

Спасибо

Ответ №1:

Вы пытаетесь отфильтровать их внутри или снаружи?

В любом случае, array_size должен работать. хотя второй аргумент where column_name is not null and array_size(column_name) != 0 не сработал для меня

Если вы специально хотите отфильтровать записи с пустым массивом, этот подход тоже работает, хотя и немного странно. where column_name = array_construct()

Правка: Похоже, ваша проблема в том, что ваш столбец является строкой. Есть несколько способов обойти это

  • Измените тип данных столбца на вариант или массив
  • Проанализируйте свой столбец перед использованием функций массива array_size(TRY_PARSE_JSON(column_name)) != 0
  • Вместо этого сравните со строкой column_name is not null and column_name != '[]'

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

1. получите ошибку Не удается преобразовать параметр ‘ARRAY_CONSTRUCT()’ типа [МАССИВ] в ожидаемый тип

2. каков тип данных вашей колонки? МАССИВ или ВАРИАНТ? Если это ВАРИАНТ, то у вас может быть значение, которое не является МАССИВОМ.

3. какова последняя часть этой ошибки? Мне удалось получить аналогичную ошибку, сначала преобразовав ее в строку, что указывает на проблему с типом данных. where array_size(column_name::array) = 0 Может быть, попробовать? Однако это по-прежнему зависит от того, чтобы строка была последовательно в правильном формате, поэтому изменение типа данных, как правило, предпочтительнее.

4. полная ошибка заключалась в том, что не удалось преобразовать параметр ‘ARRAY_CONSTRUCT()’ типа [МАССИВ] в ожидаемый тип [VARCHAR(16777216)]

5. Попытка отфильтровать записи, содержащие только [], или включить записи, содержащие строку или значения в []

Ответ №2:

Если столбец является строковым, сначала его необходимо проанализировать:

 SELECT *
FROM tab
WHERE ARRAY_SIZE(TRY_PARSE_JSON(column_name)) > 0;
      -- excluding NULLs/empty arrays