#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