Amazon Athena
ユーザーガイド

Amazon S3 のテーブルの場所

Athena で CREATE TABLE クエリを実行する場合は、AWS Glue Data Catalog にテーブルを登録します。Athena 独自のカタログを使用している場合は、AWS Glue Data Catalog に アップグレードされることを強くお勧めします。次の省略の例に示すように、LOCATION プロパティでデータへのパスを指定します。

CREATE EXTERNAL TABLE `test_table`( ... ) ROW FORMAT ... STORED AS INPUTFORMAT ... OUTPUTFORMAT ... LOCATION s3://bucketname/prefix/

Amazon S3 のこの場所は、テーブルを表すすべてのファイルで構成されます。詳細については、Amazon Simple Storage Service コンソールユーザーガイドフォルダの使用を参照してください。

重要

Athena は、's3://bucketname/prefix/' の下に格納されているすべてのデータを読み取ります。Athena で読み取りたくないデータがある場合は、Athena で読み取りたいデータと同じ Amazon S3 プレフィックスにそのデータを格納しないでください。パーティションを使用している場合、パーティション内のデータが Athena によってスキャンされるようするには、WHERE フィルタにそのパーティションが含まれている必要があります。詳細については、テーブルの場所とパーティションを参照してください。

Athena の CREATE TABLE ステートメントでデータの Amazon S3 の場所を指定する際は、次のヒントと例を参考にしてください。

  • LOCATION 句では、末尾にスラッシュを使用します。

    使用アイテム:

    s3://bucketname/prefix/
  • 以下の項目を、データの場所の指定に使用しないでください。

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

    • s3.amazon.com などの完全な HTTP 表記を Amazon S3 バケットのパスに追加しません。

    • 次のように、パスに空のプレフィックス (余分の / を付けて) を使用しないでください。S3://bucketname/prefix//prefix/これは有効な Amazon S3 パスですが、Athena では許可されておらず、余分な / を削除した s3://bucketname/prefix/prefix/ に変更されます。

      使用しない:

      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

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

ソースデータは、一連の列に基づき、パーティションとも呼ばれる Amazon S3 プレフィックスにグループ化される場合があります。たとえば、これらの列が、特定のレコードが作成された年、月、日を表す場合があります。

テーブルを作成するときに、パーティション分割されるように選択できます。Athena がパーティション分割されていないテーブルに対して SQL クエリを実行すると、テーブル定義から 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 句でパーティション列を使用しない場合は、メインテーブル定義の LOCATION プロパティで指定された Amazon S3 基本パスから始まるすべてのファイルが Athena によってスキャンされます。

Athena でクエリのパフォーマンスを向上させ、クエリのコストを削減するパーティションの使用例については、Amazon Athena のパフォーマンスチューニング Tips トップ 10 を参照してください。