如何使用日期格式将数据上传到Redshift表中' MMDDYYYY'

时间:2018-05-18 10:44:33

标签: date amazon-redshift psql

我需要以“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 DB中的表

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

当我在Windows 10中的CMD中运行上述查询时,我收到以下错误

  

错误:日期/时间字段值超出范围:" 12312017"

     

提示:也许你需要一个不同的" datestyle"设置。

     

上下文:COPY test_table,第1行,列columndate:" 12312017"

2 个答案:

答案 0 :(得分:0)

这是日期的可怕格式。不要{3}}您的日期类型,break您的数据为更合理的格式。

=> select to_date('12312017', 'MMDDYYYY');
  to_date
------------
 2017-12-31

答案 1 :(得分:0)

DATEFORMAT适用于整个COPY命令,而不是单个字段。

我按照以下方式开始工作......

您的COPY命令表明数据是逗号分隔,因此我使用此输入数据并将其存储在 Amazon S3存储桶中:

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中的文件。 (我还没有尝试使用Redshift的本地psql复制命令,并建议不要使用它 - 特别是对于大型数据文件。你当然不能将Redshift COPY命令中的命令混合到psql中复制命令。)

然后,我跑了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