Неверный формат метки времени в команде Redshift COPY - PullRequest
0 голосов
/ 03 ноября 2019

Я попробовал почти все решения от SO, но все еще та же проблема. У меня есть файл CSV на S3 и таблица в Redshift.

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

like_id => inetger
p_id => integer
c_id => integer
date_added => timestamp (without time zone)

Файл CSV содержит данные в виде:

1|1234|9876|2012-08-12 03:30:00
...
...
1500|4545|87545|2019-01-15 08:10:00

Когдая запускаю команду COPY Comnad в RedShift, она выдает ошибку Invalid timestamp format or value [YYYY-MM-DD HH:MI:SS], я пробовал почти все форматы даты в RedShift, но все еще застрял. Ниже приведена команда COPY:

copy likes from 's3://<myBucketPath>/like.csv'
credentials 'aws_iam_role=<IAM-Role-Here>'
delimiter '|' region 'us-west-2'
timeformat 'YYYY-MM-DD HH:MI:SS';
//timeformat 'MM/DD/YYYY HH:MI:SS'
//dateformat as 'auto'
//timeformat as 'auto'

ПРИМЕЧАНИЕ. Я экспортировал свою таблицу из MySQL в формате CSV, а тип данных столбца date_added - datetime

1 Ответ

1 голос
/ 04 ноября 2019

Чтобы воспроизвести вашу ситуацию, я сделал следующее:

  • Создал файл CSV, содержащий:
1|1234|9876|2012-08-12 03:30:00
1500|4545|87545|2019-01-15 08:10:00
  • Запустил кластер Amazon Redshift и создалтаблица:
CREATE TABLE foo (like_id INT, p_id INT, c_id INT, date_added TIMESTAMP WITHOUT TIME ZONE)
  • Загружает данные из Amazon S3 в Redshift с помощью:
COPY foo
FROM 's3://my-bucket/bar/'
IAM_ROLE 'arn:aws:iam::111111111111:role/my-role'
  • Выбирает данные:
SELECT * FROM foo

В результате получилось:

1     1234   9876  2012-08-12 03:30:00
1500  4545  87545  2019-01-15 08:10:00

Итак, похоже, что он загружен по умолчанию без каких-либо особых настроек.

Я знаю, что это TIMESTAMP WITHOUT TIMEZONE, потому что я могу сделать это:

SELECT date_added + INTERVAL '15 minutes' FROM foo

2012-08-12 03:45:00
2019-01-15 08:25:00
...