Недопустимая метка времени при вставке в тераданные с помощью BTEQ

Итак, я хочу вставить что-то в таблицу, созданную ранее с помощью bteq. Я уже гуглил об этом (например, здесь), однако я уже использовал столбец и чтобы не стерли ошибку.

Заявление о создании выглядит так:

.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

И заявление о вставке выглядит следующим образом:

.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

Выполняя оператор вставки, я получаю сообщение об ошибке:

*** Ошибка 6760 Недопустимая метка времени. Заявление № 1, информация = 0

Вот несколько примеров для 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|

Вы знаете, что не так с отметкой времени?


person Mimi Müller    schedule 18.09.2018    source источник
comment
SKIP=1 пропускает первую строку, содержащую информацию заголовка. Затем ваши входные данные начинаются с целого числа, которое отображается на sepal_legnth в вашем операторе USING. Это означает, что значения 0.0 в ваших входных данных передаются CAST в TIMESTAMP, возможно, именно это и вызывает ошибку.   -  person Rob Paller    schedule 19.09.2018
comment
@RobPaller Я этого не понимаю. Я привожу первое входящее значение как FLOAT, а не как Timestamp. Отметка времени определяется только позже?   -  person Mimi Müller    schedule 19.09.2018


Ответы (1)


Мими, количество и порядок столбцов в вашем скрипте bteq и файле данных не совпадают. Проверьте приведенный ниже образец на наличие столбцов, указанных в скрипте, и количество столбцов в файле.

"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->

Вы можете решить свою проблему, добавив еще 1 столбец перед столбцом метки времени в вашей таблице и скриптом bteq, как показано ниже, где я добавил «TARGET1» перед столбцом метки времени.

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));
person Pradeep Khatri    schedule 19.09.2018