

 从补丁 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 LIBRARY
<a name="r_CREATE_LIBRARY"></a>

安装一个 Python 库，在使用 [CREATE FUNCTION](r_CREATE_FUNCTION.md) 命令创建用户定义的函数 (UDF) 时，用户可使用该库进行整合。用户安装的库的总大小不能超过 100MB。

CREATE LIBRARY 无法在事务块 (BEGIN … END) 内运行。有关事务的更多信息，请参阅 [Amazon Redshift 中的隔离级别](c_serial_isolation.md)。

Amazon Redshift 支持 Python 2.7 版本。有关更多信息，请参阅 [www.python.org](https://www.python.org/)。

有关更多信息，请参阅 [示例：导入自定义 Python 库模块](udf-importing-custom-python-library-modules.md)。

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

以下是 CREATE LIBRARY 所需的权限：
+ Superuser
+ 具有 CREATE LIBRARY 权限或具有指定语言权限的用户

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

```
CREATE [ OR REPLACE ] LIBRARY library_name LANGUAGE plpythonu
FROM
{ 'https://file_url'
| 's3://bucketname/file_name'
authorization
  [ REGION [AS] 'aws_region']
  IAM_ROLE { default | ‘arn:aws:iam::<Amazon Web Services 账户-id>:role/<role-name>’ }
}
```

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

OR REPLACE  
指定如果存在与已存在的库同名的库，则替换现有库。REPLACE 将立即提交。如果依赖于所替换库的 UDF 正在并行运行，UDF 可能失败或返回意外结果，即使 UDF 正在事务中运行也是如此。您必须是所有者或超级用户才能替换库。

 *library\$1name*   
要安装的库的名称。无法创建包含与 Python Standard Library 模块或 Amazon Redshift 预安装的 Python 模块同名的模块的库。如果现有用户安装的库与要安装的库使用相同的 Python 包，则必须先删除现有库，然后再安装新库。有关更多信息，请参阅 [适用于 UDF 的 Python 语言支持](udf-python-language-support.md)。

LANGUAGE plpythonu  
要使用的语言。Python (plpythonu) 是唯一支持的语言。Amazon Redshift 支持 Python 2.7 版本。有关更多信息，请参阅 [www.python.org](https://www.python.org/)。

FROM  
库文件的位置。您可以指定 Amazon S3 桶和对象名称，也可以指定用于从公共网站下载文件的 URL。必须以 `.zip` 文件的形式打包库。有关更多信息，请参阅 Python 文档中的[构建和安装 Python 模块](https://docs.python.org/2/library/distutils.html?highlight=distutils#module-distutils)。

 https://*file\$1url*   
用于从公共网站下载文件的 URL。URL 最多可包含三个重定向。以下是文件 URL 的示例。  

```
'https://www.example.com/pylib.zip'
```

 s3://*bucket\$1name/file\$1name*   
包含库文件的单个 Amazon S3 对象的路径。以下是 Amazon S3 对象路径的示例。  

```
's3://amzn-s3-demo-bucket/my-pylib.zip'
```
如果您指定 Amazon S3 桶，则还必须为有权下载该文件的 Amazon 用户提供凭证。  
 如果 Amazon S3 桶不在您的 Amazon Redshift 集群所在的 Amazon 区域内，则必须使用 REGION 选项指定数据所在的 Amazon 区域。*aws\$1region* 的值必须匹配 COPY 命令的 [REGION](copy-parameters-data-source-s3.md#copy-region) 参数描述中的表中所列的 Amazon 区域。

*授权*   
一个子句，指示您的集群在访问包含库文件的 Amazon S3 桶时使用的身份验证和授权方法。您的集群必须有权利用 LIST 和 GET 操作访问 Amazon S3。  
authorization 的语法与 COPY 命令 authorization 的语法相同。有关更多信息，请参阅 [授权参数](copy-parameters-authorization.md)。  

```
IAM_ROLE { default | ‘arn:aws:iam::<Amazon Web Services 账户-id>:role/<role-name>’
```
 使用默认关键字让 Amazon Redshift 使用设置为默认值并在 CREATE LIBRARY 命令运行时与集群关联的 IAM 角色。  
使用 IAM 角色的 Amazon 资源名称（ARN），您的集群使用该角色进行身份验证和授权。如果您指定 IAM\$1ROLE，则无法使用 ACCESS\$1KEY\$1ID 和 SECRET\$1ACCESS\$1KEY、SESSION\$1TOKEN 或 CREDENTIALS。  
（可选）如果 Amazon S3 桶使用服务器端加密，也可以在 credentials-args 字符串中提供加密密钥。如果您使用临时安全凭证，请在 *credentials-args* 字符串中提供临时令牌。  
有关更多信息，请参阅 [临时安全凭证](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials)。

 REGION [AS] *aws\$1region*   
Amazon S3 桶所在的 Amazon 区域。当 Amazon S3 桶与 Amazon Redshift 集群不在同一个 Amazon 区域时，需要 REGION。*aws\$1region* 的值必须匹配 COPY 命令的 [REGION](copy-parameters-data-source-s3.md#copy-region) 参数描述中的表中所列的 Amazon 区域。  
预设情况下，CREATE LIBRARY 假定 Amazon S3 桶位于 Amazon Redshift 集群所在的 Amazon 区域。

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

以下两个示例将安装 [urlparse](https://docs.python.org/2/library/urlparse.html#module-urlparse) Python 模块，该模块会打包到名为 `urlparse3-1.0.3.zip` 的文件中。

以下命令从已上载到位于美国东部区域的 Amazon S3 桶的包安装名为 `f_urlparse` 的 UDF 库。

```
create library f_urlparse
language plpythonu
from 's3://amzn-s3-demo-bucket/urlparse3-1.0.3.zip'
credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>'
region as 'us-east-1';
```

以下示例从网站上的库文件安装名为 `f_urlparse` 的库。



```
create library f_urlparse
language plpythonu
from 'https://example.com/packages/urlparse3-1.0.3.zip';
```