

 从补丁 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/)。

# 卸载加密的数据文件
<a name="t_unloading_encrypted_files"></a>

UNLOAD 通过采用 Amazon 托管式加密密钥的 Amazon S3 服务器端加密（SSE-S3）自动创建文件。您还可以指定利用 Amazon Key Management Service 密钥进行服务器端加密 (SSE-KMS)，或利用客户管理的密钥进行客户端加密。UNLOAD 不支持使用客户提供的密钥的 Amazon S3 服务器端加密。有关更多信息，请参阅[使用服务器端加密保护数据](https://docs.amazonaws.cn/AmazonS3/latest/userguide/serv-side-encryption.html)。

要利用 Amazon KMS 密钥进行服务器端加密来卸载到 Amazon S3，请如下例所示使用 KMS\_KEY\_ID 参数提供密钥 ID。

```
unload ('select venuename, venuecity from venue')
to 's3://amzn-s3-demo-bucket/encrypted/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
KMS_KEY_ID '1234abcd-12ab-34cd-56ef-1234567890ab'
encrypted;
```

如果您希望提供自己的加密密钥，则可以通过使用包含 ENCRYPTED 选项的 UNLOAD 命令在 Amazon S3 中创建客户端加密数据文件。UNLOAD 与 Amazon S3 客户端加密使用相同的信封加密过程。之后，您可以使用包含 ENCRYPTED 选项的 COPY 命令加载加密文件。

该过程的工作方式如下所示：

1. 创建用作私有加密密钥（也称作*根对称密钥*）的 base64 编码的 256 位 AES 密钥。

1. 发出包含根对称密钥及 ENCRYPTED 选项的 UNLOAD 命令。

1. UNLOAD 生成用于加密您的数据的一次性对称密钥（称作*信封对称密钥*）和初始化向量 (IV)。

1. UNLOAD 使用您的根对称密钥加密该信封对称密钥。

1. 然后，UNLOAD 将加密数据文件存储在 Amazon S3 中，并将加密信封密钥和 IV 作为对象元数据随每个文件存储。加密信封密钥作为对象元数据 `x-amz-meta-x-amz-key` 存储，IV 作为对象元数据 `x-amz-meta-x-amz-iv` 存储。

有关信封加密过程的更多信息，请参阅[使用 Amazon SDK for Java 和 Amazon S3 进行客户端数据加密](https://www.amazonaws.cn/articles/2850096021478074)一文。

要卸载加密数据文件，请将根密钥值添加到凭证字符串并包括 ENCRYPTED 选项。如果您使用了 MANIFEST 选项，清单文件也将加密。

```
unload ('select venuename, venuecity from venue')
to 's3://amzn-s3-demo-bucket/encrypted/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key '{{<root_key>}}' 
manifest
encrypted;
```

要卸载经过 GZIP 压缩的加密数据文件，请包含 GZIP 选项及根密钥值和 ENCRYPTED 选项。

```
unload ('select venuename, venuecity from venue')
to 's3://amzn-s3-demo-bucket/encrypted/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key '{{<root_key>}}' 
encrypted gzip;
```

要加载加密数据文件，请添加具有相同根密钥值的 MASTER\_SYMMETRIC\_KEY 参数，并包括 ENCRYPTED 选项。

```
copy venue from 's3://amzn-s3-demo-bucket/encrypted/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key '{{<root_key>}}' 
encrypted;
```