

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# CREATE TEMPLATE
<a name="r_CREATE_TEMPLATE"></a>

为 Amazon Redshift 命令（例如 [COPY](r_COPY.md)）创建可重用的模板。模板存储可在多个命令执行中引用的常用参数，从而提高一致性并减少手动参数规范。

模板消除了在多个操作中重复指定相同格式化参数的需要，而源路径、目标表和授权可能因操作而异。

## 所需的权限
<a name="r_CREATE_TEMPLATE-privileges"></a>

要创建模板，您必须拥有以下其中一项：
+ 超级用户权限
+ 对要在其中创建模板的架构拥有 CREATE 权限，或者对要在其中创建模板的数据库中的架构拥有 CREATE 限定范围权限

## 语法
<a name="r_CREATE_TEMPLATE-synopsis"></a>

```
CREATE [ OR REPLACE ] TEMPLATE [database_name.][schema_name.]template_name
FOR COPY [ AS ]
[ [ FORMAT ] [ AS ] data_format ]
[ parameter [ argument ] [ , ... ] ];
```

## 参数
<a name="r_CREATE_TEMPLATE-parameters"></a>

 *OR REPLACE*   
如果指定的数据库和架构中已存在同名的模板，则将替换现有模板。您只能将模板替换为定义相同操作类型的新模板，例如 COPY。您必须具有替换模板所需的权限。

*database\$1name*  
（可选）将在其中创建模板的数据库的名称。如果未指定，则在当前数据库中创建模板。  
如果数据库或架构不存在，则不会创建模板，并且语句将返回错误。您无法在系统数据库 `template0`、`template1`、`padb_harvest` 或 `sys:internal` 中创建模板。

*schema\$1name*  
（可选）将在其中创建模板的架构的名称。如果未指定，则在当前架构中创建模板。  
如果提供了架构名称，则在该架构中创建新模板（假定创建者有权访问架构）。模板名称必须是该架构中的唯一名称。

*template\$1name*  
要创建的模板的名称。（可选）可以使用数据库名称和架构名称来限定模板名称。在下面的示例中，`demo_database` 是数据库名称，`demo_schema` 是架构名称，而 `test` 是模板名称。有关有效名称的更多信息，请参阅[名称和标识符](r_names.md)。  

```
CREATE TEMPLATE demo_database.demo_schema.test FOR COPY AS CSV;
```

COPY  
指定为其创建模板的 Redshift 命令类型。目前仅支持 COPY 命令。

[ [ FORMAT ] [ AS ] *data\$1format* ]   
此参数为可选参数。这指定了 COPY 操作的数据格式。

[ *parameter* [ argument ]]  
指定的 redshift 命令的任何有效参数。  
例如，COPY 命令的模板可能包括：  
+ [数据格式参数](copy-parameters-data-format.md)
+ [文件压缩参数](copy-parameters-file-compression.md)
+ [数据转换参数](copy-parameters-data-conversion.md)
+ [数据加载操作](copy-parameters-data-load.md)
有关支持的参数的完整列表，请参阅 [COPY](r_COPY.md) 命令。

### 使用说明
<a name="create_template-usage-notes"></a>
+ 默认情况下，所有用户都对 PUBLIC schema 具有 CREATE 和 USAGE 权限。要禁止用户在数据库的 PUBLIC schema 中创建对象，请使用 REVOKE 命令删除该权限。
+ 当某个参数同时存在于模板和命令中时，命令参数优先。
+ 模板是数据库对象，并遵循标准的 Redshift 对象命名和权限规则。有关有效名称的更多信息，请参阅[名称和标识符](r_names.md)。
+ 模板不能包含 [COPY](r_COPY.md) 命令的清单文件规范。

### 限制
<a name="create_template-limitations"></a>
+ 创建模板时，必须指定至少一个参数。
+ 排除的参数：模板中不能包含特定于命令的参数，例如源路径、目标表、授权凭证和清单文件规范。这些参数必须在实际命令中指定。
+ 每个集群的最大模板数量：每个集群最多可以创建 1000 个模板。此限制适用于集群中所有数据库和架构的模板总数。
+ 跨数据库引用：不能跨数据库引用模板。
+ 数据共享：模板不能包含在数据共享中。必须在需要模板的每个集群中单独创建模板。

## 示例
<a name="r_CREATE_TEMPLATE-examples"></a>

以下示例为 COPY 命令创建一个模板 

```
CREATE TEMPLATE test_schema.demo_template
FOR COPY
AS
FORMAT JSON 'auto'
NULL AS ''
MAXERROR 100;
```

使用 [SHOW TEMPLATE](r_SHOW_TEMPLATE.md) 获取模板的定义：

```
SHOW TEMPLATE test_schema.demo_template;
CREATE OR REPLACE TEMPLATE dev.test_schema.demo_template FOR COPY AS FORMAT AS JSON 'auto' NULL '' MAXERROR 100;
```

 查询 [SYS\$1REDSHIFT\$1TEMPLATE](SYS_REDSHIFT_TEMPLATE.md) 系统视图以获取有关模板的更多详细信息。

```
SELECT * FROM SYS_REDSHIFT_TEMPLATE;

database_name | schema_name | template_name | template_type |        create_time         |     last_modified_time     | owner_id | last_modified_by | template_parameters 
---------------+-------------+---------------+---------------+----------------------------+----------------------------+----------+------------------+---------------------
 dev           | test_schema | demo_template |             1 | 2025-12-17 20:06:01.944171 | 2025-12-17 20:06:01.944171 |        1 |                1 | {
    "JSON": "auto",
    "MAXERROR": 100,
    "NULL": ""
}
```