Считать значение даты и времени из файла CSV в терадат - PullRequest
0 голосов
/ 11 декабря 2019

Я довольно новичок в терадате. Я пытаюсь прочитать CSV-файл, в котором столбец create_date имеет дату и время, пытаюсь импортировать файл в временную таблицу teradata, но не удается. Пожалуйста, помогите мне решить проблему. Я приложил образец сценария, который я разработал, и который отлично работает со значением даты

HandleTmpTable()
{
    bteq <<ENDSQL
        .LOGON $TARGET_DB/$TUSER,$TPWD; 
/* Drop the temporary tables */
        DROP TABLE ${TTMPDB}.test;

/* Create the temporary table test */
        CREATE TABLE ${TTMPDB}.test,
            NO FALLBACK,
            NO BEFORE JOURNAL,
            NO AFTER JOURNAL
        (
        NUMBER  VARCHAR(35) NOT NULL,
        NAME            CHAR(4) NOT NULL,
        PROGRAM             VARCHAR(20),
        CODE            CHAR(4),
        C_NAME          VARCHAR(255),
        CO_NAME     VARCHAR(50),
        CREATE_DATE         date format 'YYYY/MM/DD',
        UPDATE_DATE         date format 'YYYY/MM/DD',
        EXCLUDE_IND         CHAR(1) ,
        NUMBER          VARCHAR(40),
        FLAG            SMALLINT,
        NG_FLAG     SMALLINT    
        );
        .IF ERRORCODE <> 0 THEN .EXIT ERRORCODE;
        .QUIT 0;       
ENDSQL
    if [ $? -ne 0 ] 
    then
        Error "Unable to create the temporary table"
    fi

    Log "Temporary tables created successfully"
}
ImportFiles()
{

   bteq <<ENDSQL
        LOGON $TARGET_DB/$TUSER,$TPWD;
    DROP TABLE ${TTMPDB}.test_err1;
        DROP TABLE ${TTMPDB}.test_err2;
ENDSQL
   fastload <<ENDSQL
        .SESSIONS ${TFLSESS};
        .ERRLIMIT 1;
        .LOGON $TARGET_DB/$TUSER,$TPWD;
        SET RECORD VARTEXT ",";
        DEFINE
        file_NUMBER      (VARCHAR(35)),
                file_NAME                 (VARCHAR(4)),
                file_PROGRAM                         (VARCHAR(20)),
                file_CODE                    (VARCHAR(4)),
                file_C_NAME                    (VARCHAR(255)),
                file_CO_NAME         (VARCHAR(50)),
                file_CREATE_DATE                     (VARCHAR(10)),
                file_UPDATE_DATE                     (VARCHAR(10)),
                file_EXCLUDE_IND                     (VARCHAR(1)),
                file_NUMBER                   (VARCHAR(40)),
                file_FLAG                  (VARCHAR(6)),
                file_NG_FLAG         (VARCHAR(6))

        FILE=test.csv;

        SHOW;

    BEGIN LOADING ${TTMPDB}.test
    ERRORFILES ${TTMPDB}.test_err1, ${TTMPDB}.test_err2
    CHECKPOINT 25000000;
    INSERT INTO ${TTMPDB}.test
        (
        :file_NUMBER,
        :file_NAME,
        :file_PROGRAM,
        :file_CODE,
        :file_C_NAME,
        :file_CO_NAME,
        :file_CREATE_DATE ,
        :file_UPDATE_DATE ,
        :file_EXCLUDE_IND,
        :file_NUMBER,
        :file_FLAG,
        :fileNG_FLAG

          );

    END LOADING;    

ENDSQL
    if [ $? -ne 0 ]
    then
        Error "Unable to Load the temporary table"
    else
    rm -f test.csv
    fi

    Log "Temporary tables loaded successfully"
}

образец данных:

FC-A,FC,Fraud,AA,AAAA,,17JAN2019:00:00:00,17JAN2019:00:00:00,N,,,
FC-B,FC,Fraud,BB,BBBBB,,17JAN2019:00:00:00,17JAN2019:00:00:00,N,,,
FC-C,FC,Fraud,CC,CCCCC,,17JAN2019:00:00:00,17JAN2019:00:00:00,N,,,
FC-D,FC,Fraud,DD,DDDDD,,17JAN2019:00:00:00,17JAN2019:00:00:00,N,,,
FC-E,FC,Fraud,EE,EEEEE,,17JAN2019:00:00:00,17JAN2019:00:00:00,N,,,
FC-F,FC,Fraud,FF,FFFFF,,17JAN2019:00:00:00,17JAN2019:00:00:00,N,,,

Дайте мне знать, как read adn записывает значение datetime для create_date и update_dateстолбец из csv в таблицу teradate

1 Ответ

0 голосов
/ 11 декабря 2019

Используя тот же сценарий, для datetime должны измениться следующие вещи: (1) Тип столбца должен быть timestamp. Отметка времени (0) будет основываться на данных выборки. (2) В быстрой загрузке DEFINE поле должно иметь длину 18. (3) В быстрой загрузке вы можете использовать следующий код:

:file_CREATE_TS(format 'DDMMMYYYY:HH:MI:SS')
...