从 Amazon DynamoDB 表中加载数据 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

从 Amazon DynamoDB 表中加载数据

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

重要

提供数据的 Amazon DynamoDB 表必须在与集群相同的 Amazon 区域中创建,除非您使用 REGION 选项指定 Amazon DynamoDB 表所在的 Amazon 区域。

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

重要

当 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 命令中的 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 表所需的 Amazon 凭证。如果这些凭证对应于某个用户,则该用户必须拥有对要加载的 Amazon DynamoDB 表执行 SCAN 和 DESCRIBE 的权限。

authorization 的值为您的集群提供访问 Amazon DynamoDB 表所需的 Amazon 授权。必须包括对要加载的 Amazon DynamoDB 表执行 SCAN 和 DESCRIBE 的权限。有关所需权限的更多信息,请参阅COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 权限。进行身份验证的首选方法是为具有必要权限的 IAM 角色指定 IAM_ROLE 参数并提供 Amazon 资源名称(ARN)。有关更多信息,请参阅 基于角色的访问控制

要使用 IAM_ROLE 参数进行身份验证,请替换 <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 命令使用 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 表并行加载数据。

预置的吞吐量与自动压缩

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

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

重要

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

从 Amazon DynamoDB 中加载多字节数据

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