

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

# 从 Amazon DynamoDB 表中加载数据
<a name="t_Loading-data-from-dynamodb"></a>

您可以使用 COPY 命令从单个 Amazon DynamoDB 表加载带数据的表。

**重要**  
提供数据的 Amazon DynamoDB 表必须在与集群相同的 AWS 区域中创建，除非您使用 [REGION](copy-parameters-data-source-s3.md#copy-region) 选项指定 Amazon DynamoDB 表所在的 AWS 区域。

COPY 命令使用 Amazon Redshift 大规模并行处理 (MPP) 架构从 Amazon DynamoDB 表中并行读取和加载数据。您可以通过在 Amazon Redshift 表上设置分配样式，从而最大程度地利用并行处理。有关更多信息，请参阅 [用于优化查询的数据分配](t_Distributing_data.md)。

**重要**  
当 COPY 命令从 Amazon DynamoDB 表读取数据时，生成的数据传输是该表的预配置吞吐量的一部分。

为避免过度消耗预配置的读取吞吐量，我们建议您不要从生产环境中的 Amazon DynamoDB 表加载数据。如果您确实需要从生产表加载数据，我们建议您设置远低于未使用预配置吞吐量的平均百分比的 READRATIO 选项。低 READRATIO 设置有助于最大程度地减少限制问题。要使用 Amazon DynamoDB 表的所有预配置吞吐量，请将 READRATIO 设置为 100。

COPY 命令使用以下规则，将从 DynamoDB 表检索到的项目中的属性名称与现有 Amazon Redshift 表中的列名称匹配：
+ Amazon Redshift 表列与 Amazon DynamoDB 项目属性匹配且不区分大小写。如果 DynamoDB 表中的项目包含仅大小写不同的多个属性（如 Price 和 PRICE），COPY 命令将失败。
+ 与 Amazon DynamoDB 表中的属性不匹配的 Amazon Redshift 表列作为 NULL 或空值加载，具体取决于使用 [COPY](r_COPY.md) 命令中的 EMPTYASNULL 选项指定的值。
+ 将弃用与 Amazon Redshift 表中的列不匹配的 Amazon DynamoDB 属性。属性是在匹配前读取的，因此即使是已弃用的属性也会消耗该表的一部分预配置吞吐量。
+ 仅支持具有标量 STRING 和 NUMBER 数据类型的 Amazon DynamoDB 属性。不支持 Amazon DynamoDB BINARY 和 SET 数据类型。如果 COPY 命令尝试加载某个具有不支持的数据类型的属性，该命令将失败。如果该属性与 Amazon Redshift 表列不匹配，则 COPY 不会尝试加载它，它也不会引发错误。

COPY 命令使用以下语法从 Amazon DynamoDB 表加载数据：

```
COPY <redshift_tablename> FROM 'dynamodb://<dynamodb_table_name>'
authorization
readratio '<integer>';
```

*authorization* 的值是访问 Amazon DynamoDB 表所需的 AWS 凭证。如果这些凭证对应于某个用户，则该用户必须拥有对要加载的 Amazon DynamoDB 表执行 SCAN 和 DESCRIBE 的权限。

*authorization* 的值为您的集群提供访问 Amazon DynamoDB 表所需的 AWS 授权。必须包括对要加载的 Amazon DynamoDB 表执行 SCAN 和 DESCRIBE 的权限。有关所需权限的更多信息，请参阅[COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 权限](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions)。进行身份验证的首选方法是为具有必要权限的 IAM 角色指定 IAM\$1ROLE 参数并提供 Amazon 资源名称（ARN）。有关更多信息，请参阅 [基于角色的访问控制](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)。

要使用 IAM\$1ROLE 参数进行身份验证，请替换 *<aws-account-id>* 和 *<role-name>*，如以下语法中所示。

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```

以下示例使用 IAM 角色进行身份验证。

```
COPY favoritemovies 
FROM 'dynamodb://ProductCatalog'
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

有关其他授权选项的更多信息，请参阅[授权参数](copy-parameters-authorization.md)。

如果您要验证您的数据而不实际加载表，请对 [COPY](r_COPY.md) 命令使用 NOLOAD 选项。

以下示例加载包含来自 DynamoDB 表 my-favorite-movies-table 的数据的 FAVORITEMOVIES 表。读取活动可消耗多达 50% 的预配置吞吐量。

```
COPY favoritemovies FROM 'dynamodb://my-favorite-movies-table' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
READRATIO 50;
```

为了最大程度地增加吞吐量，COPY 命令将跨集群中的计算节点从 Amazon DynamoDB 表并行加载数据。

## 预置的吞吐量与自动压缩
<a name="t_Loading-data-from-dynamodb-provisioned-throughput-with-automatic-compression"></a>

默认情况下，COPY 命令将在您指定没有压缩编码的空目标表时应用自动压缩。自动压缩分析最初将对 Amazon DynamoDB 表中的很多行进行采样。样本大小基于 COMPROWS 参数的值。默认值为每个切片 100000 行。

采样后，将弃用示例行并加载整个表。因此，很多行会被读取两次。有关自动压缩的工作方式的更多信息，请参阅[使用自动压缩加载表](c_Loading_tables_auto_compress.md)。

**重要**  
当 COPY 命令从 Amazon DynamoDB 表读取数据（包括用于采样的行）时，生成的数据传输是该表的预配置吞吐量的一部分。

## 从 Amazon DynamoDB 中加载多字节数据
<a name="t_Loading-data-from-dynamodb-loading-multibyte-data-from-amazon-dynamodb"></a>

如果您的数据包含非 ASCII 多字节字符（例如中文或西里尔语字符），则必须将该数据加载到 VARCHAR 列。VARCHAR 数据类型支持四字节的 UTF-8 字符，而 CHAR 数据类型仅接受单字节的 ASCII 字符。您不能将五字节或更长的字符加载到 Amazon Redshift 表中。有关 CHAR 和 VARCHAR 的更多信息，请参阅[数据类型](c_Supported_data_types.md)。