Postgresql Amazon红移如何从s3复制并设置作业id

Postgresql Amazon红移如何从s3复制并设置作业id,postgresql,amazon-web-services,amazon-redshift,Postgresql,Amazon Web Services,Amazon Redshift,amazonredshift提供了使用“Copy”命令从s3对象加载表数据的能力。是使用copy命令的一种方式,但也为每个插入行设置额外的“col=CONSTANT” 我想在每一个复制的行上设置一个job_id(不在源数据中),我认为如果不得不执行几百万次插入,这样每一行都有一个job属性,那么当“copy”以更好的性能让我达到99%的效果时,那将是一种耻辱 也许有一个更聪明的解决方案?如果您希望在单个复制命令中添加的所有行都具有相同的作业id值,那么您可以将数据复制到临时表中,然后将作业id列

amazonredshift提供了使用“Copy”命令从s3对象加载表数据的能力。是使用copy命令的一种方式,但也为每个插入行设置额外的“col=CONSTANT”

我想在每一个复制的行上设置一个job_id(不在源数据中),我认为如果不得不执行几百万次插入,这样每一行都有一个job属性,那么当“copy”以更好的性能让我达到99%的效果时,那将是一种耻辱


也许有一个更聪明的解决方案?

如果您希望在单个复制命令中添加的所有行都具有相同的作业id值,那么您可以将数据复制到临时表中,然后将作业id列添加到该表中,然后将临时表中的所有数据插入到最终表中,如:

创建表目的地\u暂存(类似目的地);
更改表目的地\u临时删除列作业\u id;
从“s3://data/destination/(…)”(…)复制目标_暂存
ALTER TABLE DETINATION_staging ADD COLUN job_id INT DEFAULT 42;
按sortkey_列从目的地_暂存顺序插入目的地SELECT*;
删除表目的地(u staging);;
分析表目的地;
真空终点;

不需要进行分析和抽真空,但强烈建议您更新查询分析器并将所有新数据放入正确位置。

似乎无法使用
COPY
命令本身进行后期/预处理。因此,您最好的选择似乎是对要
复制到红移中的文件进行预处理,添加作业ID,然后将其加载到红移中。

如果您试图同时加载多个作业,这将导致不一致的行为,这是必要的。我想我们可以使用“destination_staging_${jobId}”作为表,这样可以保持事情的正常进行。@gbegley,这是正确的。您必须为每个作业id创建单独的暂存表。