「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
Amazon S3 のテーブルの場所
Athena で CREATE TABLE
クエリを実行する場合は、AWS Glue Data Catalog にテーブルを登録します。(Athena の古い内部カタログを使用している場合は、 に AWS GlueアップグレードData Catalogすることを強くお勧めします。)
次の例に示すように、Amazon S3 でデータへのパスを指定するには、LOCATION
プロパティを使用します。
CREATE EXTERNAL TABLE `test_table`(
...
)
ROW FORMAT ...
STORED AS INPUTFORMAT ...
OUTPUTFORMAT ...
LOCATION s3://bucketname
/folder
/
-
バケットの命名の詳細については、https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html の「バケットの制約と制限Amazon Simple Storage Service 開発者ガイド」を参照してください。
-
でのフォルダの使用の詳細については、Amazon S3 の「フォルダの使用」を参照してください。Amazon Simple Storage Service コンソールユーザーガイド
Amazon S3 の LOCATION
は、テーブルを表すすべてのファイルを指定します。
Athena は、 に保存されているすべてs3://
のデータを読み取ります。 で読み取りたくないデータがある場合は、Athena で読み取りたいデータと同じ Amazon S3 フォルダにそのデータを保存しないでください。Athenaパーティションを使用している場合、パーティション内のデータが
Athena によってスキャンされるようするには、bucketname
/folder
/'WHERE
フィルタにそのパーティションが含まれている必要があります。詳細については、テーブルの場所とパーティションを参照してください。
CREATE TABLE
ステートメントで LOCATION
を指定する場合は、次のガイドラインを使用します。
-
末尾にスラッシュを使用します。
使用アイテム:
s3://
bucketname
/folder
/ -
以下の項目をデータの
LOCATION
の指定に使用しないでください。-
ファイルの場所を指定するために、ファイル名、アンダースコア、ワイルドカード、または glob パターンを使用しないでください。
-
s3.amazon.com
などの完全な HTTP 表記を Amazon S3 バケットのパスに追加しません。 -
句で Amazon S3 アクセスポイント
を指定しないでください。 LOCATION
テーブルの場所は URI としてのみ指定できます。 -
次のように、パスに
//
のような空のフォルダを使用しないでください。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パーティション と呼ばれる フォルダにグループ化できます。たとえば、これらの列が、特定のレコードが作成された年、月、日を表す場合があります。
テーブルを作成するときに、パーティション分割されるように選択できます。は、パーティション分割されていないテーブルに対して SQL クエリを実行するときに、テーブル定義の
Athena プロパティを基本パスとして使用し、使用可能なすべてのファイルをリストしてスキャンします。LOCATION
ただし、パーティション分割されたテーブルでクエリを実行する前に、パーティション情報で AWS Glue Data Catalog を更新する必要があります。この情報は、特定のパーティション内のファイルのスキーマと
Amazon S3 のパーティションに含まれる LOCATION
ファイルのスキーマを表します。
-
クローラがパーティションを追加する方法について詳しくは、AWS Glue 開発者ガイドの「クローラは、どのようにパーティションを作成するタイミングを判断していますか?AWS Glue」を参照してください。
-
既存のパーティションでデータのテーブルを作成するようにクローラを設定する方法については、クローラーでの複数のデータソースの使用を参照してください。
-
テーブルのパーティションを Athena で直接作成することもできます。詳細については、「データのパーティション分割」を参照してください。
は、パーティション分割されたテーブルに対してクエリを実行する際、パーティション化された列がクエリの Athena 句で使用されているかどうかを確認します。WHERE
パーティション分割された列が使用された場合、Athena は、指定されたパーティション列と一致するパーティションの仕様を返すよう AWS Glue Data Catalog
にリクエストします。パーティションの仕様には、Athena がデータを読み取るときに使用する Amazon S3 プレフィックスを指定する LOCATION
プロパティが含まれています。この場合、このプレフィックスに保存されたデータのみがスキャンされます。WHERE
句でパーティション化された列を使用しない場合、Athena はテーブルのパーティションに属するすべてのファイルをスキャンします。
Athena でクエリのパフォーマンスを向上させ、クエリのコストを削減するパーティションの使用例については、Amazon Athena のパフォーマンスチューニング Tips トップ 10