RubyでBigQuery Emulatorを使う
そもそもBigQuery Emulatorについて
BigQuery EmulatorはGoogleBigQueryのモックサービスのようなもので、
これまで、BigQueryを利用した分析クエリの実装など、ユニットテストの実装がコストが高く、
面倒なところだったので、ユニットテストは作らずレビューのみでカバーしていたりしたのですが、これは便利そうです。今のところ他にも決定版はなさそうで、現状これ一択かなと。
ですが、Rubyのクライアントで使ってみるまでに少し対応が必要だったので、動かすまでの方法を残しておく。
ここでは、BigQueryEmulatorの基本的な使い方だったりは他の記事でもそれなりに情報があるので、
それをどうやってRubyのクライアントで使うか?の説明にとどめます。
1. queryが動かないので、ForkされたBigQuery Emulatorを利用する
2023/09/18 現在、issueにもあるのですが、情報が足りないため、RubyのClientではqueryメソッドを実行すると、情報は取得できているものの、クライアントがレスポンスを組み立てる際に、エラーになるようです。
現状、このコードはMergeされていないので、Forkされた実装を利用するしかないです。
Docker Composeで動かしたかったので、Forkされたコードをビルドしてレジストリにプッシュして対応しました。
2. クライアントの設定を行う
クライアントには gem 'google-cloud-bigquery'
を利用しています。
クライアントの設定を下記で行ってください。
特筆するべき点は、config.endpointで0.0.0.0:9050を設定していて、
Docker Composeで立ち上げているBigQuery Emulatorを参照するようにしています。
ちゃんと/
まで入力しないとエラーになるので気をつけてください。
def initialize
Google::Cloud::Bigquery.configure do |config|
config.project_id = "dummy_project_name"
config.credentials = Rails.root.join("config/service_account.json")
config.endpoint = "http://0.0.0.0:9050/"
end
@bigquery = Google::Cloud::Bigquery.new
end
以上の設定を行うと、BigQuery Emulatorを接続先としてGoogle::Cloud::Bigqueryからおこなうようにできるようになりました。
まとめ
このエミュレーターがどこまで利用できるかは現在も検証中ですが、最新鋭の機能を使ったりしなければ問題なく使えそうな感じがしました。
エミュレーターを使ってRSpecやMiniTest上でBigQueryのクエリを利用した実装のユニットテストを書いたりできるので、RubyとBigQueryを組み合わせたプロダクトの開発や作りたいツールがあるので活用できればと考えています。
Discussion
まとめていただきありがとうございます
google-cloud-ruby は9月4日リリースの最新版から環境変数
BIGQUERY_EMULATOR_HOST
がサポートされるようになりましたdestination table の件は私も色々コードを見たりしていて、修正すると動くようになるのは確かなんですが、なぜそのような修正が必要なのかをいまいち理解できてなくて、それがマージの障害になっている感じです
良きツール作ってくださり、ほんとありがたいです!!
補足についてもありがたいです。後ほど追記させていただきます!
コードのMergeについてもそうですよね。。
私も少しコードを読んだりしましたが、Rubyのクライアントだけで、関連性はすぐにはわからないですよね。。