Postgresql 在Amazon红移中追加和覆盖
由于红移是基于PostgreSQL的,所以在从S3复制到红移时,它是否有覆盖或追加表中数据的选项 我唯一得到的是使用触发器,但它们不接受任何参数Postgresql 在Amazon红移中追加和覆盖,postgresql,amazon-s3,amazon-redshift,Postgresql,Amazon S3,Amazon Redshift,由于红移是基于PostgreSQL的,所以在从S3复制到红移时,它是否有覆盖或追加表中数据的选项 我唯一得到的是使用触发器,但它们不接受任何参数 如果数据已经在表中,我只需要编写一个脚本,将参数设置为yes/no或类似的参数。红移不允许像其他sql数据库那样创建触发器或事件,我找到的解决方案是运行update sql query,尽管您也可以使用Python或其他语言,并使用crontab任务调度Rscript 使用COPY命令将数据从AmazonS3加载到AmazonRedshift时,数据会
如果数据已经在表中,我只需要编写一个脚本,将参数设置为yes/no或类似的参数。红移不允许像其他sql数据库那样创建触发器或事件,我找到的解决方案是运行update sql query,尽管您也可以使用Python或其他语言,并使用crontab任务调度Rscript 使用COPY命令将数据从AmazonS3加载到AmazonRedshift时,数据会附加到目标表中 红移没有覆盖选项。如果希望用正在加载的数据替换现有数据,可以: 将数据加载到临时表中 删除主表中与传入数据匹配的行,例如: 从主表中删除,其中id位于从临时表中选择id 将行从临时表复制到主表,例如: 选择*从临时表进入主表
请参阅:自2019年5月起,Redshift支持存储过程,因此您可以打包一组查询/语句,如下所示:
CREATE OR REPLACE PROCEDURE public.copy_and_cleanse_data(overwrite bool)
AS $$
BEGIN
if overwrite IS TRUE THEN DELETE FROM myredshifttable;
copy myredshifttable
from 's3://awssampledbuswest2/tickit/category_pipe.txt'
iam_role 'arn:aws:iam::<aws-account-id>:role/<role-name>'
region 'us-west-2';
UPDATE myredshifttable SET myfield = REPLACE(myfield, 'foo', 'bar');
END;
$$ LANGUAGE plpgsql
SECURITY DEFINER;
CALL public.copy_and_cleanse_data()