Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 在Amazon红移中追加和覆盖_Postgresql_Amazon S3_Amazon Redshift - Fatal编程技术网

Postgresql 在Amazon红移中追加和覆盖

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时,数据会

由于红移是基于PostgreSQL的,所以在从S3复制到红移时,它是否有覆盖或追加表中数据的选项

我唯一得到的是使用触发器,但它们不接受任何参数


如果数据已经在表中,我只需要编写一个脚本,将参数设置为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()