膨大な構造化データ、半構造化データを抱え、その中から必要な情報を素早く分析したい。でも、システムに組み込むような本格的な分析ではなく、アドホックに分析したい。そんな時、一体何から始めたら良いのか途方に暮れた事はありませんか?
- 原因調査・仮説検証などスポット的なデータ分析を効率化したい
- データ量が多く処理時間・コストを短縮するためにデータを圧縮したい
- 可視化ツールを活用してレポートを作成したい
本記事では、 上記のような課題を解消するために、Amazon Athenaを用いて効率的にデータ化し、実行時間とスキャンデータ量を削減する方法と、Amazon Managed Grafanaを活用したデータ可視化方法をご紹介します。具体的な手順やサンプルを交えながら、Athenaでのクエリ作成からGrafanaでのダッシュボード構築までを解説します。データ可視化にお困りの方は、ぜひ読んでみてください。
アドホックなデータ分析をAWSで実現する3つのステップ
アドホックデータ分析は、従来のデータウェアハウス構築・運用では時間やコストがかかりすぎるという課題があります。 Amazon AthenaではSQL文により、これらのデータを直接分析できるため、迅速なデータ分析が可能です。
- Athenaに対応するファイル形式のデータをAWS S3に保存します。
- データ変換やパーティショニングなどの前処理が必要な場合はAmazon Athenaを用いてSQLベースで実行し、分析に適した形式に整えます。
- 整形されたデータをAmazon Managed Grafanaに接続し、動的なダッシュボードと可視化ツールを用いて分析、洞察の抽出を行います。
どのようなデータ構造に対応しているの?
構造化データと半構造化データは、Athenaでのクエリが可能です。CSVやParquetなどの形式は構造化データとして、JSONやAvroは半構造化データとして扱われます。これらのデータ形式はAthenaで容易に分析が行えます。一方で、非構造化データは、Athenaで直接分析するのが難しく、別途構造化や前処理が必要です。
| データ形式 | 概要 | Amazon Athena対応 |
| 構造化データ | スキーマを持つデータ 例:CSV、Parquet、ORCなど |
〇 |
| 半構造化データ | 部分的にスキーマを持つデータ 例:JSON、Avroなど |
〇 |
| 非構造化テキストデータ | 明確なスキーマを持たないデータ 例:Logstashログなど |
〇 |
| 非構造化データ | 明確なスキーマを持たないデータ 例:PDF、画像、動画 |
× |
どのようなファイル形式に対応しているの?
Amazon Athenaで取り扱い可能なファイル形式は、構造化データ形式(CSV、TSV、カスタム区切り、 Apache Parquet、ORC )、半構造化データ形式(JSON、Apache Avro、Amazon Ion、CloudTrailログ)、ログファイル形式(Apache WebServerログ、Logstashログ)です。
| ファイル形式 | 説明 |
| Amazon Ion | JSONと互換性のあるデータ形式 |
| Apache Avro | データシリアライズフレームワーク |
| Apache Parquet | 列指向ストレージ形式 |
| Apache WebServer ログ | パターンマッチングが可能なテキストデータ形式 |
| CloudTrail ログ | JSON形式 |
| CSV | カンマ区切り値 |
| カスタム区切り | ユーザー定義の区切り文字で分けられたテキストデータ形式 |
| JSON | 階層型データフォーマット |
| Logstash ログ | パターンマッチングが可能なテキストデータ形式 |
| ORC | 列指向ストレージ形式 |
| TSV | タブ文字で区切られたテキストデータ形式 |
データの可視化は簡単にできますか?
Athenaのクエリ結果をAmazon Managed Grafanaのデータソースとして設定することで、簡単に連携が可能です。 Amazon Managed Grafanaは、複数のビルトインデータソースをサポートしており、さまざまなAWSサービスやその他のデータソースを可視化できます。Athenaのクエリ結果を動的なダッシュボードで表示し、多様な可視化オプションによりカスタマイズすることができます。
データ保管場所
分析対象のデータとクエリ実行結果は以下のようにS3バケット内の別々のフォルダに保存します。
クエリなど実行結果の保管場所: s3://<バケット>/athena/query/
Athenaによるデータ分析の準備
Athenaを用いたアドホック データの取り込み、データ形式の変換、パーティショニング、アクセス用テーブルについて解説し、それぞれのテーブルの実行時間とスキャンデータ量を比較します。
データ取込みテーブル作成
本ステップでは、S3に保存されたデータ(今回はCSVファイルを使用)を読み込むための外部テーブルを作成します。データ構造をAthenaに伝え、データを読み込めるように準備します。
CREATE EXTERNAL TABLE IF NOT EXISTS csv (
中略
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "`",
"escapeChar" = "\\"
)
LOCATION 's3://<bucket>/athena/orgdata/'
TBLPROPERTIES ('skip.header.line.count' = '1');
データ変換とパーティショニング
本ステップでは、各種変換処理を行い、新しいテーブルを作成します。例えば、Unixタイムスタンプは使いやすいデータに変換してカラムを追加します。テキスト形式からParquet形式への変換は、列指向フォーマットによる特定カラムへのアクセス高速化、効率的な圧縮によるスキャンデータ量の削減、そして各種データセットへの適合性から、クエリパフォーマンスが向上します。特に、SNAPPY圧縮は高速な圧縮と解凍により、クエリ実行速度向上に効果的です。また適切なパーティショニングにより、クエリ対象のデータが絞り込まれ、スキャンデータ量の削減によるパフォーマンス向上とコスト削減を実現します。
CREATE TABLE enhanced_csv_data
WITH (
format = 'PARQUET',
parquet_compression = 'SNAPPY',
external_location='s3://<bucket>/athena/parquet/',
partitioned_by = ARRAY['year', 'month', 'day']
)
AS SELECT *,
CAST(date_format(from_unixtime(CAST(timestamp AS BIGINT) / 1000), '%Y%m%d%H%i%s') AS VARCHAR(14)) AS datetime_ymdhhmmss,
year(from_unixtime(CAST(timestamp AS BIGINT) / 1000)) AS year,
month(from_unixtime(CAST(timestamp AS BIGINT) / 1000)) AS month,
day(from_unixtime(CAST(timestamp AS BIGINT) / 1000)) AS day
FROM csv;
アクセス用テーブル作成
前ステップで作成したパーティション付きデータへアクセスするための外部テーブルを作成します。テーブル名やカラム名などのメタデータ定義、LOCATION句によるデータ指定、パーティション情報の取得、tblpropertiesによるデータフォーマットと圧縮形式の指定といった役割を担います。
CREATE EXTERNAL TABLE IF NOT EXISTS parquet_csv_data (
中略
)
STORED AS PARQUET
LOCATION 's3://<bucket>/athena/parquet/'
tblproperties ("parquet.compression"="SNAPPY");
各テーブルの実行時間とスキャンデータ量の比較
3つのテーブルに対して同一のクエリを実行して、実行時間とスキャンデータ量を比較すると以下となりました。
| 対象テーブル | 実行時間 | スキャンデータ量 |
| CSVデータ取込みテーブル | 6.29sec | 127.96MB |
| データ変換テーブル | 6.71sec | 12.69MB |
| アクセス用テーブル | 3.84sec | 9.99MB |
Grafanaによるデータ可視化
本章では、AthenaデータソースをGrafanaに設定し、Grafana Exploreでクエリを実行、ダッシュボードを作成する方法を紹介します。
アクセス制御
GrafanaからAthenaのデータ取得とS3へのログ書き込みについて、以下を参考にIAM 権限の付与を行います。
GrafanaにAthenaデータソース設定
データ転送を行うGrafana ワークスペースの[データソース]タブでAthena のデータソースを有効化し、アタッチ済みとなる事を確認します。
次にGrafanaのコンソールにログインし、データソースにAthenaが利用可能となっているか確認します。未利用の場合はinstall nowをクリックします。
Amazon Athenaに関するプラグイン説明画面が表示されるので、右上よりインストールします。
プラグインのインストールが完了するとAdd new data sourceと表示されるのでクリックします。
ここでは主にAthena Detailsの設定をします。
Grafana Exploreにてクエリ実行
Athenaとの接続が完了するとData Sourcesに新たに追加されるので、Exploreをクリックします。
Grafana Dashboardの作成
ここではGrafanaのデータソースとしてAthenaからの応答が正しい事をテストクエリを実行して確認します。特に問題なければ画面右上の+Addを展開してAdd to dashboardをクリックします。
次にOpen dashboard、Add visualizationをクリックするとダッシュボードのエディット画面が表示されるので、可視化を行いたいクエリを実行します。この時点では期待する結果とならない場合もありますので、Open visualization suggestionsからお好みの視覚化オプションを選択します。
視覚化オプションは多数あり、ダッシュボード上に異なるパネルを作成する事ができます。
さいごに
Amazon S3、Amazon Athena、Amazon Managed Grafanaを使ったデータ分析ワークフローを3つのステップで解説しました。本記事が皆様のデータ活用にお役立ていただければ幸いです。









