Open6

【dbt】dbt-metabase

YuichiYuichi

https://github.com/gouline/dbt-metabase

$ dbt-metabase --help
Usage: dbt-metabase [OPTIONS] COMMAND [ARGS]...

Options:
  --version           Show the version and exit.
  --config-path PATH  Path to config.yml file with default values.  [default:
                      ~/.dbt-metabase/config.yml]
  --help              Show this message and exit.

Commands:
  exposures  Extract dbt exposures from Metabase.
  models     Export dbt models to Metabase.

dbt compileを先にしないといけないっぽい

メタベースAPI

すべてのコマンドには、次のいずれかの方法を使用してMetabase APIに対する認証が必要です。

  • APIキー(--metabase-api-key)
    自動化を強く推奨します。ドキュメントを参照してください(Metabase 49 以降)。
  • ユーザー名とパスワード ( --metabase-username/ --metabase-password)
    Metabase の古いバージョンおよび小さいインスタンス用のフォールバック。
dbt-metabase models \
    --manifest-path target/manifest.json \
    --metabase-url https://metabase.example.com \
    --metabase-api-key mb_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= \
    --metabase-database business \
    --include-schemas public
YuichiYuichi

Metabase エクスポージャーを抽出するときにコレクションを除外できません

https://stackoverflow.com/questions/75749491/unable-to-exclude-collections-when-extracting-metabase-exposures

dbt-metabase exposures \
    --dbt_manifest_path ./target/manifest.json \
    --dbt_database {db name} \
    --metabase_host metabase.{myhost}.com \
    --metabase_user {myuser}@{domain}.com \
    --metabase_password {my password} \
    --metabase_database {db name} \
    --output_path ./models/ \
    --output_name metabase_exposures \
    --collection_excludes 'Our analytics' ABI-queries_SiHay_DEPRECATED Dashboards_2-1_DEPRECATED Old_KiWi_DEPRECATED x_Dashboards_2-0_DEPRECATED
YuichiYuichi

Concerning your last question first: We deploy on production using a Bitbucket Pipeline (= basically Github Actions) every time we merge into our dbt master branch. We run both dbt-metabase models and exposures.
Concerning parameters, from what I remember / can read quickly from our code:
dbt_database: This is the name of your DWH database = what you run dbt on = what you run analyses on in Metabase. So this is what you probably see in Admin Settitngs > Databases tab.
metabase_database: This is the name of Metabase’s own “meta DB”, or its own production database. If you haven’t explicitly connected this to your Metabase instance, you won’t see it in Admin Settings. (I’ve included a screenshot of some of the tables in this DB so you can check which is which!)

  • dbt_database: これは、DWH データベースの名前です = dbt を実行する対象 = Metabase で分析を実行する対象です。したがって、これはおそらく、[管理設定] > [データベース] タブに表示されるものです。
  • metabase_database: これは、Metabase 独自の「メタ DB」、つまり独自の本番データベースの名前です。これを Metabase インスタンスに明示的に接続していない場合は、管理設定に表示されません。(どのテーブルがどれであるかを確認できるように、この DB のいくつかのテーブルのスクリーンショットを含めました。)
YuichiYuichi
dbt compile && dbt-metabase exposures \
    --manifest-path target/manifest.json \
    --metabase-url https://metabase.example.com \
    --metabase-api-key mb_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= \
    --dbt_database {db name} \
    --metabase_database {db name} \
    --output_path models \
    --output_name exposure_metabase 
YuichiYuichi

$ dbt-metabase exposures --help
Usage: dbt-metabase exposures [OPTIONS]

  Metabase から dbt の exposure を抽出します。

Options:
  --manifest-path FILE            dbt の manifest.json のパス。通常はコンパイル後に
                                  target/ ディレクトリにあります。  [環境変数:
                                  MANIFEST_PATH; 必須]
  --metabase-url URL              Metabase の URL 例:
                                  'https://metabase.example.com'。  [環境変数:
                                  METABASE_URL; 必須]
  --metabase-api-key API_KEY      Metabase の API キー (ユーザー名/パスワードを
                                  提供しない場合は必須)。  [環境変数:                                  METABASE_API_KEY]
  --metabase-username USERNAME    Metabase のユーザー名 (API キーを提供しない
                                  場合は必須)。  [環境変数: METABASE_USERNAME]
  --metabase-password PASSWORD    Metabase のパスワード (API キーを提供しない
                                  場合は必須)。  [環境変数: METABASE_PASSWORD]
  --skip-verify TEXT              TLS 証明書の検証をスキップ (推奨しません)。  [環境                                  変数: SKIP_VERIFY]
  --cert CERT                     TLS 証明書バンドルのパス。  [環境変数:                                  CERT]
  --http-timeout SECS             HTTP タイムアウト(秒)。  [環境変数:                                  HTTP_TIMEOUT; デフォルト: 15]
  --http-header <TEXT TEXT>...    追加の HTTP リクエストヘッダー。
  -v, --verbose                   詳細なログを有効にします。
  --output-path DIRECTORY         exposure YAML ファイルの出力パス。  [環境変数:                                  OUTPUT_PATH; デフォルト: .]
  --output-grouping [collection|type]
                                  exposure YAML ファイルのグループ化キー。  [環境                                  変数: OUTPUT_GROUPING]
  --include-collections COLLECTIONS
                                  特定の Metabase コレクションのみを含めます。
                                  [環境変数: INCLUDE_COLLECTIONS]
  --exclude-collections COLLECTIONS
                                  特定の Metabase コレクションを除外します。  [環境                                  変数: EXCLUDE_COLLECTIONS]
  --allow-personal-collections    個人用 Metabase コレクションを含めます。  [環境                                  変数: ALLOW_PERSONAL_COLLECTIONS]
  --exclude-unverified            未検証の項目を除外します。検証をサポートしている
                                  エンティティタイプにのみ適用されます。  [環境変数:                                  EXCLUDE_UNVERIFIED]
  --help                          このヘルプメッセージを表示して終了します。
YuichiYuichi

depends_onが取得できない問題

-- `がついてるとdepends_on取得できないっぽい
select * from `dataset.table`
-- 正しくは↓
select * from dataset.table