IntelliJ系(DataGrip含む)でBigQueryに接続する方法


注意

注: この記事の内容は古いです。IntelliJのバージョンが2021.1以上の人は以下の方法で接続したほうが良いです。


IntelliJ便利ですよね。
JavaのIDEとして有名ですが、その他にも様々な言語のIDEとしても使えますし、さらにはDBクライアントとしても優秀です。
対応しているDBの種類が豊富ですし、機能もリッチです。
ですが、BigQueryにはデフォルトで対応していないので、そこだけちょっと惜しいです。

この記事ではIntelliJ系のIDEからBigQueryに接続する方法を説明します。

参考にした手法とその問題点

IntelliJ BigQuery でGoogle検索すると以下の記事が最初に見つかります。
https://blog.jetbrains.com/datagrip/2018/07/10/using-bigquery-from-intellij-based-ide/

この記事のとおりにやれば、BigQueryに接続することができそうです。
しかし、、、

ほげえええええええ!! サービスアカウント!!!サービスアカウントォォ!!!

そうです。サービスアカウントを使っているんです。
本来、サービスアカウントはサーバー等からGCPのサービスを使う時に用いるものですので、これを個人ユーザーが使うのは問題があります。
例えば、この方法で発行したサービスアカウントをチーム皆で使い回すと、DBアクセスをした個人が不明になってしまい、監査的にマズイことに繋がります。
それならばと、個人ごとに個別のサービスアカウントを発行しようとすると今度は管理する必要のあるアカウントの数が倍になってしまい、アカウントの管理コストも倍になります。

ですので、サービスアカウントではなく、ユーザーアカウントでBigQueryに接続しましょう!!!

手順

application_default_credentials.jsonの生成

最初に以下のコマンドを実行して、ユーザーアカウントで認証をするためのJSONファイルを生成します。

$ gcloud auth application-default login

コマンドを実行すると、ブラウザによってGoogleのログインフォームが開かれるので、ログインを行います。
認証が成功すると、~/.config/gcloud/application_default_credentials.jsonというファイルが生成されます。
ぶっちゃけると、後の手順は上に貼ったJetBrainsのBlog記事と変わらないですが、一応書いておきます。

なお、gcloud auth loginをやったことはあるけど、今回のコマンドとの違いが分からないという方は、以下の神ドキュメントを一読することをオススメします。
(ユーザーアカウント, サービスアカウント)×(Cloud SDK, サーバーアプリケーション)という合計4パターンがあることが分かれば体系的に理解しやすいです。

GCP と OAuth2

BigQuery用のJDBCドライバーの取得

以下のページから、JDBCドライバーをダウンロードします。
ODBCドライバーという似た名前のものが上の方で幅をきかせているので、間違ってダウンロードしないように注意しましょう。

BigQuery の Magnitude Simba ドライバ

ダウンロードしたら、zipファイルを解凍して、適当なディレクトリに配置しておきます。

IntelliJにBigQuery Driverを登録


Driverを選択して、Driver追加画面を開く。

NameをBigQueryにする。
Driver filesにさっきダウンロードしたzipの中にあるjarファイルを全部登録。
Classに com.simba.googlebigquery.jdbc42.Driver を指定。
※ jarファイル登録直後はドロップダウンメニューに表れないので、ちょっと待つ
URL templatesのdefaultに jdbc:bigquery://[{host::https\://www.googleapis.com/bigquery/v2}[:{port::443}]][<;,{:identifier}={:param}>] を指定。


AdvancedタブのOAuthTypeを0に設定。

で、OKを押して、BigQuery Driverを登録。

IntelliJにBigQuery Data Sourceを登録

Data Source → BigQueryを選択して、Data Source追加画面を開く。

NameをBigQueryに指定。


Advancesタブで以下を指定。
OAuthPvKeyPath: application_default_credentials.json の絶対パス
OAuthServiceAccEmail: application_default_credentials.jsonを生成する時にログインで使ったメールアドレス
ProjectId: いつも使っているGCPプロジェクトのID

Generalタブに戻り、Test Connectionで接続確認をしてからOKを押してData Sourceを登録する。

クエリを投げる

Data Source一覧の中にBigQueryがいるので、それを選択し、クエリを書いて実行する。
テーブル名を指定するときには以下の書式で指定する。

`プロジェクトID.データセット名.テーブル名`

Data Source作成の時に指定したProjectId内のテーブルを参照するときには、以下のプロジェクトIDを省略した形式も可。

`データセット名.テーブル名`