はじめに
この記事はGoogle Cloud Platform(1) Advent Calendar 20167日目の記事です。
まだ投稿がなかったのと、ちょうど社内のQiitaTeamにBigQueryとAmazon Athenaの簡単な比較ネタを投稿していたので、それを載せます
やったこと
- TreasureDataからBigQuery出力しているデータがあったので同じものをS3に出力
- BigQuery, Athenaにクエリなげてパフォーマンスを比較
Athenaデータ準備
データベース作成
CREATE DATABASE test;
テーブル作成
データはweblogをちょっとサマリしたものです。
CREATE EXTERNAL TABLE IF NOT EXISTS test.weblog (
summarize_date string,
user_id string,
host string,
url string,
os string,
browser string,
ip_address string,
logs bigint
)
PARTITIONED BY ( dt string )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = ' ',
'field.delim' = ' '
) LOCATION 's3://path/to/weblog/';
- PARTITIONは日付を入れるので、
dt
という名前で設定
PARTITIONINGを設定
11/1,11/2の2日分を入れたので2つ設定
ALTER TABLE test.weblog ADD
PARTITION (dt='20161101') LOCATION 's3://path/to/weblog/20161101/'
PARTITION (dt='20161102') LOCATION 's3://path/to/weblog/20161102/';
確認
show partitions test.weblog;
結果。できてますね。
dt=20161101
dt=20161102
クエリをなげてみる
カウント
select
count(1)
from test.weblog;
-- (Run time: 4.12 seconds, Data scanned: 121.19MB) result: 2541225
パーティションが効くかどうか。
レコード数も減ったし処理データ量も減った
select
count(1)
from test.weblog
where dt = '20161101';
-- (Run time: 4.33 seconds, Data scanned: 60.99MB) result: 1277304
BigQueryとAWS Athenaを比較
ホスト名別のUU数
クエリ
select
host,
count(distinct user_id)
from weblog
group by
host
ORDER BY
host
結果
- BQ: Query complete (2.8s elapsed, 107 MB processed)
- Athena: (Run time: 6.19 seconds, Data scanned: 121.19MB)
URL別ログ数 Top1000
SQLは割愛。結果は以下の通りでした。
- BQ: Query complete (3.9s elapsed, 152 MB processed)
- Athena: (Run time: 5.86 seconds, Data scanned: 121.19MB)
すごく簡単な検証かつ、データ量もそこまで多くありませんでしたが、BigQueryのほうが速いという結果になりました。
所感
- コストをまじめに比較していないのだが、実際のところどうなんだろうか
- UIがかなり酷似している
- Athenaの場合、クエリ結果がキャッシュされない、かつクエリの結果がS3に出力されているので、注意しないとクラウド破産する