【dbt】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

Metabase エクスポージャーを抽出するときにコレクションを除外できません
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

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 のいくつかのテーブルのスクリーンショットを含めました。)

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

$ 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 このヘルプメッセージを表示して終了します。
Usage: dbt-metabase models [OPTIONS]
Export dbt models to Metabase.
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 KEY VALUE 追加のHTTPリクエストヘッダーを指定します。
-v, --verbose 詳細なログを有効にします。
--metabase-database METABASE_DATABASE
Metabase内のターゲットデータベースを指定します。
[環境変数: METABASE_DATABASE; 必須]
--include-databases DATABASES 特定のdbtデータベースのみを含めます。
[環境変数: INCLUDE_DATABASES]
--exclude-databases DATABASES 特定のdbtデータベースを除外します。
[環境変数: EXCLUDE_DATABASES]
--include-schemas SCHEMAS 特定のdbtスキーマのみを含めます。
[環境変数: INCLUDE_SCHEMAS]
--exclude-schemas SCHEMAS 特定のdbtスキーマを除外します。
[環境変数: EXCLUDE_SCHEMAS]
--include-models MODELS 特定のdbtモデルのみを含めます。
[環境変数: INCLUDE_MODELS]
--exclude-models MODELS 特定のdbtモデルを除外します。
[環境変数: EXCLUDE_MODELS]
--sync-timeout SECS Metabaseのスキーマがdbtプロジェクトと一致するまで待機する秒数を指定します。
同期をスキップする場合は0を設定してください。
[環境変数: SYNC_TIMEOUT]
--skip-sources dbtソースをエクスポートから除外します。
[環境変数: SKIP_SOURCES]
--append-tags dbtタグをテーブル説明文に追加します。
[環境変数: APPEND_TAGS]
--docs-url URL テーブル説明文にモデルリンクを追加するためのdbtドキュメントホスティングURLを指定します。
[環境変数: DOCS_URL]
--order-fields dbtプロジェクト内の列順を維持します。
[環境変数: ORDER_FIELDS]
--help このヘルプメッセージを表示して終了します。

depends_onが取得できない問題→isuue立てて改善済み
-- `がついてるとdepends_on取得できないっぽい
select * from `dataset.table`
-- 正しくは↓
select * from dataset.table
elif query.get("type") == "native":
# Extracting table in `from` and `join` clauses (won't recognize some valid SQL, e.g. `from "table with spaces"`)
_EXPOSURE_PARSER = re.compile(r"[FfJj][RrOo][OoIi][MmNn]\s+([\w.\"`]+)")
_CTE_PARSER = re.compile(
r"[Ww][Ii][Tt][Hh]\s+\b(\w+)\b\s+as|[)]\s*[,]\s*\b(\w+)\b\s+as"
)

dbt compile &&
dbt-metabase exposures \
--manifest-path target/manifest.json \
--metabase-url https://~ \
--metabase-api-key mb_xxxxxxxxx \
--output-path models/exposure_metabase \
--include-collections ~

#286 (コメント)で気づいたように、競合するテーブル名はサポートされていません。依存関係はネイティブ SQL クエリを含むメタベース カードから手動で解析され、どのテーブルを参照しているかを区別する方法はありませんselect * from subscriptions。

出力されるファイル名について
- 指定なし
- exposures.yml
-
--output-grouping collection
- collection_name.yml : コレクションごとにファイル分割される
-
--output-grouping type
card # フォルダ L 999.yml # クエリごと
--output_name
は昔あったが、今はないので任意のファイル名にするのはできなさそう

の対応ログ
pip install git+ssh://git@github.com/gouline/dbt-metabase.git@d45c0df
SSH を使わず HTTPS を使用して dbt-metabase をインストールする場合
pip install git+https://github.com/gouline/dbt-metabase.git@d45c0df
$ pip list
dbt-bigquery 1.8.0
dbt-core 1.8.3
dbt-metabase 1.3.12.dev6+gd45c0df
サンドボックスのデータセットを使う
metabasで作成 SELECT *
FROM work.transactions
以前のバージョン(行けたやつ):a2b0617
pip uninstall dbt-metabase
pip install git+https://github.com/gouline/dbt-metabase.git@a2b061785a2d3f83d9a55f7c5e077c11c32e658f
pip list

config:
manifest_path: target/manifest.json
metabase_url: https://metabase.example.com
metabase_api_key: mb_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
# Configuration specific to models command
models:
metabase_database: cookbiz-data
# Metabaseで読み込み対象のデータベースが増えたら追記する
include_schemas:
- mrt_~~
- mrt_~~~
# Configuration specific to exposures command
exposures:
output_path: models/exposures/metabase
# 除外するコレクション
exclude_collections: ~~~~~
# コレクション単位でymlを分割保存
output_grouping: collection
下記のように実行
--metabase-database
はmetabase_database:
に書き換え、ハイフンがアンダーバーに変わってるのにしばらく気づかんかった泣
dbt-metabase --config-path dbt/dbt_metabase_config.yml models
dbt-metabase --config-path ../.github/setting/dbt-metabase_config.yml models

output_grouping: collectionだと
不要ファイルが貯まるので、出力先のフォルダをクリアする必要あり、、、