使用 S3 Glacier 选择查询档案 - Amazon S3 Glacier
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 S3 Glacier 选择查询档案

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

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

您可以将 S3 Glacier Select 与 Amazon 开发工具包、S3 Glacier REST API 和Amazon Command Line Interface(Amazon CLI)。

S3 Glacier Select 要求和配额

下面是使用 S3 Glacier Select 的要求:

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

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

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

使用 S3 Glacier Select 时需符合以下配额的要求:

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

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

  • SQL 表达式限制为 128 KB。

如何使用 S3 Glacier Select 查询数据?

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

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

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

SELECT * FROM archive

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

S3 Glacier Select 输出

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

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

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

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

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

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

注意

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

错误处理

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

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

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