当特定字段存在某些值时,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
EXPERTE
gefragt vor 5 Monaten7 Aufrufe
1 Antwort
0

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

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

谢谢。

profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen