#database #snowflake-cloud-data-platform #snowflake-sql
Вопрос:
В нашем экземпляре хранилища данных Snowflake при загрузке данных из этапа в таблицу с помощью COPY INTO
инструкции DDL некоторые записи в столбце timestamp_ntz отображают значение Invalid date
в пользовательском интерфейсе Snowflake.
Эти Invalid date
значения в столбцах timestamp_ntz обладают следующими качествами:
- они не являются НУЛЕВЫМИ
- они, по-видимому, считаются всегда большими, чем любая другая метка времени, и этот атрибут можно использовать для их фильтрации, например.
WHERE strange_timestamp_col > current_timestamp()
- они не являются чем-то «на переднем плане», т. е. в пользовательском интерфейсе Snowflake — они разбивают других клиентов, используя данные в Snowflake
Мы ожидали бы, что недопустимый формат данных вернет ошибку при попытке выполнить COPY INTO
инструкцию DDL; вместо этого вставляются эти гнусные псевдо-метки времени со странными свойствами.
Ответ №1:
Мы обнаружили, что некоторые значения временных меток unix в наших файлах поэтапного паркета были отформатированы как целые числа, а некоторые-как строки!
Решение состоит в том, чтобы всегда приводить столбец к VARCHAR, а затем к TIMESTAMP_NTZ.
Пример использования временной метки unix:
SELECT 1620502461213752::timestamp_ntz;
-> Invalid date
SELECT 1620502461213752::varchar::timestamp_ntz;
-> 2021-05-08 19:34:21.213
SELECT '1620502461213752'::timestamp_ntz;
-> 2021-05-08 19:34:21.213
Комментарии:
1. Просто чтобы уточнить, вы говорите, что файлы импортируются нормально, но когда вы смотрите на данные в итоговой таблице, там написано «неверная дата»? Это звучит не очень надежно!
2. Я полностью согласен; это очень ненадежный опыт. Мы ожидаем, что недопустимые форматы данных выдадут ошибки при попытке
COPY INTO
DDL. К сожалению, этого не произошло, и мы столкнулись с этими страннымиInvalid date
значениями в столбце timestamp_ntz.