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

使用 Glacier Select 查询档案

通过 Glacier Select,您可以直接对 Glacier 中您的数据使用简单的结构化查询语言 (SQL) 语句执行筛选操作。当您提供有关 Glacier 档案对象的 SQL 查询时,Glacier Select 会就地运行该查询并将输出结果写入 Amazon S3 中。通过 Glacier Select,您可以对您存储在 Glacier 中的数据运行查询和自定义分析,而不必将数据恢复到像 Amazon S3 这样较热的层。

当您执行 select 查询时,Glacier 会提供三个数据访问层 — 加速标准批量。所有这些层提供不同的数据访问时间和成本,您可以根据您希望数据可用的速度选择其中任何一个层。对于除了最大型档案 (250 MB+) 之外的所有其他档案,使用加速层访问的数据通常在 1 到 5 分钟内可用。标准层在 3–5 小时内完成。批量检索在 5-12 小时完成。有关层定价的信息,请参阅 Glacier 定价

您可以将 Glacier Select 与 AWS SDK、Glacier REST API、AWS Command Line Interface (AWS CLI) 结合使用。

Glacier Select 要求和限制

下面是使用 Glacier Select 的要求:

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

  • 您必须有一个可供使用的 S3 存储桶。此外,用于启动 Glacier Select 任务的 AWS 账户必须具有 S3 存储桶的写入权限。该 Amazon S3 存储桶必须位于与包含要查询的档案对象的文件库相同的 AWS 区域中。

  • 您必须拥有调用 获取任务输出(获取输出) 的权限。

使用 Glacier Select 时存在以下限制:

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

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

  • SQL 表达式限制为 128 KB。

如何使用 Glacier Select 查询数据?

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

要查询您的 Glacier 数据,请使用 启动作业(POST 作业) 操作创建 select 任务。在启动 Select 任务时,您将提供 SQL 表达式、要查询的档案以及在 Amazon S3 中存储结果的位置。

下面的示例表达式返回由 启动作业(POST 作业) 中的档案 ID 指定的档案中的所有记录。

SELECT * FROM archive

Glacier Select 支持 ANSI SQL 语言的一部分。它支持通用筛选 SQL 子句,如 SELECT、FROM 和 WHERE。它不支持 SUM、COUNT、GROUP BY、JOINS、DISTINCT、UNION、ORDER BY 和 LIMIT。有关 SQL 支持的更多信息,请参阅适用于 Amazon S3 Select 和 Glacier Select 的 SQL 参考

Glacier Select 输出

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

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

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

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

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

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

注意

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

错误处理

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

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

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