ご利用開始にあたって - Amazon Athena

ご利用開始にあたって

このチュートリアルは、Amazon Athena を使用したデータのクエリについて詳しく説明するもので、Amazon Simple Storage Service に保存されたサンプルデータに基づいたテーブルを作成し、テーブルをクエリして、クエリ結果を確認します。

チュートリアルではライブリソースを使用するため、実行したクエリに対する料金が発生します。このチュートリアルが使用する場所にあるサンプルデータに対する料金は発生しませんが、独自のデータファイルを Amazon S3 にアップロードする場合は、料金が適用されます。

Prerequisites

  • アカウントにサインアップしていない場合は、「セットアップ」でサインアップします。

  • Athena で使用しているものと同じ AWS リージョン (米国西部 (オレゴン) など) とアカウントを使用して、Athena からのクエリ結果を保存するバケットを Amazon S3 に作成します。

ステップ 1: データベースを作成する

まず、Athena でデータベースを作成する必要があります。

データベースを作成する

  1. Athena コンソールを開きます。

  2. 現在の AWS リージョンで Athena コンソールを初めて使用する場合は、[開始] をクリックしてクエリエディタを開きます。以前に利用したことがある場合は、Athena クエリエディタが開きます。

  3. [set up a query result location in Amazon S3] (Amazon S3 クエリ結果の場所を設定する) リンクをクリックします。

    
                        [set up a query result location] (クエリの結果の場所を設定する) をクリックします。
  4. [設定] ダイアログボックスで、次のいずれかの操作を行います。

    • [選択] フォルダのアイコンをクリックし、現在のリージョンで作成した Amazon S3 バケットを選択し、[選択] をクリックします。

    • [クエリ結果の場所] テキストボックスで、クエリ結果のために Amazon S3 で作成したバケットへのパスを入力します。パスの先頭に s3:// を付け、パスの末尾にフォワードスラッシュを付けます。

    
                        Athena からのクエリ結果を受け取る Amazon S3 の場所を指定します。
  5. [保存] を選択します。

    もし [設定] ダイアログボックスに戻る必要があれば、Athena コンソールの上部にある [設定] オプションを選択します。

    
                        [設定] オプションを使用してクエリ結果の場所を指定します。
  6. ナビゲーションペインの右側で、Athena クエリエディタを使用してクエリとステートメントを入力および実行できます。

    
                        Athena コンソールのクエリペイン。
  7. mydatabase という名前のデータベースを作成するには、以下の CREATE DATABASE ステートメントを入力します。

    CREATE DATABASE mydatabase
  8. [Run Query] (クエリの実行) をクリックするか、Ctrl+ENTER を押します。

  9. 左側のナビゲーションペインで、[データベース] リストから mydatabase を選択して現在のデータベースにします。

    
                        Athena コンソールのナビゲーションペインから、作成したデータベースを選択します。

ステップ 2: テーブルを作成する

データベースが作成されたので、Athena テーブルを作成できます。作成するテーブルは、s3://athena-examples-myregion/cloudfront/plaintext/ という場所の Amazon CloudFront ログデータのサンプルに基づきます。ここで、myregion は現在の AWS リージョンです。

サンプルログデータは、タブ区切り (TSV) 形式で、フィールドがタブ文字で区切られています。結果は以下の例のようになります。読みやすくするため、抜粋箇所のタブがスペースに変換され、最後のフィールドが短縮されています。

2014-07-05 20:00:09 DFW3 4260 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-1.jpeg 200 - Mozilla/5.0[...] 2014-07-05 20:00:09 DFW3 4252 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-2.jpeg 200 - Mozilla/5.0[...] 2014-07-05 20:00:10 AMS1 4261 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-3.jpeg 200 - Mozilla/5.0[...]

Athena がこのデータを読み取れるようにするには、次のように CREATE EXTERNAL TABLE ステートメントを実行する方法があります。テーブルを作成するステートメントは、データにマップする列を定義し、データを区切る方法を指定して、サンプルデータが含まれる Amazon S3 の場所を指定します。

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, ClientInfo STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' LOCATION 's3://athena-examples-my-region/cloudfront/plaintext/';

この例は、cloudfront_logs という名前のテーブルを作成し、各フィールドの名前とデータ型を指定します。これらのフィールドがテーブルの列になります。date予約語であるため、バッククォート (`) 文字でエスケープされます。ROW FORMAT DELIMITED は、Athena が実際のデータ解析作業の実行に LazySimpleSerDe という名前のデフォルトライブラリを使用することを意味します。この例は、フィールドがタブ区切り (FIELDS TERMINATED BY '\t') であり、ファイル内の各レコードが改行文字 (LINES TERMINATED BY '\n) で終わることも指定します。最後に、LOCATION 句が、読み取られる実際のデータが格納されている Amazon S3 のパスを指定します。独自のタブ区切りまたはカンマ区切りのデータがある場合は、CREATE TABLE ステートメントをこのように使用できます。

サンプルデータに戻り、最後のフィールドである ClientInfo の完全な例を次に示します。

Mozilla/5.0%20(Android;%20U;%20Windows%20NT%205.1;%20en-US;%20rv:1.9.0.9)%20Gecko/2009040821%20IE/3.0.9

ご覧のとおり、このフィールドは複数値フィールドです。CREATE TABLE ステートメントでフィールドの区切り文字としてタブが指定されている場合、この特定のフィールド内の個別のコンポーネントを個別の列に分割することはできません。フィールド内の値から列を作成するには、正規表現 (regex) グループを含む正規表現を使用できます。指定する regex グループは、個別のテーブル列になります。CREATE TABLE ステートメントで正規表現を使用するには、次のような構文を使用します。この構文によって、Athena が Regex SerDe ライブラリと指定した正規表現を使用するように指示されます。

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "regular_expression")

正規表現は、複雑な CSV データまたは TSV データからのテーブルの作成に便利ですが、記述や保守が困難な場合があります。幸いに、JSON、Parquet、および ORC といった形式に使用できるライブラリは他にもあります。詳細については、「サポートされる SerDes とデータ形式」を参照してください。

これで、Athena クエリエディタでテーブルを作成する準備が整いました。CREATE TABLE ステートメントと正規表現が用意されています。

テーブルを作成するには

  1. データベース については、mydatabase が選択されていることを確認します。

  2. クエリエディタでプラス記号 (+) を選択して、新しいクエリを含むタブを作成します。一度に最大 10 個のクエリタブを開くことができます。

    
                        [+] アイコンを選択して、新しいクエリを作成します。
  3. クエリペインに、次の CREATE EXTERNAL TABLE クエリを入力します。この正規表現で、ログデータの ClientInfo フィールドから、オペレーティングシステム、ブラウザ、およびブラウザバージョンの情報を抜き出すことができます。

    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/';
  4. LOCATION ステートメントで、myregion を、現在使用している AWS リージョン (us-west-1 など) に置き換えます。

  5. [Run Query] (クエリの実行) をクリックします。

    テーブル cloudfront_logs が作成され、mydatabase データベースの [Tables] (テーブル) リストに表示されます。

    
                        Athena コンソールで作成されたテーブル。

ステップ 3: データをクエリする

Amazon S3 内のデータに基づいて Athena で cloudfront_logs テーブルを作成したところで、次は Athena でこのテーブルに SQL クエリを実行して、結果を確認することができます。Athena での SQL の使用に関する詳細については、「Amazon Athena の SQL リファレンス」を参照してください。

クエリを実行する

  1. プラス (+) 記号をクリックして新しいクエリタブを開き、クエリペインに次の SQL ステートメントを入力します。

    SELECT os, COUNT(*) count FROM cloudfront_logs WHERE date BETWEEN date '2014-07-05' AND date '2014-08-05' GROUP BY os;
  2. [Run Query] (クエリの実行) をクリックします。

    結果は以下のようになります。

    
                        Athena コンソールでのクエリ結果の表示。
  3. クエリ結果は、[Results] (結果) ペインにあるダウンロードアイコンを選択して、.csv ファイルに保存できます。

    
                        クエリ結果の CSV 形式でのダウンロード。
  4. 以前のクエリを表示するには、クエリエディタの上にある [履歴] タブを選択します。

    
                        [History] (履歴) を選択して、以前のクエリを表示します。
  5. [Download results] (結果のダウンロード) を選択して、前のクエリの結果をダウンロードします。クエリ履歴は 45 日間保持されます。

    
                        Athena コンソールでのクエリ履歴の表示。

    詳細については、「」を参照してくださいクエリ結果、出力ファイル、クエリ履歴の使用

他のデータソースへの接続

このチュートリアルでは、Amazon S3 にある CSV 形式のデータソースを使用しました。AWS Glue での Athena の使用については、「AWS Glue を使用した Amazon S3 内のデータソースへの接続」を参照してください。ODBC ドライバー、JDBC ドライバー、外部の Hive メタストア、および Athena データソースコネクタを使用して、Athena をさまざまなデータソースに接続することもできます。詳細については、「」を参照してくださいデータソースへの接続