アーカイブ済みオブジェクトのクエリ - Amazon Simple Storage Service

アーカイブ済みオブジェクトのクエリ

Select タイプの POST Object restore では、Amazon S3 によってS3 Glacier にアーカイブしたデータに対して直接、シンプルな構造化クエリ言語 (SQL) ステートメントを使用してフィルタリングオペレーションを実行できます。アーカイブ済みオブジェクトに対して SQL クエリを指定すると、Select は所定のクエリを実行し、出力結果を S3 バケットに書き込みます。オブジェクト全体を Amazon S3 に復元することなく、S3 Glacier に保存されているデータに対してクエリやカスタム分析を実行できます。

SELECT クエリを実行する際、S3 Glacier では迅速標準一括の 3 つのアクセス階層を使用できます。これらの階層はそれぞれデータアクセスの時間とコストが異なります。データをどれほど早く利用する必要があるかに応じて、どの階層を使用するかを選択できます。詳細については、「データアクセス階層」を参照してください。

Select タイプの復元は、AWS SDK、S3 Glacier REST API、および AWS Command Line Interface (AWS CLI) で使用できます。

選択使用時の要件と制限

Select を使用するための要件は以下のとおりです。

  • Select でクエリしたアーカイブオブジェクトは、非圧縮のカンマ区切り値 (CSV) としてフォーマットする必要があります。

  • 出力には S3 バケットが必要です。S3 Glacier Select ジョブの開始に使用する AWS アカウント には、S3 バケットに対する書き込み許可が必要です。バケットは、クエリ対象のアーカイブ済みオブジェクトが含まれているバケットと同じ AWS リージョン にあることが必要です。

  • リクエスト元の AWS アカウント には、s3:RestoreObject アクションと s3:GetObject アクションを実行する許可が必要です。これらのアクセス許可の詳細については、「例 — バケットサブリソースオペレーション」を参照してください。

  • アーカイブは SSE-C またはクライアント側の暗号化で暗号化してはなりません。

Select を使用するときは以下の制限が適用されます。

  • Select で処理できるレコードの数に制限はありません。入力または出力レコードは 1 MB 以下でなければなりません。それ以外の場合、クエリは失敗します。レコードごとに 1,048,576 列という制限があります。

  • 最終結果のサイズに制限はありません。ただし、結果は複数のパートに分割されます。

  • SQL 式のサイズの上限は 128 KB です。

Select を使用したデータのクエリ

Select を使用すると、非圧縮の暗号化された CSV フォーマットで保存されている S3 Glacier アーカイブオブジェクトに対し、SQL コマンドを使用してクエリを実行できます。この制限により、S3 Glacier 内のテキストベースのデータに対し、簡単なクエリのオペレーションを実行できます。たとえば、アーカイブ済みテキストファイルのセットから、特定の名前や ID を検索する場合があります。

S3 Glacier データをクエリするには、POST Object restore オペレーションを使用して Select リクエストを作成します。Select リクエストを実行するときに、SQL 式、クエリ対象のアーカイブ、結果の保存先を指定します。

次の例に示す式では、POST Object restore で指定されたアーカイブ済みオブジェクトからすべてのレコードを返します。

SELECT * FROM object

S3 Glacier Select は、ANSI SQL 言語のサブセットをサポートします。SELECTFROMWHERE などの一般的なフィルタリングの SQL 句をサポートします。SUMCOUNTGROUP BYJOINSDISTINCTUNIONORDER BY、および LIMIT はサポートしません。SQL のサポートの詳細については、Amazon S3 Select と S3 Glacier Select の SQL リファレンス を参照してください。

Select の出力

Select リクエストを開始する際、SELECT クエリの結果の出力先を定義します。この場所は、クエリ対象のアーカイブ済みオブジェクトが含まれているバケットと同じ AWS リージョン にある S3 バケットであることが必要です。ジョブを開始する AWS アカウント には、バケットに書き込むための許可が必要です。

Amazon S3 に保存された出力オブジェクトの Amazon S3 ストレージクラスおよび暗号化を指定できます。Select は、AWS Key Management Service (SSE-KMS) および Amazon S3 (SSE-S3) 暗号化をサポートしています。Select は、SSE-C およびクライアント側の暗号化をサポートしていません。Amazon S3 ストレージクラスと暗号化の詳細については、「Amazon S3 ストレージクラスを使用する」および「サーバー側の暗号化を使用したデータの保護」を参照してください。

S3 Glacier Select の結果は、POST Object restore で指定された出力先で提供されるプレフィックスを使用して S3 バケットに保存されます。この情報から、Select はジョブ ID を参照する一意のプレフィックスを作成します (プレフィックスは、オブジェクト名を共通の文字列で始めることで Amazon S3 オブジェクトをグループ化するため使用されます)。この一意のプレフィックスの下に、結果には results、ログおよびエラーには errors という 2 つの新しいプレフィックスが作成されます。ジョブが完了すると、結果のすべての場所を含む、結果のマニフェストが書き込まれます。

出力場所に書き込まれる、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 プレフィックスを付加します。次に、結果を 3 つに分けて書き込みます。それぞれのオブジェクト名は、abcdef、および ghi で終わります。結果のマニフェストには、3 つすべてのファイルが含まれ、プログラムで取得できます。エラーが発生してジョブが失敗すると、ファイルは error プレフィックス付きで表示され、error_manifest.txt が生成されます。

result_manifest.txt ファイルが表示され、error_manifest.txt が表示されなければ、ジョブが正常に完了したことの保証となります。結果がどのような順番で並ぶかに関する保証はありません。

注記

Amazon S3 オブジェクト名はキーとも呼ばれ、長さは 1024 バイト以内でなければなりせん。S3 Glacier Select により、128 バイトがプレフィックス用に予約されます。また、Amazon S3 の場所のパスは、長さ 512 バイト以内で指定する必要があります。リクエストの長さが 512 バイトを超えると、例外が返され、リクエストは却下されます。

エラー処理

Select は、2 種類のエラーを通知します。最初のエラーのセットは、POST Object restore でクエリを送信すると同時に通知されます。これらのエラーは、HTTP レスポンスの一部として送信されます。別のエラーのセットは、クエリが正常に受け付けられた後で、クエリの実行中に発生する場合があります。この場合、エラーは指定した出力先に errors プレフィックスで書き込まれます。

Select は、エラー発生後、クエリの実行を停止します。クエリを正常に実行するには、すべてのエラーを解決する必要があります。どのレコードが失敗の原因になったのかを特定するために、ログを確認できます。

クエリは、複数のコンピューティングノード全体で並列で実行されるため、エラーは順番に表示されるわけではありません。たとえば、クエリが行 6234 のエラーで失敗した場合、行 6234 よりの前のすべての行が正常に処理されているということではありません。次のクエリの実行では、異なる列のエラーが表示される場合があります。

データアクセス階層

アーカイブ済みオブジェクトをクエリするときに、以下のいずれかのデータアクセス階層を指定できます。

  • Expedited – アーカイブのサブセットに対する不定期の緊急リクエストが必要になった場合にデータにすばやくアクセスできます。すべてのアーカイブ済みオブジェクト (ただし、250 MB 以上の最大規模のオブジェクトを除く) について、Expedited 取り出しでアクセスしたデータは通常 1〜5 分以内で使用可能になります。Expedited のデータアクセスには、オンデマンドとプロビジョニング済みの 2 種類があります。オンデマンドリクエストは、EC2 オンデマンドインスタンスに似ており、大部分の時間で利用可能です。プロビジョニング済みリクエストは、必要なときに利用できることが保証されます。詳細については、「プロビジョンドキャパシティー」を参照してください。

  • Standard – 数時間以内にすべてのアーカイブ済みオブジェクトにアクセスできます。通常、Standard 取り出しは 3〜5 時間以内に終了します。これはデフォルト階層です。

  • Bulk – S3 Glacier の最も安価なデータアクセスオプションであり、大量のデータ (ペタバイトのデータを含む) を 1 日以内に安価に取得できます。通常、Bulk アクセスは 5~12 時間以内に終了します。

ExpeditedStandard、または Bulk のリクエストを行うには、POST Object restore REST API リクエストの Tier リクエスト要素を、必要なオプションに設定するか、AWS CLI または AWS SDK の同等の値に設定します。Expedited アクセスの場合、この取り出しがオンデマンドであるかプロビジョニング済みであるかを指定する必要はありません。プロビジョンドキャパシティーを購入した場合、すべての Expedited 取り出しはプロビジョンドキャパシティーを通じて自動的に提供されます。従量制料金の詳細については、「S3 Glacier の料金」を参照してください。

プロビジョンドキャパシティー

プロビジョンドキャパシティーは、迅速取り出しの取得容量を必要なときに利用できることを保証します。容量の各単位について 5 分ごとに 3 回以上の迅速取り出しを保証し、最大 150 MB/秒の取り出しスループットを提供します。詳細については、「プロビジョンドキャパシティー」を参照してください。