「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
Athena でのテーブルの作成
DDL ステートメントを Athena コンソールで実行するには、JDBC または ODBC ドライバーを使用するか、Athena [Add table (テーブルの追加)] ウィザード を使用します。
Athena で新しいテーブルスキーマを作成すると、このスキーマは Athena のデータカタログに保存されて、クエリの実行時に使用されます。
Athena では、スキーマオンリードというアプローチを使用します。このアプローチでは、クエリを実行するときにスキーマがデータに射影されます。これにより、データのロードや変換が不要になります。
Athena は、Amazon S3 内のデータを変更しません。
Athena では、Apache Hive を使用してテーブルを定義し、基本的にはテーブルの論理名前空間であるデータベースを作成します。
Athena でデータベースやテーブルを作成するとは、単にスキーマと Amazon S3 内のテーブルデータの場所を記述することに過ぎません。データはクエリ実行時に読み取られます。データは、データベースやテーブルのスキーマ定義と一緒に保存されないため、データベースやテーブルの意味が従来のリレーショナルデータベースシステムの場合とは少し異なります。
クエリを実行する場合は、標準の SQL を使用してテーブルをクエリします。そのときにデータが読み取られます。データベースとテーブルの作成方法に関するガイダンスは、Apache Hive のドキュメント
クエリ文字列の最大長は 256 KB です。
Hive では、シリアライザー/デシリアライザー (SerDe) ライブラリの使用を通じて複数のデータ形式をサポートします。正規表現を使用して複雑なスキーマを定義することもできます。サポートされている SerDe ライブラリのリストについては、「サポートされる SerDes とデータ形式」を参照してください。
考慮事項と制約事項
次に、Athena のテーブルに関する重要な制限事項と考慮事項を示します。
Athena のテーブルと Amazon S3 のデータに関する要件
テーブルを作成するときに、LOCATION
句を使用して基となるデータの格納先である Amazon S3 バケットの場所を指定します。以下の点を考慮します。
-
バージョニングされた Amazon S3 バケットでは Athena は最新バージョンのデータのみをクエリできます。以前のバージョンのデータはクエリできません。
-
Amazon S3 内のデータを使用する適切なアクセス許可が必要です。詳細については、「Amazon S3 へのアクセス」を参照してください。
-
Athena は、
LOCATION
句で指定された同じバケットで複数のストレージクラスに保存されたオブジェクトのクエリをサポートします。たとえば、Amazon S3 でさまざまなストレージクラス (Standard、Standard-IA、Intelligent-Tiering) に保存されたオブジェクトでデータをクエリできます。 -
Athena では、リクエスタ支払いバケットがサポートされています。Athena でクエリするソースデータを含むバケットに対してリクエスタ支払いを有効にする方法については、「ワークグループの作成」を参照してください。
-
Athena は、S3 Glacier または S3 Glacier Deep Archive ストレージクラスのデータのクエリをサポートしていません。ストレージクラスのオブジェクトは無視されます。S3 Glacierクエリを実行した S3 Glacier Deep Archive ストレージクラスのオブジェクトは、エラーメッセージ になります。
The operation is not valid for the object's storage class
。 これらのクラスのいずれかに移動または移行したデータは、ストレージクラスオブジェクトが復元された後でも Athena による読み取りまたはクエリを実行できなくなります。クエリする復元されたオブジェクトを Athena による読み取り可能にするには、復元されたオブジェクトを Amazon S3 にコピーして、ストレージクラスを変更します。ストレージクラスの詳細については、 の「ストレージクラス」、「Amazon S3 のオブジェクトのストレージクラスの変更」、「GLACIER ストレージクラスへの移行 (オブジェクトのアーカイブ)」、および「リクエスタ支払いバケット」を参照してください。Amazon Simple Storage Service 開発者ガイド
-
Amazon S3 バケットに対してクエリを発行する場合に大量のオブジェクトやデータがパーティション分割されていない場合、このようなクエリは Amazon S3 の取得リクエスト率制限に影響を及ぼす場合があり、Amazon S3 の例外が発生することがあります。エラーを防ぐには、データをパーティション分割します。また、Amazon S3 リクエスト率のチューニングを検討してください。詳細については、「リクエスト率およびリクエストパフォーマンスに関する留意事項」を参照してください。
サポートされている関数
Athena のクエリでサポートされる関数は Presto 内にある関数です。詳細については、 エンジンバージョン 1 および 2 に対応する Presto バージョン
トランザクションデータ変換はサポートされない
Athena は、テーブルデータに対するトランザクションベースのオペレーション (Hive や Presto の該当するオペレーションなど) をサポートしません。サポートされないキーワードの詳細なリストについては、「サポートされない DDL」を参照してください。
テーブルの状態を変更するオペレーションは ACID に準拠する
テーブルを作成、更新、または削除する場合、これらのオペレーションは ACID に準拠することが保証されます。たとえば、複数のユーザーやクライアントが同時に既存のテーブルを作成または変更しようとした場合、成功するのは 1 つのユーザーまたはクライアントのみです。
すべてのテーブルは EXTERNAL である
CREATE TABLE
を EXTERNAL
キーワードなしで使用すると、Athena でエラーが発生します。EXTERNAL
キーワードが設定されたテーブルのみを作成できます。常に EXTERNAL
キーワードを使用することをお勧めします。Athena でテーブルを削除すると、テーブルメタデータのみが削除され、データは Amazon S3 に残ります。
AWS Glue または Athena コンソールを使用したテーブルの作成
Athena でテーブルを作成するには、AWS Glue、[テーブルの追加] ウィザードを使用するか、Athena クエリエディタで DDL ステートメントを実行します。
AWS Glue データカタログを使用してテーブルを作成するには
-
Athena コンソール (https://console.aws.amazon.com/athena/
) を開きます。 -
クエリエディターの [Database (データベース)] で、 [Create table (テーブルの作成)] を選択し、AWS Glue クローラから選択します。
-
[AWS Glue に移動してクローラを設定する] ダイアログボックスで、[Continue (続行)] を選択します。
-
AWS Glue コンソールの手順に従って、クローラを追加します。
詳細については、「AWS Glue クローラの使用」を参照してください。
[Athena テーブルの追加] ウィザードを使用してテーブルを作成するには
-
Athena コンソール (https://console.aws.amazon.com/athena/
) を開きます。 -
クエリエディタのデータベース表示の下で、[Create table (テーブルの作成)] を選択し、S3 バケットデータから選択します。
-
[テーブルの追加] ウィザードで、手順に従ってテーブルを作成します。
Hive DDL を使用してテーブルを作成するには
-
[Database (データベース)] メニューから、テーブルを作成するデータベースを選択します。
CREATE TABLE
ステートメントでデータベースを指定しない場合、テーブルはクエリエディターで現在選択されているデータベースに作成されます。 -
次のようなステートメントを入力し、[Run Query (クエリの実行)] を選択するか、
Ctrl+ENTER
を押します。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-
MyRegion
/cloudfront/plaintext/';テーブルが作成されたら、データに対してクエリを実行できます。