从补丁 198 开始,Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息,请参阅博客文章
使用 TEMPLATE 进行 COPY
您可以将 Redshift 模板与 COPY 命令结合使用,以简化命令语法并确保数据加载操作间的一致性。无需重复指定相同的格式化参数,而是在模板中定义它们一次,然后在 COPY 命令中引用模板。使用模板时,COPY 命令会将模板中的参数与在命令中直接指定的任何参数相结合。如果同一个参数同时出现在模板和命令中,则命令参数优先。有关更多信息,请参阅 CREATE TEMPLATE。
可以使用以下各项创建 COPY 命令的模板:
有关支持的参数的完整列表,请参阅 COPY 命令。
所需的权限
要在 COPY 命令中使用模板,您必须拥有:
-
执行 COPY 命令所需的所有权限(请参阅所需的权限)
-
以下模板权限之一:
-
超级用户权限
-
对模板拥有 USAGE 权限,并对包含模板的架构拥有 USAGE 权限
-
语法
COPY target_table FROM 's3://...' authorization [ option, ...] USING TEMPLATE [database_name.][schema_name.]template_name;
参数
- database_name
-
(可选)模板所在数据库的名称。如果未指定,则使用当前数据库。
- schema_name
-
(可选)模板所在架构的名称。如果未指定,则在当前搜索路径中搜索模板。
- template_name
-
COPY 中要使用的模板的名称。
使用说明
仍必须在 COPY 命令中指定特定于命令的参数(源、目标、授权)。
模板不能包含 COPY 命令的清单文件规范。
示例
以下示例演示如何创建模板并在 COPY 命令中使用它:
CREATE TEMPLATE public.test_template FOR COPY AS CSV DELIMITER '|' IGNOREHEADER 1 MAXERROR 100; COPY public.target_table FROM 's3://amzn-s3-demo-bucket/staging-folder' IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName' USING TEMPLATE public.test_template;
当某个参数同时存在于模板和命令中时,命令参数优先。在此示例中,如果模板 public.test_template 包含 DELIMITER '|',但 COPY 命令指定 DELIMITER ',',则将使用命令中的逗号分隔符 (,),而不是模板中的管道分隔符 (|)。
COPY public.target_table FROM 's3://amzn-s3-demo-bucket/staging-folder' IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName' DELIMITER ',' USING TEMPLATE public.test_template;