【dbt Docs】Guides - Debugging schema names
Debugging schema names (スキーマ名のデバッグ)
モデルを構成する際に、予期しないスキーマにビルドされることがある。その際のデバッグをする手順を記載する。
generate_schema_name
Search for a macro named macros/
ディレクトリに、generate_schama_name
があるかないかをまず確認する。
generate_schama_name
がない場合)
I do not have a macro named generate_schema_name in my project(プロジェクトに dbtデフォルトのスキーマ名生成ロジックが適用されている。そのスキーマは
{% macro generate_schema_name(custom_schema_name, node) -%}
{%- set default_schema = target.schema -%}
{%- if custom_schema_name is none -%}
{{ default_schema }}
{%- else -%}
{{ default_schema }}_{{ custom_schema_name | trim }}
{%- endif -%}
{%- endmacro %}
このロジックは、2人のdbtユーザーが同じスキーマに書き込むことによって誤って互いの作業を上書きしないように設計されていることに注意してください。
macros/generate_schema_name
がある場合)
I have a generate_schema_name macro in my project that calls another macro( {% macro generate_schema_name(custom_schema_name, node) -%}
{{ generate_schema_name_for_env(custom_schema_name, node) }}
{%- endmacro %}
とある場合、デフォルトのスキーマ名生成ではなく、generate_schema_name_for_env
で上書きをしている。
generate_schema_name_for_env
は、dbtグローバルにあるマクロ。target=prod
の場合には、<custome_schema_name>
になるが、それ以外のtarget
の場合は、<default_schema>_<custome_schema_name>
になる。
I have a generate_schema_name macro with custom logic
generate_schame_name
を作った人に、どういう意図でつくったのかを尋ねてみる。
Confirm your schema config
models/
の.sql
ファイル内の{{ config() }}
を確認する。
もしくは dbt_project.yml
を確認する
どちらの場合も、dbtはこの値をgenerate_schema_nameマクロのcustom_schema_nameパラメータとして渡します。
Confirm your target values
generate_schema_nameマクロのほとんどは、ターゲット変数からのロジックを組み込んでいます。(大体の場合、target.schama
か target.name
を使ってる)
Put the two together
ロジックを読み直す
Adjust as necessary(必要とあれば修正する)
注意点としては、複数人で開発している場合、複数のモデルで開発している場合に、上書きをしてしまわないか?を確認。上書きをしない場合は <target.shema>_<custome_schema_name>
みたいに、連結して予期しない上書きにならないようにする。
Discussion