Search code examples
sqlteradatasql-insertcreate-table

Invalid Timestamp when inserting to teradata with BTEQ


So I want to insert something into a table which was created before with bteq. I already googled for this (e.g. here) however I already cast on the column and that did not erase the error.

The creation statement looks like this:

.logmech LDAP
.logon databae/user_id,pwd
.set width 256
.set retcancel on database libname;
DATABASE libname;
create MULTISET table libname.IRIS( "SEPAL_LENGTH" FLOAT,  "SEPAL_WIDTH" FLOAT,  "PETAL_LENGTH" FLOAT,  "PETAL_WIDTH" FLOAT,  "TARGET" FLOAT,  "TIMESTAMP1" TIMESTAMP(6) FORMAT 'YYYY-MM-DDBHH:MI:SS.S(6)' DEFAULT NULL ,  "NULL_VALUES" FLOAT) UNIQUE PRIMARY INDEX("TimeStamp1");
.QUIT
.LOGOFF
.EXIT

And the insertion Statement looks like the following:

.logmech LDAP
.logon databae/user_id,pwd
.set width 256
.set retcancel on database libname;
DATABASE libname;
.IMPORT VARTEXT FILE =/path_to_file/data.csv, skip=1;
.REPEAT *
USING "SEPAL_LENGTH" (varchar(2000)),  "SEPAL_WIDTH" (varchar(2000)),  "PETAL_LENGTH" (varchar(2000)),  "PETAL_WIDTH" (varchar(2000)),  "TARGET" (varchar(2000)),  "TIMESTAMP1" (varchar(2000)),  "NULL_VALUES" (varchar(2000)) 
INSERT INTO IRIS_delete VALUES(cast( :"SEPAL_LENGTH"  as FLOAT), cast( :"SEPAL_WIDTH"  as FLOAT), cast( :"PETAL_LENGTH"  as FLOAT), cast( :"PETAL_WIDTH"  as FLOAT), cast( :"TARGET"  as FLOAT), cast( :"TIMESTAMP1"  as TIMESTAMP(6) FORMAT 'YYYY-MM-DDBHH:MI:SS.S(6)'), cast( :"NULL_VALUES"  as FLOAT));
.QUIT
.LOGOFF
.EXIT

By executing the insert statement I get the error:

*** Failure 6760 Invalid timestamp. Statement# 1, Info =0

Here are some examples for the csv:

|sepal_length|sepal_width|petal_length|petal_width|target|TimeStamp1|Null_values 0|5.1|3.5|1.4|0.2|0.0|2018-09-18 13:26:30.583216|

1|4.9|3.0|1.4|0.2|0.0|2018-09-18 13:26:30.583216|

2|4.7|3.2|1.3|0.2|0.0|2018-09-18 13:26:30.583216|

3|4.6|3.1|1.5|0.2|0.0|2018-09-18 13:26:30.583216|

4|5.0|3.6|1.4|0.2|0.0|2018-09-18 13:26:30.583216|

5|5.4|3.9|1.7|0.4|0.0|2018-09-18 13:26:30.583216|

6|4.6|3.4|1.4|0.3|0.0|2018-09-18 13:26:30.583216|

7|5.0|3.4|1.5|0.2|0.0|2018-09-18 13:26:30.583216|

8|4.4|2.9|1.4|0.2|0.0|2018-09-18 13:26:30.583216|

9|4.9|3.1|1.5|0.1|0.0|2018-09-18 13:26:30.583216|

Do you know what is wrong with the timestamp?


Solution

  • Mimi, the number and order of column in your bteq script and data file are not matching Check below sample for columns specified in script and number of column in file

    "SEPAL_LENGTH" (1),  "SEPAL_WIDTH"(2),  "PETAL_LENGTH"(3),  "PETAL_WIDTH"(4),  "TARGET"(5),  "TIMESTAMP1"(6),  "NULL_VALUES"(7)
    
    col1->0|  col2->5.1|  col3->3.5|  col4->1.4|  col5->0.2|  col6->0.0|  col7->2018-09-18 13:26:30.583216|  col8->
    

    You can resolve your issue by adding 1 more column before the timestamp column in your table and bteq script like below where I added "TARGET1" before timestamp column

    USING "SEPAL_LENGTH" (varchar(2000)),  "SEPAL_WIDTH" (varchar(2000)),  "PETAL_LENGTH" (varchar(2000)),  "PETAL_WIDTH" (varchar(2000)),  "TARGET" (varchar(2000)),  "TARGET1" (varchar(2000)),  "TIMESTAMP1" (varchar(2000)),  "NULL_VALUES" (varchar(2000)) 
    INSERT INTO IRIS_delete VALUES(cast( :"SEPAL_LENGTH"  as FLOAT), cast( :"SEPAL_WIDTH"  as FLOAT), cast( :"PETAL_LENGTH"  as FLOAT), cast( :"PETAL_WIDTH"  as FLOAT), cast( :"TARGET"  as FLOAT), cast( :"TARGET1"  as FLOAT), cast( :"TIMESTAMP1"  as TIMESTAMP(6) FORMAT 'YYYY-MM-DDBHH:MI:SS.S(6)'), cast( :"NULL_VALUES"  as FLOAT));