Снежинка выбирает формат отметки времени вместо формата даты при загрузке CSV - PullRequest
1 голос
/ 11 января 2020

У меня есть CSV со столбцом, содержащим базовые c даты (например, 01/11/2020).

Я указал в FILELOADER следующие спецификации формата:

  • DATE_FORMAT = 'MM/DD/YYYY'
  • TIMESTAMP_FORMAT = 'MM/DD/YYYY HH24:MI'.

Это должно создать совпадение для столбцов даты, используя DATE_FORMAT. Однако Snowflake видит столбец даты и определяет его как столбец отметки времени. Поскольку в этом столбце нет времени, он не может соответствовать TIMESTAMP_FORMAT, а загрузка не выполняется.

Почему Snowflake выбирает идентификацию моего столбца даты как столбца метки времени?

Вот полная спецификация ФОРМАТ ФАЙЛА, которую я использую:

CREATE OR REPLACE FILE FORMAT jobstats_csv_format
  TYPE = CSV FIELD_DELIMITER = ',' SKIP_HEADER = 1 NULL_IF = ('NULL', 'null') EMPTY_FIELD_AS_NULL = true COMPRESSION = AUTO FIELD_OPTIONALLY_ENCLOSED_BY='"' DATE_FORMAT = 'MM/DD/YYYY' TIMESTAMP_FORMAT = 'MM/DD/YYYY  HH24:MI';

... эта спецификация формата файла упоминается в моем определении этапа ...

CREATE OR REPLACE STAGE tct_jobstats_input_stage
  URL='azure://blahblahblah.blob.core.windows.net/tct-filefly-input/'
  CREDENTIALS=(AZURE_SAS_TOKEN='blahblahblahblahblah')
  FILE_FORMAT = jobstats_csv_format;

... и код Я использую, чтобы загрузить его ...

    try 
    {
        var load_cmd  = "COPY INTO LifelineRemoved ";
            load_cmd += "FROM @tct_jobstats_input_stage ";
            load_cmd += "PATTERN='.*Lifeline Removed During Date Range.*[.]csv.*';";
        var load_stmt = snowflake.createStatement( { sqlText: load_cmd } );
        load_stmt.execute();
    }
    catch (err)
    {
        result =  "Failed: Code: " + err.code + "\n  State: " + err.state;
        result += "\n  Message: " + err.message;
        result += "\nStack Trace:\n" + err.stackTraceTxt; 
    }

... и вот строка (заголовок + один) данных из CSV, который не удается загрузить. account, customerstatus, CertifiedDate, Lifelineremovedate, Lifelineremovedreason, telephonenumber1, linestatus, ActivationDate, Disnectdate, имя, фамилия, serviceaddress1, serviceaddress2, servicecity, servicetate, servicezip, Столбец1 123456, Активный, 11/26/2019,11 / DS 201 D Отклонено 90-5 У клиента был свой LifeL, (321) 5551212, Актив, 11/26/2019,, ДЖОН, ДО, 1524 ПРИМЕР ST ,, ФРЕСНО, КА, 93706,

... и, наконец, ошибка, которую я вижу ... enter image description here

Ответы [ 3 ]

1 голос
/ 12 января 2020

Я попытался загрузить образцы данных с вашей спецификацией, и они хорошо работали с WebUI.

Вот так выглядят мои образцы данных

enter image description here

01/09/2020,01/09/2020 23:59,9th Jan
01/10/2020,01/10/2020 22:58,10th Jan
01/11/2020,01/11/2020 21:57,11th Jan
01/12/2020,01/12/2020 20:56,12th Jan

Создайте следующий формат файла и определенные форматы даты / TS

enter image description here

И когда вы загружаете данные из WebUI, все работает отлично.

enter image description here

При правильном формате формат определяет, что тип данных также выглядит идеально.

enter image description here

Если определение формата файла неверно для даты и метки времени, вы получите следующую ошибку

enter image description here

1 голос
/ 11 января 2020

TIMESTAMP_FORMAT - это функция предварительного просмотра, поэтому она может быть не готова к использованию. В качестве обходного пути вы можете использовать шаблон COPY INTO mytable FROM (SELECT FROM ... ) для применения пользовательских преобразований к каждому полю. Или загрузите как текст и конвертируйте после. Наконец, всегда полезно, если вы можете предоставить код и пример данных.

0 голосов
/ 13 января 2020

Проверено определение таблицы, чтобы убедиться, что тип столбца соответствует ожидаемым данным. В моем случае у меня был тип столбца Timezone_LTZ для столбца, который должен был быть ДАТА.

...