BigQueryとAmazon Athenaを軽く比べてみたよ


はじめに

この記事は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に出力されているので、注意しないとクラウド破産する