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 ユーザーガイド」の「Using Folders」(フォルダの使用) を参照してください。
Amazon S3 の LOCATION
は、テーブルを表すすべてのファイルを指定します。
重要
Athena が、指定した Amazon S3 フォルダに保存されているすべてのデータを読み込みます。Athena に読み込ませたくないデータがある場合は、そのデータを Athena に読み込ませたいデータと同じ Amazon S3 フォルダに保存しないでください。パーティションを利用している場合に、Athena がパーティション内のデータをスキャンすることを確実にするには、WHERE
フィルターにパーティションが含まれている必要があります。詳細については、「テーブルの場所とパーティション」を参照してください。
CREATE TABLE
ステートメントで LOCATION
を指定する場合は、次のガイドラインを使用します。
-
末尾にスラッシュを使用します。
-
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://
)。これは有効な Amazon S3 パスですが、Athena はそれを許可せず、余分なbucketname
/folder
//folder
//
を削除して、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
を表します。
-
AWS Glue クローラがパーティションを追加する方法については、「AWS Glue デベロッパーガイド」で「クローラがパーティションを作成するタイミングを判断する方法」を参照してください。
-
既存のパーティションでデータのテーブルを作成するようにクローラを設定する方法については、「クローラでの複数のデータソースの使用」を参照してください。
-
テーブルのパーティションは、Athena で直接作成することもできます。詳細については、「Athena でのデータのパーティション化」を参照してください。
Athena がパーティション分割されたテーブルをクエリするときは、クエリの WHERE
句にパーティション分割された列が使用されているかどうかを確認します。パーティション分割された列が使用されている場合、Athena は AWS Glue データカタログに対して、指定されたパーティション列に一致するパーティション仕様を返すようにリクエストします。パーティション仕様には、データを読み取るときに使用する Amazon S3 プレフィックスを Athena に伝える LOCATION
プロパティが含まれています。この場合、このプレフィックスに保存されたデータのみがスキャンされます。WHERE
句でパーティション分割された列を使用しない場合、Athena はテーブルのパーティションに属するすべてのファイルをスキャンします。
Athena でパーティション分割を使用してクエリパフォーマンスを向上させてクエリコストを削減する例については、「Top Performance Tuning Tips for Amazon Athena