AWS AthenaとGCP BigQueryにデータぶっこんで比べてみた ～BIツールも添えて～

# はじめに

今年もお世話になりました。
[gloops Advent Calendar 2016](http://qiita.com/advent-calendar/2016/gloops)の
15日目担当インフラエンジニアの河村です

14日目は @s_yamada さんの
[家系ラーメンで学ぶ新規ゲームの企画書](http://qiita.com/s_yamada/items/e273903d96c3a8ce0a57)
でした

ラーメンが食べたくなる投稿ですね
九州出身ってこともあり基本とんこつラーメンしか食べません:ramen:
飲みのあとの締めのラーメンはやめました！ :beer: -> :ramen:  :no_good:

# 今回の目的

re:iventでAWSの新機能がわんさか発表されましたが
リリース直後はパツパツで触れてなかったので
少し触ってみました

対象のサービスは以下の2つ

* Amazon Athena（以下、AWS Athena）

*  Google BigQuery（以下、GCP BigQuery）

## AWS Athena

「AWS re:invent 2016」で発表された
新サービスです

[Amazon Athena](https://aws.amazon.com/jp/athena/)

S3においているデータに対して
標準SQLを用いてクエリを発行できるサービスです

安価で大量のデータを保存できるS3対して
ユーザーがほしいデータを分析出来るサービスですね
しかも超高速に！

タイトルにも書いていますが、
GCP BigQueryとほぼ同じサービスですね

## GCP BigQuery

説明はしないですが、
gloopsでもがしがし使ってます

[株式会社 gloops の導入事例](https://cloudplatform-jp.googleblog.com/2016/08/gloops-google-bigquery-1100.html)

紹介もしてもらいました！
Googleの方に
笑顔がいいねと褒められました！！

# AWS Athena 使ってみる

## S3へログを

弊社の1つのタイトルのnginx accesslogをS3にあげあげしました

![s3_01.png](https://qiita-image-store.s3.amazonaws.com/0/66113/69f11cc4-67cf-912f-e639-1d4e300b73e0.png)

## AWS Athenaの設定

記事書いてる2016/12/14時点では、
AWS Athenaは、オレゴン・バージニア リージョンのみ利用可能です
S3に関しては、東京リージョンに置いていてもAWS Athenaから見てくれます

* AWS マネージドコンソール
* Query Editor
* Add table

![athena00.png](https://qiita-image-store.s3.amazonaws.com/0/66113/3c1e8442-7d79-2050-78cf-1abea08b1c09.png)

* Database: Create new database
* Databaseの名前をつける
* tableの名前をつける
* Location of Input Data Set -> s3://バケット名/ログ置き場/

![athena01.png](https://qiita-image-store.s3.amazonaws.com/0/66113/e6ac9fc1-b716-aa06-f0fb-c4a7182d89e6.png)

* データのフォーマット選択する（今回はlog）

![athena02.png](https://qiita-image-store.s3.amazonaws.com/0/66113/d18fcdec-b81b-8aa0-1f42-ae902d30c595.png)

* Column追加してあげる

![athena03.png](https://qiita-image-store.s3.amazonaws.com/0/66113/191ab599-8877-e1c2-055d-19d35c022add.png)

* 作成完了

CREATEのクエリ実行され正常に完了すればOK

## 実際にクエリ実行してみる

※追記
初回投稿時は
Athena:オレゴン - S3:東京
のみの検証でしたが
以下を追加しました
Athena:オレゴン - S3:オレゴン
Athena:オレゴン - S3:オレゴン（ファイル圧縮）

また、以下の数値は数回クエリ実行した中での
平均的な数値を代表して記載しています

### Athena:オレゴン - S3:東京

* AWS Athenaで、2016/12/13のアクセスのカウントは・・・

![athena04.png](https://qiita-image-store.s3.amazonaws.com/0/66113/5133c8fe-e8e8-e7a3-1708-e99afd5f58f1.png)

約3,350万件で

**17.64s**

スキャンデータ：12.96GB

* AWS Athenaで、分毎にまとめてみると・・・

![athena05.png](https://qiita-image-store.s3.amazonaws.com/0/66113/d3139ca8-fc2a-81fc-719e-21fa97529d12.png)

**19.98s**

スキャンデータ：12.96GB

### Athena:オレゴン - S3:オレゴン

* 2016/12/13のアクセスのカウントは・・・

![athena11.png](https://qiita-image-store.s3.amazonaws.com/0/66113/75f1ab75-19ef-de79-a2a5-c738f11456aa.png)

同じく、約3,350万件で

**6.16s**

スキャンデータ：12.96GB

* 分毎にまとめてみると・・・

![athena12.png](https://qiita-image-store.s3.amazonaws.com/0/66113/fbfb9d70-1f6e-0b13-35de-3ecc49148069.png)

**7.65s**

スキャンデータ：12.96GB

### Athena:オレゴン - S3:オレゴン（ファイル圧縮）

* 2016/12/13のアクセスのカウントは・・・

![athena13.png](https://qiita-image-store.s3.amazonaws.com/0/66113/951f1334-977f-a91b-9ca1-886952f6efa8.png)

同じく、約3,350万件で

**9.87s**

スキャンデータ：1.69GB

* 分毎にまとめてみると・・・

![athena14.png](https://qiita-image-store.s3.amazonaws.com/0/66113/1408b55a-bb13-7902-cecd-09dcb05b5329.png)

**10.1s**

スキャンデータ：1.69GB

# GCP BigQueryはどう？

## 実際にクエリ実行してみる

* GCP BigQueryで、2016/12/13のアクセスのカウントは・・・

![bq01.png](https://qiita-image-store.s3.amazonaws.com/0/66113/efd43694-27e9-6b02-fa5e-cfe4d4ebe9c8.png)

約3,360万件で

**1.9s**

* GCP BigQueryで、分毎にまとめてみると・・・

![bq02.png](https://qiita-image-store.s3.amazonaws.com/0/66113/0814cc50-37e6-974d-ea78-f605982b301f.png)

257MBで

**2.4s**

## 比較結果

AWS Athenaは、アクセスログファイル
GCP BigQueryは、insertしたデータ
なので、スキャンするデータに大きな差がでた

|件数||
|:--------|:-------:|:-------:|
|AWS Athena|33,522,222|
|GCP BigQuery|33,622,636|


|秒数|ただのCOUNT|毎分カウント|
|:--------|:-------:|:-------:|
|AWS Athena:オレゴン-東京|17.64s|19.98s|
|AWS Athena:オレゴン-オレゴン|6.16.64s|7.65s|
|AWS Athena:オレゴン-オレゴン（圧縮）|9.87s|10.1s|
|GCP BigQuery|1.9s|2.4s|

※今回はAWS Athenaに関しては、
S3：東京、AWS Athena：オレゴンで実施したため
時間に差分がでているようです。
S3を同リージョンにして、
再検証予定です。

※※検証追記しました

|スキャンデータ|ただのCOUNT|毎分カウント|
|:--------|:-------:|:-------:|
|AWS Athena:通常ファイル|12.96GB|12.96GB|
|AWS Athena:圧縮ファイル|1.96GB|1.96GB|
|GCP BigQuery|-|257MB|


データを取得することだけ考えると
BigQueryの方がクエリ料金はやすくなりそうだ

S3のファイルの置き方が、
環境/MM/DD/HH/access.logにしているのでそのへんの影響もあるかも

コスト面で大きなことは
BigQueryは、insert料金は別途かかってます

※追記
データ転送・ストレージ等の含めた全体のコスト自体は出せていません
AWS AthenaとS3のリージョン合わせることによってrunTimeは、1/2～1/3になります
AWS Athenaは、データ圧縮すれば、単純にクエリコストが1/10になります

# BIツール

## AWS QuickSight

ちょっと間に合いませんでした

別機会でやろうと思います:bow:

## redash 

gloopsでは、GCP BigQueryのaccesslogのリアルタイム閲覧には
[redash](https://redash.io/)
使ってます

クエリ発行させすぎないように以下の制限かけています

* 自動更新しない
* 直近1hのデータのみ取得する

## Google Data Studio

現在ベータ版です
[Google Data Studio](https://datastudio.google.com)

使ってみた結果、
リアルタイムには向いていなく
キャンペーン期間中の振り返りレポートみたいな
使い方になるんだろうなと思いました


# まとめ

年の瀬ドタバタしてますが、
新機能触れて良かったです

エンジニアや、非エンジニアのみんなが
集めたログを有効活用してくれるよう
来年も頑張りたいと思います:sunglasses:

では、忘年会に行ってきますﾉｼ :beers: