dbt CoreからDatabricksにOAuthで接続してみた
データ事業本部のueharaです。
今回は、dbt CoreからDatabricksにOAuthで接続してみたいと思います。
Databricks側の設定
まずはDatabricks側から設定します。
Databricksの『Settings』ページから『Identity and access』の『Service principals』にアクセスします。

開いた画面で『Add service principal』を選択します。

その後『Add new』を入力し、任意のサービスプリンシパル名を設定します。
作成したサービスプリンシパルの『Secrets』タブから『Generate secret』を選択します。

『Lifetime (days)』に任意の値を設定して作成すると、以下のように Secret と Client ID が生成されるのでどこかにメモしておきます。

※Secretは再度表示することはできないのでご注意下さい。
これでDatabricks側の設定は完了です。
dbt Coreの設定
次にdbt Coreです。
dbt , dbt-databricks のインストールが済んでいない場合は pip を利用して以下でインストール可能です。
$ pip install dbt-core dbt-databricks
dbtの実行環境が用意できたら、プロジェクトディレクトリを作成します。( profiles.yml は後で手動で作成するためスキップします)
$ dbt init my_dbt_demo --skip-profile-setup
作成できたら、プロジェクトディレクトリ(上記であれば my_dbt_demo)の直下に以下の profiles.yml を作成します。
my_dbt_demo:
outputs:
dev:
catalog: workspace
host: <YOUR-DATABRICKS-HOST>
http_path: <YOUR-HTTP-PATH>
schema: default
threads: 1
type: databricks
auth_type: oauth
client_id: "{{ env_var('DATABRICKS_CLIENT_ID') }}"
client_secret: "{{ env_var('DATABRICKS_CLIENT_SECRET') }}"
target: dev
<YOUR-DATABRICKS-HOST> にはご自身のDatabricksのホスト名(例: dbc-xxxxxxxx-xxxx.cloud.databricks.com )を入力し、 <YOUR-HTTP-PATH> には SQL WarehouseやクラスターのHTTP path(例: /sql/1.0/warehouses/xxxxxxxxxxxxxxxx )を入力して下さい。
auth_type は oauth にして、 client_id と client_secret はそれぞれ環境変数から取得します。
環境変数の DATABRICKS_CLIENT_ID と DATABRICKS_CLIENT_SECRET は、それぞれ先程Databricks上で払い出したClient IDとSecretを設定して下さい。
接続してみた
これでいよいよ準備ができたので、以下コマンドで接続を確認してみます。
$ dbt debug
コマンド実行後、以下のように表示されたら接続が成功しています。

せっかくなのでdbtも実行してみます。
プロジェクトディレクトリの seeds 配下に、 dbtで始めるデータパイプライン構築〜入門から実践〜で公開されている raw_customers.csv を格納します。
id,first_name,last_name
1,Yasuko,Kataoka
2,Chizuru,Ozaki
3,Kouhei,Iwasawa
4,Kae,Utsunomiya
その後、以下の seed コマンドを実行して、Databricksにcsvファイルのデータを取り込みます。
$ dbt seed
実行が完了すると、以下のようにDatabricks上で raw_customers テーブルが作成できていることが確認できました。

最後に
今回は、dbt CoreからDatabricksにOAuthで接続してみました。
参考になりましたら幸いです。








