Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

查询存档对象

利用 POST Object restore select 类型,针对由 Amazon S3 存档到 Amazon Glacier 的数据,您可以直接使用简单的结构化查询语言 (SQL) 语句执行筛选操作。当您对存档对象进行 SQL 查询时,select 会就地运行该查询,并将输出结果写入一个 S3 存储桶中。您可以针对存储在 Amazon Glacier 中的数据运行查询和自定义分析,而不必将整个对象还原到 Amazon S3。

当您执行 select 查询时,Amazon Glacier 会提供三个数据访问层 — 加速标准批量。所有这些层提供不同的数据访问时间和成本,您可以根据您希望数据可用的速度选择其中任何一个层。有关更多信息,请参阅 数据访问套餐

您可以将还原的 select 类型与 AWS 开发工具包、Amazon Glacier REST API 和 AWS Command Line Interface (AWS CLI) 结合使用。

Select 要求和限制

以下是使用 select 的要求:

  • 由 select 查询的存档对象必须格式化为未压缩的逗号分隔值 (CSV)。

  • 作为输出的 S3 存储桶。用于启动 Amazon Glacier select 任务的 AWS 账户必须具有 S3 存储桶的写入权限。该 Amazon S3 存储桶必须位于与包含要查询的存档对象的存储桶相同的 AWS 区域中。

  • 提出请求的 AWS 账户必须拥有执行 s3:RestoreObjects3:GetObject 操作的权限。有关这些权限的更多信息,请参阅与存储桶子资源操作相关的权限

  • 存档一定不能使用 SSE-C 或客户端加密进行加密。

使用 select 时存在以下限制:

  • select 可以处理的记录数量没有限制。输入或输出记录不得超过 1 MB,否则查询会失败。每个记录有 1,048,576 列的限制。

  • 对最终结果的大小没有限制。但结果分成多个部分。

  • SQL 表达式限制为 128 KB。

如何使用 Select 查询数据?

通过 select,您可以使用 SQL 命令查询采用加密的未压缩 CSV 格式的 Amazon Glacier 存档对象。通过此限制,您可以对 Amazon Glacier 中基于文本的数据执行简单的查询操作。例如,可以在一系列存档文本文件中查找特定名称或 ID。

要查询您的 Amazon Glacier 数据,请使用 POST Object restore 操作创建 select 请求。在执行 Select 请求时,您需要提供 SQL 表达式、要查询的档案以及存储结果的位置。

下面的示例表达式从 POST Object restore 中指定的存档对象返回所有记录。

SELECT * FROM object

Amazon Glacier Select 支持 ANSI SQL 语言的一部分。它支持通用筛选 SQL 子句,如 SELECTFROMWHERE。它不支持 SUMCOUNTGROUP BYJOINSDISTINCTUNIONORDER BYLIMIT。有关 SQL 支持的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的 Amazon S3 Select 和 Amazon Glacier Select 的 SQL 参考

Select 输出

在您启动 Select 请求时,需要为 select 查询的结果定义输出位置。该位置必须是一个 Amazon S3 存储桶,与包含要查询的存档对象的存储桶位于相同的 AWS 区域中。启动任务的 AWS 账户必须具有写入 S3 存储桶的权限。

您可以为存储在 Amazon S3 中的输出对象指定 Amazon S3 存储类和加密。Select 支持 SSE-KMS 和 SSE-S3 加密。Select 不支持 SSE-C 和客户端加密。有关 Amazon S3 存储类和加密的更多信息,请参阅存储类别使用服务器端加密保护数据

Amazon Glacier Select 结果使用在 POST Object restore 中指定的输出位置中提供的前缀存储在 S3 存储桶中。通过此信息,select 会创建一个引用任务 ID 的唯一前缀。(前缀用于通过以通用字符串开始对象名称将 Amazon S3 对象组合在一起。) 在这个唯一前缀之下,有两个新建的前缀,results 用于结果,errors 用于日志和错误。完成任务后,将会写入一个结果清单,其中包含所有结果的位置。

还有一个名为 job.txt 的占位符文件,它会写入到输出位置。它在写入后便从不更新。占位符文件用于以下事项:

  • 同步验证写入权限和大多数 SQL 语法错误。

  • 提供与您的 select 请求相关的静态输出,可供您随时方便地引用。

例如,假设您将 select 请求结果的输出位置指定为 s3://example-bucket/my-prefix,而且任务响应返回的任务 ID 为 examplekne1209ualkdjh812elkassdu9012e。在 select 任务完成后,您可以在存储桶中看到以下 Amazon S3 对象:

s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/job.txt s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/results/abc s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/results/def s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/results/ghi s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/result_manifest.txt

Select 查询结果分成多个部分。在此示例中,select 使用您在设置输出位置时指定的前缀,并附加任务 ID 和 results 前缀。然后,它将结果写入三个部分中,其各自的对象名称以 abcdefghi 结尾。 结果清单包含全部三个文件以允许编程检索。如果任务因任何错误而失败,则会在错误前缀下面显示一个文件,并且生成 error_manifest.txt

具有 result_manifest.txt 文件但缺少 error_manifest.txt 可确保任务成功完成。对如何排序结果不提供保证。

注意

Amazon S3 对象名称 (也称为) 的长度不能超过 1024 字节。Amazon Glacier select 为前缀保留 128 字节。而且,Amazon S3 路径位置的长度不能超过 512 字节。长度大于 512 字节的请求会返回异常,并且该请求不被接受。

错误处理

Select 会通知您两种错误。第一组错误会于您在 POST Object restore 中提交查询时同步发送给您。这些错误将作为 HTTP 响应的一部分发送给您。在成功接受查询后,可能会发生另一组错误,但这些错误是在查询执行过程中发生的。在这种情况下,错误将会写入到在 errors 前缀下指定的输出位置中。

Select 在遇到错误后将会停止执行查询。要成功执行查询,您必须解析所有错误。您可以检查日志以确定哪些记录导致了故障。

由于查询在多个计算节点之间并行运行,因此您得到的错误不是按顺序排序的。例如,如果查询在第 6234 行中因出现错误而失败,并不意味着第 6234 行之前的所有行都已成功处理。下次运行查询时可能会在其他行中显示错误。

数据访问套餐

在查询存档对象时,您可以指定以下数据访问套餐之一:

  • Expedited – 允许您在偶尔需要紧急请求档案子集时快速访问数据。对于除了最大型存档对象 (250 MB+) 之外的所有其他档案,使用 Expedited 检索访问的数据通常在 1 到 5 分钟内可用。Expedited 数据访问有两种类型:按需和预配置。按需请求类似于 EC2 按需实例,大部分时间可用。预配置请求可确保在您需要时可用。有关更多信息,请参阅 预配置容量

  • Standard – 允许您在数小时内访问您的任意存档对象。Standard 检索通常可在 3 到 5 小时内完成。这是默认套餐。

  • Bulk – Amazon Glacier 中成本最低的数据访问选项,使您可以在一天内以较低的成本检索大量 (甚至是 PB 级) 的数据。Bulk 访问通常可在 5 到 12 小时内完成。

要提出 ExpeditedStandardBulk 请求,请将 POST Object restore REST API 请求中的 Tier 请求元素设置为您需要的选项,或者在 AWS CLI 或 AWS 开发工具包中设置等同参数。对于 Expedited 访问,无需指定加速检索是按需还是预配置。如果您购买了预配置容量,则所有 Expedited 检索都会通过您的预配置容量自动获得处理。有关层定价的信息,请参阅 Amazon Glacier 定价

预配置容量

预配置容量确保在您需要时,可以使用针对加速检索的检索容量。每个容量单位确保每五分钟至少可以执行三个加速检索,并提供高达 150 MB/秒的检索吞吐量。

如果您的工作负载需要极高的稳定性和对数据子集可预测的访问性能 (以分钟为单位),您应该购买预配置检索容量。没有预配置容量的 Expedited 检索也可以接受,但在极少数出现不寻常的高需求的情况下例外。不过,如果需要随时可以访问 Expedited 检索,您必须购买预配置检索容量。您可以使用 Amazon S3 控制台、Amazon Glacier 控制台、购买预配置容量 REST API、AWS 软件开发工具包或 AWS CLI 购买预配置容量。有关预配置容量的定价信息,请参阅 Amazon Glacier 定价

更多信息