首页 > 解决方案 > Redshift:COPY 命令针对具有 DEFAULT 值的 NOT NULL 列

问题描述

我的 redShift 数据库中有一个场景,其中我的表有 NOT NULL 日期列,默认为 SYSDATE。我正在尝试通过 COPY 命令加载数据,而 csv 文件中没有日期列。但是,当我加载时,COPY 命令会抛出一个错误。请让我知道我们是否还有其他选择来解决此问题。

标签: copycommandamazon-redshift

解决方案


由于您没有提供您得到的确切错误,我将尝试通过简单的用例引导您。然后,我认为您可以尝试复制它。

如果您只是跳过命令中的列default应该copy可以解决您的问题,还有一件事,如果您Copy通过代码(java/python等)进行操作,请确保您是committing事务。

使用以下步骤制作一个简单的工作程序。

create table sales(
salesid integer not null,
category varchar(10),
update_at timestamp DEFAULT SYSDATE);

创建一个Test.csv包含以下内容的文件。

1,Cat1
2,Cat2
3,Cat3
4,Cat1
5,Cat1
6,Cat3
7,Cat1
10,Cat1

运行以下命令。

Copy sales(salesid,category) from 's3://***/Test.csv' credentials'aws_access_key_id=*******;aws_secret_access_key=********' delimiter ',';

输出:复制 sales(salesid,category) from 's3:// //Test.csv' credentials'aws_access_key_id= *****;aws_secret_access_key=****' delimiter ','; 信息:加载到表 'sales' 已完成,成功加载 8 条记录。复制;

$Select * from Sales;

 salesid | category |         update_at
---------+----------+----------------------------
       4 | Cat1     | 2018-08-14 05:56:33.644541
      10 | Cat1     | 2018-08-14 05:56:33.644541
       2 | Cat2     | 2018-08-14 05:56:33.644541
       6 | Cat3     | 2018-08-14 05:56:33.644541
       3 | Cat3     | 2018-08-14 05:56:33.644541
       7 | Cat1     | 2018-08-14 05:56:33.644541
       1 | Cat1     | 2018-08-14 05:56:33.644541
       5 | Cat1     | 2018-08-14 05:56:33.644541
(8 rows)

推荐阅读