Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

管理数据一致性

Amazon S3 为某些操作提供最终一致性,因此新数据在上传后可能不会立即可用,这可能会导致数据加载不完整或加载过时数据。群集和存储桶位于不同区域的 COPY 操作具有最终一致性。所有区域均为具有唯一对象键的新对象的上传提供先写后读一致性。有关数据一致性的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的 Amazon S3 数据一致性模型

为了确保应用程序加载正确数据,我们建议您采用以下做法:

  • 创建新的对象键。

    Amazon S3 在所有区域中为覆盖操作提供最终一致性。通过在 Amazon S3 中为每个数据加载操作创建新文件名称或对象键,可在所有区域中提供强一致性。

  • 将清单文件用于 COPY 操作。

    清单将明确命名要加载的文件。使用清单文件可强制实施强一致性。

本节的其余部分将详细说明这些步骤。

创建新的对象键

由于潜在的数据一致性问题,我们强烈建议您为每个数据加载操作创建带有唯一的 Amazon S3 对象键的新文件。如果您用新数据覆盖现有文件,然后在上传后立即发出 COPY 命令,那么在所有新数据可用之前,COPY 操作可能会从旧文件开始加载。有关最终一致性的更多信息,请参阅 Amazon S3 开发人员指南 中的 Amazon S3 数据一致性模型

使用清单文件

您可以使用清单文件明确指定要加载哪些文件。在您使用清单文件时,如果 COPY 未在主服务器上找到列出的文件,则它会通过搜索辅助服务器来强制实施强一致性。清单文件可配置可选的 mandatory 标志。如果 mandatorytrue 且未找到文件,则 COPY 将返回错误。

有关使用清单文件的更多信息,请参阅 COPY 命令的 copy_from_s3_manifest_file 选项和 COPY 示例中的Example: COPY from Amazon S3 using a manifest

由于 Amazon S3 为所有区域中的覆盖提供最终一致性,因此,如果您用新数据覆盖现有对象,则可能会加载过时数据。作为最佳实践,请勿用新数据覆盖现有文件。