Amazon Athenaによるデータ分析入門

最近では良質なクラウドストレージを安価に利用できるようになり、クラウドにデータを保管することも一般的になってきました。クラウドに保管されたデータにはいつでもどこからでもアクセスできるため、必要な時にデータの集計やグラフ化などにより新たな知見や洞察を得るために活用することができます。
ただ、集計や分析対象のデータ規模が小さなうちはデータ処理や転送に要する時間やリソース消費の大きさは特に問題にはなりませんが、データの規模が大きくなるにつれて適切な対応が求められるようになります。
主要なクラウド事業者の一つであるAmazon Web Services (AWS)は規模の大きなデータの処理をサポートするための様々なサービスを提供しており、これらのサービスの一つに「Amazon Athena」があります。
このコラムではAmazon Athenaの概要を解説しさらにAmazon Athenaの使い方についても紹介します。

Amazon Athenaについて

Amazon Athenaとは何か?

Amazon AthenaはAWSのデータ分析サービスであり、Amazon Athenaを使うことによってAWSのオブジェクトストレージであるAmazon Simple Storage Service (S3)に格納されたデータに対して、集計やソートなどの分析を実行することができます。
分析のための記述言語としてはSQLが使用されるため、リレーショナルデータベース管理システムを利用するなどして既にSQLに習熟しているユーザーは、Amazon Athenaを利用するにあたって新たな言語などを覚える必要はありません。
データベース管理システムやデータウェアハウスに格納されていないデータに対してSQLクエリを発行するためには、従来はApache Hadoopなどでビッグデータ処理基盤を構築したり、ETL処理によってデータベース管理システムやデータウェアハウスにデータをインポートしたり、データを分析するのに先立って一手間を加える必要がありました。
これに対し、Amazon Athenaではデータの形式がCSVやJSONなどのいくつかの条件を満たしていれば、事前の準備を必要とすることなく分析を実行できるため、時間や手間を減らすことができます。

Amazon Athenaの使いどころ

Amazon Athenaでは、発行されたSQLクエリによってスキャンされたデータの容量に応じて利用料金が発生します。
したがって、例えば概念実証やプロトタイピングの段階などで、色々なパターンの分析を手早く試したいようなユースケースに適しています。
一方、同じ手順の分析を定期的に繰り返すようなユースケースでは、データウェアハウスなどを利用した方が分析時間や利用料金などの点で優れています。
AWSはAmazon Athenaの他にもデータウェアハウスサービスであるAmazon Redshiftやビッグデータ処理サービスであるAmazon Elastic MapReduce (EMR)を提供しており、後者のようなユースケースで活用することができます。
Amazon Athenaに限らず、目的に応じてサービスの使いどころを見極められることが求められます。
なお、Amazon Athenaはサーバーレスのサービスであり、サービスの利用形態としてはPaaSに含まれるため、インフラストラクチャの管理・運用をAWSに任せることができます。

Amazon Athenaの使い方

前段では、Amazon Athenaの概要について解説しました。
Amazon Athenaを使うことによってAmazon S3に格納されたデータに対してSQLクエリを発行することができます。
以下、実践編としてAmazon Athenaの基本的な使い方を解説します。

データベースの作成

Amazon Athenaを使うにあたり、最初に「データベース」と呼ばれるリソースを作成する必要があります。
データベースを作成するには、AWSのWebコンソールからAmazon Athenaのページにアクセスします。

Amazon Athenaのページが表示された後、「Get Started」ボタンをクリックしてQuery Editorのページにアクセスします。

Query Editorのページが表示された後、「set up a query result location in Amazon S3」と表示されたリンクをクリックします。

Settingsダイアログが表示された後、「Query result location」にAmazon S3バケットのURIを入力してから「Save」ボタンをクリックします。

Settingsダイアログが非表示になった後、「New query 1」のテキストエリアに下記のSQLクエリを入力してから「Run query」ボタンをクリックします。

CREATE DATABASE mydatabase;

SQLクエリの実行が完了した後、Databaseのセレクトボックスをクリックしてから「mydatabase」を選んでクリックします。

テーブルの作成

データベースの作成が完了したら、次は「テーブル」と呼ばれるリソースを作成する必要があります。
テーブルを作成するには、Query Editorのテキストエリアに下記のSQLクエリを入力してから「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/';

SQLクエリの実行が完了した後、「cloudfront_logs」という名前のテーブルが作成されたことを確認します。

SELECTクエリの実行

データベースとテーブルの作成が完了した後は、分析のためのSELECTクエリを発行することができます。
SELECTクエリを発行するには、Query Editorのテキストエリアに下記のSQLクエリを入力してから「Run query」ボタンをクリックします。

SELECT os, COUNT(*) count
FROM cloudfront_logs
WHERE date BETWEEN date '2014-07-05' AND date '2014-08-05'
GROUP BY os;

SQLクエリの実行が完了した後、実行結果が表示されます。

実行結果に含まれるファイルのアイコンをクリックすることで、実行結果をCSVデータとしてダウンロードすることができます。

また、ヘッダナビゲーションに含まれる「History」をクリックすることで、SQLクエリの実行履歴を確認することができます。

クエリ結果はQuery result locationとして設定されたAmazon S3バケットにも保存されます。

CREATE TABLEクエリについて

テーブルを作成する際に発行したCREATE TABLEクエリを見ると「EXTERNAL」「ROW FORMAT」「WITH SERDEPROPERTIES」「LOCATION」など、通常のSQLでは使用されたキーワードがいくつか含まれていることがわかります。
「EXTERNAL」は作成するテーブルが外部テーブルであることを指定するキーワードであり、データベースシステムの外部にあるデータをテーブルとして扱います。
「ROW FORMAT」は外部テーブルの行の形式を指定するキーワードであり、先のCREATE TABLEクエリでは「SERDE」(serializer/deserializer)として正規表現を用いる「org.apache.hadoop.hive.serde2.RegexSerDe」クラスが指定されています。
「WITH SERDEPROPERTIES」はシリアライザー/デシリアライザーのプロパティを指定するキーワードであり、org.apache.hadoop.hive.serde2.RegexSerDeクラスの場合には正規表現が指定されます。
「LOCATION」は外部データソースを指定するキーワードであり、分析対象のAmazon S3オブジェクトのURIが指定されます。

クリーンアップ

作成したテーブルを削除するには、下記のSQLクエリを実行します。

DROP TABLE cloudfront_logs;

作成したデータベースを削除するには、下記のSQLクエリを実行します。

DROP DATABASE mydatabase;

おわりに

AWSはデータ分析に関連する様々なサービスを提供しています。
これらのサービスの中でもAmazon Athenaは利用の敷居が低いと言え、活用できる可能性がある場合は試してみると良いでしょう。

移行準備段階で知っておくべきAmazon Web Servicesの
サービスを学び、具体的にクラウド検討を考える!

ネットワークからクラウドまでトータルサポート!!
NTT東日本のクラウド導入・運用サービスを確認してください!!

Amazon Web Services(AWS)、Microsoft Azureの
導入支援サービスのご相談、お問い合わせをお待ちしております。

ページ上部へ戻る