CREATE LIBRARY - Amazon Redshift

CREATE LIBRARY

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

CREATE LIBRARY 无法在事务块 (BEGIN … END) 内运行。有关事务的更多信息,请参阅 可序列化的隔离

Amazon Redshift 支持 Python 2.7 版本。有关更多信息,请参阅 www.python.org

有关更多信息,请参阅 导入自定义 Python 库模块

所需的权限

以下是 CREATE LIBRARY 所需的权限:

  • Superuser

  • 具有 CREATE LIBRARY 权限或具有指定语言权限的用户

语法

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::<AWS 账户-id>:role/<role-name>’ } }

参数

OR REPLACE

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

library_name

要安装的库的名称。无法创建包含与 Python Standard Library 模块或 Amazon Redshift 预安装的 Python 模块同名的模块的库。如果现有用户安装的库与要安装的库使用相同的 Python 包,则必须先删除现有库,然后再安装新库。有关更多信息,请参阅 适用于 UDF 的 Python 语言支持

LANGUAGE plpythonu

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

FROM

库文件的位置。您可以指定 Amazon S3 桶和对象名称,也可以指定用于从公共网站下载文件的 URL。必须以 .zip 文件的形式打包库。有关更多信息,请参阅 Python 文档中的构建和安装 Python 模块

https://file_url

用于从公共网站下载文件的 URL。URL 最多可包含三个重定向。以下是文件 URL 的示例。

'https://www.example.com/pylib.zip'
s3://bucket_name/file_name

包含库文件的单个 Amazon S3 对象的路径。以下是 Amazon S3 对象路径的示例。

's3://amzn-s3-demo-bucket/my-pylib.zip'

如果您指定 Amazon S3 桶,则还必须为有权下载该文件的 AWS 用户提供凭证。

重要

如果 Amazon S3 桶不在您的 Amazon Redshift 集群所在的 AWS 区域内,则必须使用 REGION 选项指定数据所在的 AWS 区域。aws_region 的值必须匹配 COPY 命令的 REGION 参数描述中的表中所列的 AWS 区域。

授权

一个子句,指示您的集群在访问包含库文件的 Amazon S3 桶时使用的身份验证和授权方法。您的集群必须有权利用 LIST 和 GET 操作访问 Amazon S3。

authorization 的语法与 COPY 命令 authorization 的语法相同。有关更多信息,请参阅 授权参数

IAM_ROLE { default | ‘arn:aws:iam::<AWS 账户-id>:role/<role-name>

使用默认关键字让 Amazon Redshift 使用设置为默认值并在 CREATE LIBRARY 命令运行时与集群关联的 IAM 角色。

使用 IAM 角色的 Amazon 资源名称(ARN),您的集群使用该角色进行身份验证和授权。如果您指定 IAM_ROLE,则无法使用 ACCESS_KEY_ID 和 SECRET_ACCESS_KEY、SESSION_TOKEN 或 CREDENTIALS。

(可选)如果 Amazon S3 桶使用服务器端加密,也可以在 credentials-args 字符串中提供加密密钥。如果您使用临时安全凭证,请在 credentials-args 字符串中提供临时令牌。

有关更多信息,请参阅 临时安全凭证

REGION [AS] aws_region

Amazon S3 桶所在的 AWS 区域。当 Amazon S3 桶与 Amazon Redshift 集群不在同一个 AWS 区域时,需要 REGION。aws_region 的值必须匹配 COPY 命令的 REGION 参数描述中的表中所列的 AWS 区域。

预设情况下,CREATE LIBRARY 假定 Amazon S3 桶位于 Amazon Redshift 集群所在的 AWS 区域。

示例

以下两个示例将安装 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';