Amazon Athena
ユーザーガイド

Athena のテーブルとデータベースの作成プロセス

DDL ステートメントを Athena コンソールで実行するには、JDBC または ODBC ドライバーを使用するか、[Athena でのテーブルの作成] ウィザードを使用します。

Athena で新しいテーブルスキーマを作成すると、このスキーマは Athena のデータカタログに保存されて、クエリの実行時に使用されます。

Athena は、スキーマオンリードというアプローチを使用しています。このアプローチでは、クエリを実行するときにスキーマがデータに射影されます。これにより、データのロードや変換が不要になります。

Athena は、Amazon S3 内のデータを変更しません。

Athena では、Apache Hive を使用してテーブルを定義し、基本的にはテーブルの論理名前空間であるデータベースを作成します。

Athena でデータベースやテーブルを作成するとは、単にスキーマと Amazon S3 内のテーブルデータの場所を記述することに過ぎません。データはクエリ実行時に読み取られます。データは、データベースやテーブルのスキーマ定義と一緒に保存されないため、データベースやテーブルの意味が従来のリレーショナルデータベースシステムの場合とは少し異なります。

クエリを実行する場合は、標準の SQL を使用してテーブルをクエリします。そのときにデータが読み取られます。データベースとテーブルの作成方法に関するガイダンスは、Apache Hive のドキュメントで参照できますが、以下では Athena 専用のガイダンスを提供します。

クエリ文字列の最大長は 256 KB です。

Hive では、シリアライザー/デシリアライザー (SerDe) ライブラリの使用を通じて複数のデータ形式をサポートします。正規表現を使用して複雑なスキーマを定義することもできます。サポートされる SerDe ライブラリのリストについては、「サポートされるデータ形式、SerDe、および圧縮形式」を参照してください。

Athena のテーブルと Amazon S3 のデータに関する要件

テーブルを作成するときに、LOCATION 句を使用して基となるデータの格納先である Amazon S3 バケットの場所を指定します。以下の点を考慮します。

  • バージョニングされた Amazon S3​ バケットでは Athena​ は最新バージョンのデータのみをクエリできます。以前のバージョンのデータはクエリできません。

  • Amazon S3 内のデータを使用する適切なアクセス許可が必要です。詳細については、「ユーザーおよび Amazon S3 バケットへのアクセス許可の設定」を参照してください。

  • Amazon S3 で暗号化しないデータは、Athena を実行するプライマリリージョンとは異なるリージョンに保存できます。Athena の標準料金に加えて、Amazon S3 の標準のリージョン間データ転送料金が適用されます。

  • Amazon S3 で暗号化するデータは、同じリージョンに保存する必要があります。また、Athena でテーブルを作成するユーザーやプリンシパルには、データを復号するための適切なアクセス許可が必要です。詳細については「暗号化オプションの設定」を参照してください。

  • Athena は、LOCATION 句で指定された同じバケットで複数のストレージクラスに保存されたオブジェクトのクエリをサポートします。たとえば、Amazon S3 でさまざまなストレージクラス (Standard、Standard-IA、Intelligent-Tiering) に保存されたオブジェクトでデータをクエリできます。

  • Athena では、リクエスタ支払いバケットはサポートされません。

  • Athena では、GLACIER ストレージクラスでのデータのクエリはサポートされません。Amazon S3 ライフサイクルポリシーに基づいて GLACIER ストレージクラスに移行されたオブジェクトは無視されます。

    詳細については、Amazon Simple Storage Service 開発者ガイド の「ストレージクラス」、「Amazon S3 のオブジェクトのストレージクラスの変更」、「GLACIER ストレージクラスへの移行 (オブジェクトのアーカイブ)」、および「リクエスタ支払いバケット」を参照してください。

  • Amazon S3 バケットに対してクエリを発行する場合に大量のオブジェクトやデータがパーティション分割されていない場合、このようなクエリは Amazon S3 の取得リクエスト率制限に影響を及ぼす場合があり、Amazon S3 の例外が発生することがあります。エラーを防ぐには、データをパーティション分割します。また、Amazon S3 リクエスト率のチューニングを検討してください。詳細については、「リクエスト率およびリクエストパフォーマンスに関する留意事項」を参照してください。

サポートされている関数

Athena のクエリでサポートされる関数は Presto 内にある関数です。詳細については、Presto ドキュメントの「Presto 0.172 関数と演算子」を参照してください。

トランザクションデータ変換はサポートされない

Athena は、テーブルデータに対するトランザクションベースのオペレーション (Hive や Presto の該当するオペレーションなど) をサポートしません。サポートされないキーワードの詳細なリストについては、「サポートされない DDL」を参照してください。

テーブルの状態を変更するオペレーションは ACID に準拠する

テーブルを作成、更新、または削除する場合、これらのオペレーションは ACID に準拠することが保証されます。たとえば、複数のユーザーやクライアントが同時に既存のテーブルを作成または変更しようとした場合、成功するのは 1 つのユーザーまたはクライアントのみです。

すべてのテーブルは EXTERNAL である

CREATE TABLEEXTERNAL キーワードなしで使用すると、Athena でエラーが発生します。EXTERNAL キーワードが設定されたテーブルのみを作成できます。常に EXTERNAL キーワードを使用することをお勧めします。Athena でテーブルを削除すると、テーブルメタデータのみが削除され、データは Amazon S3 に残ります。

UDF と UDAF はサポートされない

ユーザー定義関数 (UDF や UDAF) およびストアドプロシージャはサポートされません。

AWS Glue データカタログを使用してテーブルを作成するには

  1. https://console.aws.amazon.com/athena/ で Athena コンソールを開きます。

  2. [AWS Glue Data Catalog] を選択します。次に AWS Glue クローラを使用してテーブルを作成できます。詳細については、「AWS Glue クローラの使用」を参照してください。

ウィザードを使用してテーブルを作成するには

  1. https://console.aws.amazon.com/athena/ で Athena コンソールを開きます。

  2. クエリエディタのデータベースの表示の下で [Add table] を選択してウィザードを表示します。

  3. 表示されるステップに従ってテーブルを作成します。

Hive DDL を使用してデータベースを作成するには

Athena のデータベースは、テーブルを作成する先の論理グループです。

  1. https://console.aws.amazon.com/athena/ で Athena コンソールを開きます。

  2. [Query Editor] を選択します。

  3. CREATE DATABASE myDataBase」と入力して [Run Query] を選択します。

  4. メニューからデータベースを選択します。通常は空のデータベースです。

Hive DDL を使用してテーブルを作成するには

Athena クエリエディタに現在のデータベースが表示されます。テーブルを作成してデータベースを指定しない場合、テーブルは [Catalog] タブの [Databases] セクションで選択したデータベースに作成されます。

  1. 作成したデータベースで、次のステートメントを入力してテーブルを作成し、[Run Query] を選択します。

    CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs ( `Date` Date, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, OS String, Browser String, BrowserVersion String ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION 's3://athena-examples/cloudfront/plaintext/';
  2. テーブルが正常に作成されたら、データに対してクエリを実行できます。