Amazon redshift 将CSV加载到红移,注入其他信息

Amazon redshift 将CSV加载到红移,注入其他信息,amazon-redshift,Amazon Redshift,我有一些导出的_data.csv,我有一些相应的红移表,我有一个副本: 我要做的是向表中添加一个列源_文件,并用COPY语句或其他一组语句中定义的任意信息填充它;在本例中,行来自的文件名 我无法使用更新,因为我与之交互的数据量太长 看起来我不能只使用默认值,因为当源文件的名称不同时,我需要能够更改信息,但红移不允许更改列的默认值。否则,我只需更改列的默认值,进行复制,更改默认值,从下一个CSV文件进行复制 我正在探索暂存表,但我想在这里问一下,当我探索时,是否有人有现成的答案。我建议也使用暂存表

我有一些导出的_data.csv,我有一些相应的红移表,我有一个副本:

我要做的是向表中添加一个列源_文件,并用COPY语句或其他一组语句中定义的任意信息填充它;在本例中,行来自的文件名

我无法使用更新,因为我与之交互的数据量太长

看起来我不能只使用默认值,因为当源文件的名称不同时,我需要能够更改信息,但红移不允许更改列的默认值。否则,我只需更改列的默认值,进行复制,更改默认值,从下一个CSV文件进行复制


我正在探索暂存表,但我想在这里问一下,当我探索时,是否有人有现成的答案。

我建议也使用暂存表


红移不允许在copy语句中添加列。因此,您需要将csv文件原样复制到暂存表中,然后从那里插入到带有附加列的最终表中。

这是不可能的。但我可以建议你两种变通方法

预处理:在将数据推入红移之前,您必须添加包含数据的额外列,这对于您的业务案例来说似乎是一个困难的解决方案。 后期处理:登台表是实现这一点的最佳方法。将数据推入红移暂存表-处理数据-然后推入红移最终表。注意-在红移上运行更新会随着数据的增长而变得昂贵,请尽量避免,否则会导致大量使用红移处理资源的清空。 如果希望在单个复制命令中添加的所有行具有相同的源文件值,则可以将数据复制到暂存表中,然后将源文件列添加到该表中,然后将暂存表中的所有数据插入到最终表中,如下所示:


如果我做了一个错误的假设,请评论,我将重新关注我的答案。

我建议也使用分期表。红移不允许在copy语句中添加列。因此,您需要将csv文件原样复制到一个暂存表中,然后从那里插入到最后一个带有附加列的表中。@JonEkiz-您是对的。您应该将此作为答案发布。谢谢!两个问题:a你能提供一些示例代码吗?b你知道这种方法比更新更有效吗。。。哪里
COPY(
  c1,
  c2,
  c3,
  ...
) from "s3://bucket/exported_data.csv"
CREATE TABLE destination_staging (LIKE destination);
ALTER TABLE destination_staging DROP COLUMN source_file ;
COPY destination_staging FROM 's3://data/destination/(...)' (...)
ALTER TABLE destination_staging ADD COLUM source_file VARCHAR(99);
INSERT INTO destination SELECT * FROM destination_staging;
DROP TABLE destination_staging;