【dbt Docs】Guides - Debugging schema names
Debugging schema names (スキーマ名のデバッグ)
モデルを構成する際に、予期しないスキーマにビルドされることがある。その際のデバッグをする手順を記載する。
Search for a macro named generate_schema_name
macros/ディレクトリに、generate_schama_nameがあるかないかをまず確認する。
I do not have a macro named generate_schema_name in my project(プロジェクトに generate_schama_nameがない場合)
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ユーザーが同じスキーマに書き込むことによって誤って互いの作業を上書きしないように設計されていることに注意してください。
I have a generate_schema_name macro in my project that calls another macro( macros/generate_schema_nameがある場合)
{% 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