dat*_*ack 6 stored-procedures amazon-web-services amazon-redshift
我想使用Lambda准备一个清单文件,然后执行提供输入参数manifest_location的存储过程。
存储过程签名:
CREATE OR REPLACE PROCEDURE stage.sp_stage_user_activity_page_events(manifest_location varchar(256))
Run Code Online (Sandbox Code Playgroud)
我想按如下方式使用此参数:
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;
Run Code Online (Sandbox Code Playgroud)
但 Redshift 给了我错误:
“$1”处或附近存在语法错误 其中:第 21 行附近 PL/PgSQL 函数“sp_stage_user_activity_page_events”中的 SQL 语句
我怎样才能实现这个目标?
小智 3
你能尝试一下下面的命令吗?
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;';
Run Code Online (Sandbox Code Playgroud)
如果您还有其他问题,请告诉我,因为我今天创建了一个存储过程,如下所示:
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;
Run Code Online (Sandbox Code Playgroud)
它已经经过测试并且有效。
只需将其替换为您自己的命令即可。
| 归档时间: |
|
| 查看次数: |
1182 次 |
| 最近记录: |