![[小ネタ]dbt Projects on Snowflakeで--varsフラグを用いてユーザーごとの開発用スキーマを動的に指定してみた](https://images.ctfassets.net/ct0aopd36mqt/wp-refcat-img-a996d66d1c5542ed3d2aca1727ff1bdf/dd423733bed58d7856afd195c8b826bc/d5b5e3ac5738bfcd6ab2debaf23e1d70.png)
[小ネタ]dbt Projects on Snowflakeで--varsフラグを用いてユーザーごとの開発用スキーマを動的に指定してみた
さがらです。
dbt Projects on Snowflakeではdbt Coreをベースとしたdbtの開発がSnowflake内で行えますが、チーム開発をしようと考えたときに「環境変数が定義できないWorkspaceの環境で、開発用のスキーマをどうユーザーごとに定義するんだ?」とふと疑問が浮かびました。
この解決策として、--vars
フラグを用いてユーザーごとの開発用スキーマを動的に指定してみたので、その内容をまとめてみます。
--varsフラグを用いてユーザーごとの開発用スキーマを動的に指定
やることは以下の2つだけです!
1つ目として、profiles.yml
で開発用のtargetに対してschema: "{{ var('dev_schema') }}"
と定義します。(変数名はdev_schema
でなくても問題ありません。)
これはリポジトリで管理するファイルのため、一度だけ設定すればOKです。
snowflake_sagara:
target: dev
outputs:
dev:
type: snowflake
role: SAGARA_ADMIN_ROLE
warehouse: SAGARA_DBT_DEV_WH
database: SAGARA_DBT_DEMO_DB
schema: "{{ var('dev_schema') }}"
account: ''
user: ''
2つ目として、各ユーザーのWorkspace内で対象のdbt projectを開いた状態で、再生ボタンの横の設定から、Execute with defaults
のトグルを無効化し、--vars '{"dev_schema": "dbt_ssagara"}'
と入力します。このdbt_ssagara
のところに、ユーザー専用のスキーマ名を入れます。
注意点として、Run
やBuild
など各コマンドごとにこの設定を追加する必要があります。また、こちらの設定はユーザーごとに設定が必要ですのでご注意ください。
この状態でdbtコマンドを実行すると、--vars \'{"dev_schema": "dbt_ssagara"}
というフラグが付いて実行されます。また、出力先のスキーマには指定したdbt_ssagara
が入っていることがわかります。