この記事はAmazon Web Services Advent Calendar 2017の16日目の記事です。
AWS AthenaをBigQueryのbq
コマンドライクに使えるaq
というコマンドラインツールを作りました。
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 を参照