こんにちは、寺岡です。
この記事は TECHSCORE Advent Calendar 2016 の6日目の記事です。
今年もAWS最大のイベント、 re:Invent で沢山の新サービスが紹介されました。
今回は、その中で一番気になったAmazon Athena(アテナ)をちょっとだけさわってみた感想を書きたいと思います。
Amazon Athena とは?
- クエリ課金で完全マネージドのサーバレス超高速クエリエンジン
- S3保存してあるファイルに対してSQLを実行できる
- CSVやJSON、Parquet、Apache WebLogsなど様々なファイルフォーマットに対応
一言で言ってしまえば、AWS版 Google BigQuery のようなサービスです。
まだ東京リージョンでは利用できませんが、バージニア北部とオレゴンリージョンで利用することができます。
サーバレスでフルマネージド
Athenaの特徴は、なんといってもサーバレスでフルマネージドであることでしょう。
今までAWSのビッグデータ処理サービスはEMRやRedshiftなどがありましたが、インスタンス専有型のため運用の手間やコストは決して低いものではありませんでした。
S3に保存してあるファイルに対してのSQLクエリには、EMR上でHive、Presto、Sparkなどを利用するケースが一般的でした。
しかし、EMRはブートストラップに数十分の時間がかかるため、使いたいときにすぐクエリ実行、というわけにはいきません。もちろんEMRを常時起動しておけば良いのですが、その分コストがかかってしまいます。
Athenaであれば、クエリ単位での課金となるため、好きなタイミングでクエリを実行し、使った分だけ料金を支払えば良いということになります。
Athenaの内部では Presto が利用されており、クエリフォーマットなどもほとんどPrestoそのままなため、EMRでPrestoを利用していたユーザは比較的に容易にAthenaへ移行できそうです。
テーブル定義とクエリ実行
Athenaを使ってクエリを実行するためには、あらかじめテーブルやカラムの定義を設定しておく必要があります。
テーブル定義は管理画面のCatalogManagerで設定するか、SQLのCREATE EXTERNAL TABLE 文を実行することにより設定できます。
対応しているファイルフォーマットは以下となります。
- Apache WebLogs
- CSV
- TSV
- TEXT(Custom Delimiter)
- Parquet
- ORC
- JSON
CREATE EXTERNAL TABLE の記述はHiveそのままで、フォーマットの定義はSerDe指定となります。
例として、サンプルのELBログテーブルのCREATE TABLE文は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
CREATE EXTERNAL TABLE IF NOT EXISTS elb_logs_raw_native ( request_timestamp string, elb_name string, request_ip string, request_port int, backend_ip string, backend_port int, request_processing_time double, backend_processing_time double, client_response_time double, elb_response_code string, backend_response_code string, received_bytes bigint, sent_bytes bigint, request_verb string, url string, protocol string, user_agent string, ssl_cipher string, ssl_protocol string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1','input.regex' = '([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*):([0-9]*) ([.0-9]*) ([.0-9]*) ([.0-9]*) (-|[0-9]*) (-|[0-9]*) ([-0-9]*) ([-0-9]*) \\\"([^ ]*) ([^ ]*) (- |[^ ]*)\\\" (\"[^\"]*\") ([A-Z0-9-]+) ([A-Za-z0-9.-]*)$' ) LOCATION 's3://athena-examples/elb/raw/'; |
管理画面のCatalogManagerでの管理画面でのテーブル定義はちょっと面倒だったので、Hiveに慣れている場合はCREATE EXTERNAL TABLE 文を書いてしまったほうが良いかもしれません。
スキーマディスカバリなど定義作成を簡略化できる機能があれば楽になるかと思うので、この辺りは今後の改善に期待したいところです。
AthenaはANSI SQLに対応しているため、クエリの実行に関しては特に戸惑うところはありませんでした。
SQLを書いて実行するだけ画面に結果が表示され、クエリ保存や、クエリ履歴の閲覧、結果のCSVダウンロードなども可能です。
SQLの細かな仕様についてはPrestoのSQLを参考にすればよいでしょう。
JDBC接続
JDBC接続によるリモートからのSQL実行にもしっかり対応されており、認証には他のAPIと同じように、IAMのCredentialを利用することができます。
接続方法の詳細は下記ページに記載されており、JDBCドライバのリンクもこちらにあります。
https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html
JDBCさえあれば様々なツールと繋がる!これで勝つる!と思いながら手元のApache Sparkからアクセスしてみたのですが、Athena JDBC DriverはPreparedStatementに対応しておらず、残念ながらエラーになってしまいました。
BIツールなどとの連携を検討する場合、このあたりについては考慮する必要がありそうですね。
まとめ
API GatewayやLambdaなどのサーバレスアーキテクチャブームを巻きを越したAWSですが、機械学習やビッグデータ処理ではBigQueryの圧倒的な処理能力を擁するGoogleにやや分があるように感じていました。
今年のre:Invent ではAmazon Lex、Amazon Polly、Amazon Rekognition という機械学習3兄弟も発表されたことですし、それらも絡めてAmazon Athenaがどんな成長を遂げていくのか楽しみにしたいと思います。