Snowflake не удалось преобразовать значение варианта «{ЗНАЧЕНИЕ МЕТКИ ВРЕМЕНИ}» в TIMESTAMP_NTZ

#sql #json #copy #snowflake-cloud-data-platform

#sql #json #Копировать #snowflake-cloud-data-platform

Вопрос:

 copy into DB.CANONICAL.ETAIL_TABLE(MAKE, SERIAL_NUMBER, DEVICE_KEY, CONFIG_TYPE, CSF, MESSAGE_TIMESTAMP)
from (select parse_json($1):header:make::Varchar(255),
    parse_json($1):header:serialNumber::Varchar(255),
    parse_json($1):header:deviceKey::Varchar(36),
    parse_json($1):header:configType::String, 
    parse_json($1), 
    parse_json($1):header:messageTimestamp::TIMESTAMP_NTZ(2)
from @DB.CANONICAL.ETAIL_STAGE/firehose/)
ON_ERROR = CONTINUE;
  

Выше приведен оператор копирования, который я сделал. Но я продолжаю получать следующую ошибку
«Не удалось преобразовать значение варианта «2020-09-265T08:03:42.358Z» в TIMESTAMP_NTZ»

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

1. Есть ли в JSON свойство, которое имеет подобное значение? Предполагая, что оно начинается с ГГГГ-ММ-ДД, возникает проблема с частью DD, потому что она состоит из трех цифр.

Ответ №1:

Проблема с входными данными: 265 сентября не является датой.

Если вы хотите преобразовать эту дату в null, вы можете использовать вместо этого. TRY_CAST

Если вы хотите попытаться исправить дату (26 сентября? 25 сентября?), Вы могли бы попробовать сначала выполнить регулярное выражение.

 SELECT '2020-09-265T08:03:42.358Z'::TIMESTAMP_NTZ;
# Timestamp '2020-09-265T08:03:42.358Z' is not recognized

SELECT '2020-09-26T08:03:42.358Z'::TIMESTAMP_NTZ;
# 2020-09-26 08:03:42.358

SELECT TRY_CAST('2020-09-265T08:03:42.358Z' AS TIMESTAMP_NTZ);
# null