DatabricksからBigqueryへの接続
Databricks(spark)ではさまざまなConnectorを用意しており、sparkで生成したDataFrameを簡単にBigQueryに書き込む OR BigQueryからtableの読み込みを行うことができます。
手順としては簡単で
- BigQuery Strorage APIの有効化
- Service Accountの作成
- temporary gcs bucketの作成
ということで簡単に行うことができます。
が、Databricks側のClusterに設定するSpark Configが毎回つまづくので備忘録として
残しておきたいと思います。
Spark Configの設定
必要なSpark Configは下記の通りです。
credentials <base64-keys>
spark.hadoop.google.cloud.auth.service.account.enable true
spark.hadoop.fs.gs.auth.service.account.email <client_email>
spark.hadoop.fs.gs.project.id <project_id>
spark.hadoop.fs.gs.auth.service.account.private.key <private_key>
spark.hadoop.fs.gs.auth.service.account.private.key.id <private_key_id>
警告
本来は、secretに入れてSpark Configから読み出すのがpracticeですが、わかりやすさ優先のためsecretを使いません。
ポイントはcredentailsの箇所で、service accountで作成したkeyをDownloadした際に
service account名などが入った"project名-xxxxxxxxxxxxxx.json"があると思うのですが
このファイルに対して
base64 projectname-XXXXXX.json
で、base64コマンドでエンコードして出力された値をcredentialの箇所に貼り付けます。
もう一箇所はprivate keyの箇所で、↑でDownloadしたjsonの中のprivate keyを貼り付けるのですが、そのまま貼り付けると読み込みに失敗するので、ダブルコーテーションを外すとうまく読み込めます。
あとの項目はそのまま貼り付けでOKですが、私はダブルコートありなしで区別するのが面倒なので、ダブルコートは全て外しています。(前にダブルコートをつけた時にうまくいかなかった記憶がありますので、、、
まとめ
Databricksでpipelineを生成してデータマートとしてBigqueryに書き込む構成パターンは結構あるので、設定の参考になれば幸いです。