Как загрузить данные в таблицу Redshift с форматом даты «MMDDYYYY» - PullRequest
0 голосов
/ 18 мая 2018

Мне нужно загрузить данные в формате 'MMDDYYYY'

код текущего пути, который я использую для отправки через psql

SET BaseFolder=C:\


psql -h hostname -d database -c "\copy test_table(id_test, 
colum_test,columndate DATEFORMAT 'MMDDYYYY') 
from '%BaseFolder%\test_table.csv' with delimiter ',' CSV HEADER;"

здесь test_table таблица в базе данных postgres

Id_test: float8

Column_test: float8

columndate: timestamp
id_test colum_test  colum_date

94  0.3306  12312017

16  0.3039  12312017

25  0.5377  12312017

88  0.6461  12312017

Я получаю следующую ошибку при выполнении вышеуказанного запроса в CMD в окнах 10

ОШИБКА: значение поля даты / временивне диапазона: «12312017»

СОВЕТ: Возможно, вам нужен другой параметр «стиль даты».

КОНТЕКСТ: COPY test_table, строка 1, столбец столбца: «12312017»

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

DATEFORMAT применяется ко всей команде COPY, а не к одному полю.

Я получил его работать следующим образом ...

Ваша команда COPY предполагает, чтоданные разделены запятыми , поэтому я использовал эти входные данные и сохранил их в Amazon S3 bucket :

id_test colum_test,colum_date
94,0.3306,12312017
16,0.3039,12312017
25,0.5377,12312017
88,0.6461,12312017

Я создал таблицу:

CREATE TABLE foo (
    foo_id BIGINT,
    foo_value DECIMAL(4,4),
    foo_date DATE
    )

Затем загрузили данные:

COPY foo (foo_id, foo_value, foo_date)
FROM 's3://my-bucket/foo.csv'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Role'
CSV
IGNOREHEADER 1
DATEFORMAT 'MMDDYYYY'

Обратите внимание, что рекомендуемый способ загрузки данных в Amazon Redshift - из файлов, хранящихся в Amazon S3 .(Я не пробовал использовать собственную команду psql copy с Redshift, и рекомендовал бы против нее - особенно для больших файлов данных. Вы, конечно, не можете смешивать команды из команды Redshift COPY с командой psql Copy.)

Затем я запустил SELECT * FROM foo и он вернулся:

16  0.3039  2017-12-31
88  0.6461  2017-12-31
94  0.3306  2017-12-31
25  0.5377  2017-12-31
0 голосов
/ 18 мая 2018

Это ужасный формат для дат.Не прерывайте ваш тип даты, не конвертируйте ваши данные в более разумный формат.

=> select to_date('12312017', 'MMDDYYYY');
  to_date
------------
 2017-12-31
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...