Amazon S3 のテーブルの場所 - Amazon Athena

Amazon S3 のテーブルの場所

Athenaで CREATE TABLE クエリを実行するときは、AWS Glue データカタログにテーブルを登録します。(Athena の古い内部カタログを使用している場合は、AWS Glue データカタログにアップグレードすることが強く推奨されます。)

以下の例にあるように、Amazon S3 内のデータへのパスを指定するには、LOCATION プロパティを使用します。

CREATE EXTERNAL TABLE `test_table`( ... ) ROW FORMAT ... STORED AS INPUTFORMAT ... OUTPUTFORMAT ... LOCATION s3://bucketname/folder/
  • 詳細については、Amazon Simple Storage Service デベロッパーガイドの「バケットの制約と制限」を参照してください。

  • Amazon S3 でのフォルダの使用については、Amazon Simple Storage Service コンソールユーザーガイドフォルダの使用について参照してください。

Amazon S3 の LOCATION は、テーブルを表すすべてのファイルを指定します。

重要

Athena が、指定した Amazon S3 フォルダに保存されているすべてのデータを読み込みます。Athena に読み込ませたくないデータがある場合は、そのデータを Athena に読み込ませたいデータと同じ Amazon S3 フォルダに保存しないでください。パーティションを利用している場合に、Athena がパーティション内のデータをスキャンすることを確実にするには、WHERE フィルターにパーティションが含まれている必要があります。詳細については、テーブルの場所とパーティションを参照してください。

LOCATION ステートメントで CREATE TABLE を指定する場合は、次のガイドラインを使用します。

  • 末尾にスラッシュを使用します。

  • Amazon S3 フォルダまたは Amazon S3 アクセスポイントエイリアスへのパスを使用できます。Amazon S3 アクセスポイントエイリアスの詳細については、Amazon S3 ユーザーガイドの「Using a bucket-style alias for your access point」を参照してください。

を使用します

s3://bucketname/folder/
s3://access-point-name-metadata-s3alias/folder/

以下の項目をデータの LOCATION の指定に使用しないでください。

  • ファイルの場所を指定するために、ファイル名、アンダースコア、ワイルドカード、または glob パターンを使用しないでください。

  • s3.amazon.com などの完全な HTTP 表記を Amazon S3 バケットのパスに追加しないでください。

  • パスに // のような空のフォルダを使用しないでください (例: S3://bucketname/folder//folder/)。これは有効な Amazon S3 パスですが、Athena はそれを許可せず、余分な / を削除して、s3://bucketname/folder/folder/ に変更します。

    以下を使用しないでください

    s3://path_to_bucket s3://path_to_bucket/* s3://path_to_bucket/mySpecialFile.dat s3://bucketname/prefix/filename.csv s3://test-bucket.s3.amazon.com S3://bucket/prefix//prefix/ arn:aws:s3:::bucketname/prefix s3://arn:aws:s3:<region>:<account_id>:accesspoint/<accesspointname> https://<accesspointname>-<number>.s3-accesspoint.<region>.amazonaws.com

テーブルの場所とパーティション

ソースデータは、列のセットに基づいたパーティションと呼ばれる Amazon S3 フォルダに分類される場合があります。たとえば、これらの列が、特定のレコードが作成された年、月、日を表す場合があります。

テーブルを作成するときに、パーティション分割されるように選択できます。Athena がパーティション分割されていないテーブルに対して SQL クエリを実行するときは、テーブル定義からの LOCATION プロパティをリスト化するための基本的なパスとして使用してから、利用可能なすべてのファイルをスキャンします。ただし、パーティション分割されたテーブルをクエリする前に、パーティション情報で AWS Glue データカタログを更新する必要があります。この情報は、特定のパーティション内のファイルのスキーマと、そのパーティションに関する Amazon S3 内のファイルの LOCATION を表します。

Athena がパーティション分割されたテーブルをクエリするときは、クエリの WHERE 句にパーティション分割された列が使用されているかどうかを確認します。パーティション分割された列が使用されている場合、Athena は AWS Glue データカタログに対して、指定されたパーティション列に一致するパーティション仕様を返すようにリクエストします。パーティション仕様には、データを読み取るときに使用する Amazon S3 プレフィックスを Athena に伝える LOCATION プロパティが含まれています。この場合、このプレフィックスに保存されたデータのみがスキャンされます。WHERE 句でパーティション分割された列を使用しない場合、Athena はテーブルのパーティションに属するすべてのファイルをスキャンします。

Athena でパーティション分割を使用してクエリパフォーマンスを向上させてクエリコストを削減する例については、Top Performance Tuning Tips for Amazon Athena を参照してください。