【问题标题】:Redshift copy from S3 inside stored procedure存储过程中来自 S3 的 Redshift 副本
【发布时间】:2022-07-21 00:50:30
【问题描述】:

我想使用 Lambda 准备一个清单文件,然后执行提供输入参数 manifest_location 的存储过程。

存储过程签名:

CREATE OR REPLACE PROCEDURE stage.sp_stage_user_activity_page_events(manifest_location varchar(256))

我想使用这个参数如下:

COPY stage.user_activity_event 
FROM manifest_location
IAM_ROLE 'arn:aws:iam::XXX:role/redshift-s3-read-only-role'
IGNOREHEADER 1
REMOVEQUOTES
DELIMITER ','
LZOP
MANIFEST;

但是 Redshift 给了我错误:

“$1”或附近的语法错误其中:PL/PgSQL 函数“sp_stage_user_activity_page_events”中第 21 行附近的 SQL 语句

我怎样才能做到这一点?

【问题讨论】:

  • 我也面临同样的问题@datahack 你找到解决方案了吗?

标签: amazon-web-services stored-procedures amazon-redshift


【解决方案1】:

你能试试上面的命令吗?

EXECUTE 'COPY '|| parameter_for_table ||' FROM '||CHR(39)|| parameter_for_s3_path ||CHR(39)||' IAM_ROLE '||CHR(39)|| parameter_for_iam_role ||CHR(39)||' FORMAT AS PARQUET;';

如果您还有任何问题,请告诉我,因为我今天创建了一个存储过程,如上:

CREATE TABLE table_for_error_log (message varchar);
CREATE OR REPLACE procedure sp_proc_name(parameter_for_table in VARCHAR, parameter_for_s3_path in VARCHAR, parameter_for_iam_role in VARCHAR)
AS
$$
BEGIN
    EXECUTE 'COPY '|| parameter_for_table ||' FROM '||CHR(39)|| parameter_for_s3_path ||CHR(39)||' IAM_ROLE '||CHR(39)|| parameter_for_iam_role ||CHR(39)||' FORMAT AS PARQUET;';
EXCEPTION WHEN OTHERS THEN
    RAISE INFO 'An exception occurred.';
    INSERT INTO table_for_error_log VALUES ('Error message: ' || SQLERRM);
END;
$$ LANGUAGE plpgsql;

它已经过测试和工作。

如果你自己的命令,只需替换。

【讨论】:

    猜你喜欢
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2014-10-20
    • 2016-12-14
    相关资源
    最近更新 更多