当特定字段存在某些值时,COPY命令会忽略默认值。

0

【以下的问题经过翻译处理】 我正在尝试从S3桶中的.csv文件加载Redshift表格。创建表格时,有三列设置了默认值。

,"current_row_ind" CHAR(1) DEFAULT 'Y'

,"EFFECTIVE_DATE" DATE DEFAULT TO_DATE(CURRENT_DATE, 'YYYY-MM-DD')

,"EXPIRATION_DATE" DATE DEFAULT TO_DATE('9999-12-31', 'YYYY-MM-DD')

我的文件中有些行的这些字段有值,有些没有。当我使用COPY命令加载表格时,Redshift似乎会忽略那些没有填充值的字段的默认值。如果我在列表中不指定这些字段,但在文件中留下它们,我会得到“Extra column(s) found”错误。如果我在列表中指定这些字段,则文件中没有值的这些字段将使用NULL值而不是默认值进行添加。如果我在COPY列表中删除这些字段并从文件中将它们删除,则它们将使用默认值进行加载。显然,这不会奏效,因为一些字段具有合法值。我在以下列出了我使用COPY命令的参数:

FORMAT AS CSV DELIMITER ','

QUOTE '"'

ACCEPTINVCHARS '?'

TIMEFORMAT 'auto'

IGNOREHEADER 1

ACCEPTANYDATE

BLANKSASNULL

DATEFORMAT 'auto'

EMPTYASNULL

EXPLICIT_IDS

FILLRECORD

IGNOREBLANKLINES

TRIMBLANKS

REGION AS 'us-west-2'

我的问题是,如何使用COPY命令加载这个表格并在文件中找到这些字段的值,但当没有值时使用默认值?我在re:Post和StackOverflow等其他论坛以及这里进行了研究,但没有找到解决这个特定场景的方法。非常感谢您的帮助。

profile picture
专家
已提问 5 个月前4 查看次数
1 回答
0

【以下的回答经过翻译处理】 您好,PurpleHaze,

通常情况下,对于给定列的默认表达式评估适用于所有加载的行。如果您在COPY列清单中未指定这些字段,则文件中的所有行都不应具有这些字段的值,以便DEFAULT选项起作用,否则命令将失败并提示“Extra column(s) found”。目前,在上述情况下,将数据复制到一个临时表中,然后在复制/移动数据到目标表时将默认值应用于NULL是一种选项。

谢谢。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则