Athenaをbqコマンドライクに操作できるgem aqを作った

この記事はAmazon Web Services Advent Calendar 2017の16日目の記事です。

AWS AthenaをBigQueryのbqコマンドライクに使えるaq というコマンドラインツールを作りました。

github.com

AthenaをCLIで操作しようとすると踏まないといけない手順*1が多かったので、もっとシンプルに使えるようにするためです。

サブコマンドは、BigQueryのbqに慣れているので、それと同じ感覚で使えるようにしました。

またBigQueryのスキーマファイルをそのままAthenaでも使えるようにしているので、スキーマの2重管理を避けることもできます。

まだ必要最小限な機能しかないので、Issueでリクエストしてもらった機能には順次対応していこうかなと思っています。もちろんPullRequestも歓迎です。

インストール

gemでインストールできます。

$ gem install aq

コマンド

Athenaの仕様としてクエリの実行にはクエリの結果を保存するバケットの指定が必要です。 バケットは --bucket オプションで指定するか、環境変数 AQ_DEFAULT_BUCKET で指定してください。

Webコンソールから実行したときは aws-athena-query-results-<アカウントID>-<リージョン名> となるようなので、それに合わせるのが良いかもしれません。

help

コマンド一覧やコマンドの引数・オプション等を表示します。

$ aq help
$ aq help [COMMAND]

ls

データベースまたはテーブルの一覧を取得します。

# データベースの一覧
$ aq ls
# テーブルの一覧
$ aq ls [my_database_name]

head

テーブルの先頭100レコードを表示します。

$ aq head [my_db.my_table]

-n オプションで件数を変更できます。

mk

データベースを作成します。

bqコマンドではスキーマを指定しないテーブルの作成もできますが、Athenaはスキーマを指定しないテーブルは作成できないようだったので、テーブル作成はloadで行うようにしています。

$ aq mk [my_database_name]

load

テーブルの作成とデータのロードを行います。

今のところjsonl形式のファイルにしか対応していません。

schema.jsonは BigQueryのLegacySQLのスキーマファイルと同じ形式です。

$ aq load [my_db.my_table] s3://[my_bucket]/[my_object_key]/ [test/resource/schema.json] --partitioning [dt:string]

rm

データベースまたはテーブルを削除します。

# データベースの削除
$ aq rm [my_db]
# テーブルの削除
$ aq rm [my_db.my_table]

--force オプションをつけると確認が省略されます。

query

指定したクエリを実行します。

$ aq query 'SELECT * FROM "test"."test_logs" limit 10;'

*1:クラスメソッドさんのブログ記事 新機能 AWSCLIから Amazon Athena のクエリを実行する | Developers.IO を参照