dbt Semantic Layerを作成するまでにあらゆるエラーを踏んだ話

dbt Semantic Layerを作成するまでにあらゆるエラーを踏んだ話

2025.10.01

こんにちは、dbt勉強中のikumiです。

dbtを勉強中ですが、dbt Semantic Layerを作りたい!!と思い立ち、初学者ながら取り組んでみました。
しかし色々なエラーを踏んだので、踏んだエラーと解消方法について備忘録的にメモしていきます。なお、取りあえず解消することを目指したので、なんでこれで解決するんだろう・・・。というのは今後の宿題ということにしてます。(勉強頑張ります!)

ちなみに、私のdbt学習状況は、Quickstart for dbt and Snowflakeを一周した程度で、初心者中の初心者となります。

環境

  • プラン:dbt clout enterprise
  • 接続先:snowflake

また、dbtのプロジェクトはQuickstartで作成したプロジェクトをそのまま使用しました。

dbt Semantic Layerの作成方法

dbt Semantic Layerの作成方法については、以下ブログを参考にしましたので、本記事では詳しい作成ステップについて解説しません。
https://dev.classmethod.jp/articles/dbt-semantic-layer-ga-with-metricflow/

上記のブログにも出てくる通り、コードについては以下のリポジトリに記載のあるコードをそのままコピペして手順を進めました。(これのせいで出てきたエラーもありますが・・)
https://github.com/dbt-labs/jaffle-sl-template/tree/main/models

それでは、出たエラーについて順番に記載していきます。

エラー1:Modelの参照エラー

一つ目に出たエラーは、「emantic_model.jaffle_shop.orders」が見つからないよ! というエラーです。

			
			07:55:43 Encountered an error:
Compilation Error
  Semantic_Model 'semantic_model.jaffle_shop.orders' (models/semantic_tableau.yml) depends on a node named 'orders' which was not found

		
  • 今回、私はQuickstartの手順でそもそもordersというモデルを作成していないので、当然エラーになります。
  • 前述のリポジトリで参考にしたコードでは、semantic_modelsの参照モデルがordersになっていたので、QuickStartで作成した、存在するcustomersに変更することでエラーを解消しました。
			
			semantic_models:
    ## model: ref('orders')  →エラーがでた時のコード
    model: ref('customers') ## 修正

		

エラー2:Time Spineの設定エラー

2つ目は、セマンティックモデル作るなら、Time Spineを定義して! というエラー

			
			07:58:58 Encountered an error:
Parsing Error
  The semantic layer requires a time spine model with granularity DAY or smaller in the project, but none was found. Guidance on creating this model can be found on our docs site (https://docs.getdbt.com/docs/build/metricflow-time-spine).

		
  • QuickStartを1回やったくらいなので、正直Time Spine?なんだそれ?状態です。
  • Time Spineとは何か調べてもまだ理解しきれていないのですが、、まずは参考のリポジトリ通りに設定してみようと思い、以下のファイルを追加しました
			
			metricflow_time_spine.sql ##作成ファイル名

with 

days as (

    --for BQ adapters use "DATE('01/01/2000','mm/dd/yyyy')"
    {{ dbt_date.get_base_dates(n_dateparts=365*10, datepart="day") }}

),

cast_to_date as (

    select 
        cast(date_day as date) as date_day,
        date_trunc('quarter', date_day) as almost_fiscal_quarter

    from days

)

select * from cast_to_date

		

エラー3:パッケージがインストールされていない

3つ目は、dbt_dateパッケージがインストールされてない! というエラーです

			
			08:19:25   Compilation Error in model metricflow_time_spine (models/metricflow_time_spine.sql)
  'dbt_date' is undefined. This can happen when calling a macro that does not exist. Check for typos and/or install package dependencies with "dbt deps".

		
  • プレーンなプロジェクトでしたので、パッケージも入っていません。(そりゃそうですよね)
  • 以下コードを記述したファイルを追加し、dbt depsコマンドでパッケージを反映させました
			
			package.yml ##ファイル名

packages:
  - name: dbt_date
    package: calogica/dbt_date
    version: 0.10.1

		

エラー4:dbt_dateの変数エラー

4つ目は、dbt_dateを実行するためのTimezoneが設定されていない !というエラー

			
			08:26:23 Failure in model metricflow_time_spine (models/metricflow_time_spine.sql)
08:26:23   Compilation Error in model metricflow_time_spine (models/metricflow_time_spine.sql)
  Required var 'dbt_date:time_zone' not found in config:
  Vars supplied to metricflow_time_spine = {}

		
  • どうやらdbt_dateにはTimezoneを設定する必要があるそうです
  • 設定ファイルに以下のコードを追記しました
			
			vars:
  dbt_date:time_zone: 'Asia/Tokyo'

		

こちらで私が遭遇したエラーは以上で、すべて反映させた後、無事dbt buildコマンドを成功させることができました🎉

さいごに

初めてのツールを触るときはエラーばかりで心も折れることが多いかと思いますので、本ブログがどなたかの参考になれば幸いです!

この記事をシェアする

FacebookHatena blogX

関連記事

dbt Semantic Layerを作成するまでにあらゆるエラーを踏んだ話 | DevelopersIO