Снежинка показывает «Недопустимую дату» в столбце TIMESTAMP_NTZ

#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.