Open1

【dbt】dbt エラー対応

YuichiYuichi

ephemeralを含むクエリでdbt buildがコケる

環境:TROCCO,BigQuery

  • ローカルではエラーなく実行できる、TROCCOのジョブ実行でエラーになる
  • TROCCOのジョブ実行エラー画面
1 of 1 START sql table model 対象データセット.対象テーブル ............. [RUN]
BigQuery adapter: https://console.cloud.google.com/bigquery?〜〜〜〜〜〜
1 of 1 ERROR creating sql table model 対象データセット.対象テーブル .... [ERROR in 1.75s]
 
Finished running 1 table model in 0 hours 0 minutes and 6.55 seconds (6.55s).

Completed with 1 error and 0 warnings:

Database Error in model 対象データセット__対象テーブル (models/対象データセット/対象データセット__対象テーブル.sql)
Table "__dbt__cte__対象ephemeralクエリ" must be qualified with a dataset (e.g. dataset.table).
compiled Code at target/run/dbt_project/models/対象データセット/対象データセット__対象テーブル.sql

エラー詳細は、https://console.cloud.google.com/bigquery?〜〜〜〜〜〜で確認

~~
with __dbt__cte__データセット名__ephemeralモデル名 as (
~~
FROM __dbt__cte__ephemeralモデル名

マクロでエイリアス変更してたのが影響している。FROMの段階で間違ってデータセット名が削られてしまっていた

{% macro generate_alias_name(custom_alias_name, node) -%}
    {%- if custom_alias_name -%}
        {{ custom_alias_name | trim }}
    {%- else -%}
        {%- set schema_name = node.schema -%}
        {%- set model_name = node.name -%}
        {%- set schema_prefix = schema_name ~ "__" -%}
        {%- if model_name.startswith(schema_prefix) -%}
            {{ model_name[schema_prefix|length:] }}
        {%- else -%}
            {{ model_name }}
        {%- endif -%}
    {%- endif -%}
{%- endmacro %}

対応

  • データセット名__ephemeralモデル名.sqlという命名規則やめて
  • ephemeral__モデル名.sqlに変更、フォルダはデータセット名フォルダに入れとく

なぜ、ローカルでは問題なく実行できるか未確認