0

У меня настроен конвейер данных AWS, чтобы импортировать некоторые данные из CSV-журнала из S3 в кластер Redshift.Данные журнала данных AWS Data Transfer от S3 до Redshift

Моя таблица базы данных Redshift имеет следующую структуру:

CREATE TABLE access_log 
(
    id bigint identity(1, 1), 
    host character varying(64), 
    cf_host character varying(64), 
    xff_host character varying(64), 
    event_time timestamp, 
    method character varying(16), 
    url text, 
    response_code integer, 
    referer text, 
    user_agent text, 
    device_id character varying(40), 
    primary key(id) 
) 
sortkey(id); 

Вот выдержка из моего журнала данных CSV:

"172.20.2.224", "нуль", "нулевой", "2016 «0», «0», «0», «0», «0», «0», 16 00:01:33 "," GET ","/"," 200 "," null "," null " " 172.20.2.224 "," null "," null "," 2016-03-16 00: 11:28 "," GET ","/"," 302 "," null "," null " " 172.20.2.224 "," null "," null "," 2016-03-16 00:11:33 "," GET ","/"," 200 "," null "," null " «172.20.2.224», «null», «null», «2016-03-16 00:21:28», «GET», «/», «302», «null», «null» «172.20 .2.224 "," null "," null "," 2016-03-16 00:21:33 "," GET ","/"," 200 "," null "," null "

От SQLWorkbenchJ если я использую следующую копию команды все работает отлично:

copy access_log 
from 's3://mylogrepo' 
credentials 
'aws_access_key_id=myaccesskey;aws_secret_access_key=myaccesskeysecret' 
DELIMITER ',' 
REMOVEQUOTES 
TIMEFORMAT 'YYYY-MM-DD HH:MI:SS' 

Но когда Redshift копировать деятельность бежит, я получаю следующее сообщение об ошибке:

[Amazon](500310) Invalid operation: cannot set an identity column to a value; 

Что я нахожу интересным является эта строка из трассировки стека ошибок:

private.com.amazonaws.services.datapipeline.redshift.QueryStatementException: Exception Amazon Invalid operation: cannot set an identity column to a value; while executing START TRANSACTION; INSERT INTO public.access_log SELECT s.* FROM staging s LEFT JOIN public.access_log t ON s."id" = t."id" WHERE t."id" IS NULL; COMMIT; at private.com.amazonaws.services.datapipeline.redshift.RedshiftQueryStatement.(RedshiftQueryStatement.java:43) at private.com.amazonaws.services.datapipeline.redshift.RedshiftQueryStatementFactory.newQueryStatement(RedshiftQueryStatementFactory.java:9) at ... private.com.amazonaws.services.datapipeline.redshift.SqlHelper.prepareStatement(SqlHelper.java:84) at $TaskRunner.run(HeartbeatingTaskRunner.java:34) ... 1 more Caused by: java.sql.SQLException: Amazon Invalid operation: cannot set an identity column to a value; at com.amazon.redshift.client.messages.inbound.ErrorResponse.toErrorException(Unknown Source)

Возможно ли, что IP из моих данных CSV будет интерпретироваться как идентификатор столбца?

Спасибо!

ответ

0

Я подозреваю, что у вас неверное сопоставление столбцов s3. Можете ли вы поделиться своим сопоставлением столбцов?

+1

Я забыл экспортировать информацию device_id в мои данные CSV. Таким образом, команда копирования попыталась отобразить 9 столбцов из CSV-данных в 10 столбцов. После того, как я добавил данные device_id в мои данные CSV, похоже, работает. Спасибо! –