Open7
dbt
Wizard for dbt Core (TM)で「列、テーブル、参照の自動補完」機能が全く効かない症状
現象
-
analyses
のフォルダでは何故か効かないことが特定できた-
analyses
はdbt runの対象外になるフォルダ
-
-
models
フォルダでは、問題なく動作する
対応
- ephemeral(cte)のフォルダーを作成して、そこで
analyses
で作業するファイルを格納する
# dbt_project.yml
models:
dbt_pj:
work_dbt:
materialized: ephemeral
+schema: work_dbt
紹介する VSCode 拡張機能一覧
- Wizard for dbt Core (TM)
- dbt の Language Server
- BigQuery Runner
- VSCode 内から BigQuery にクエリ実行
- sqlfluff
- BigQuery, dbt にも対応した SQL Linter/Formatter
not found in dbt project(sqlfluff)のエラー
dbt テンプレートが機能するには、呼び出し元のディレクトリがsqlfluffdbt プロジェクトのルート ディレクトリである必要がある
- .sqlfluffをルートディレクトリに移動して解決
ショートカット効率化
クエリ実行→ドキュメントフォーマット→ファイル保存の一括実行
multi-commandを利用
// keybindings.json
[
{
"key": "shift+enter",
"command": "extension.multiCommand.execute",
"args": {
"sequence": [
"dbtPowerUser.executeSQL",
"editor.action.formatDocument",
"workbench.action.files.save",
],
}
}
]
dbt test
- dbtでエラー内容確認
--store-failures フラグ
dbt test --select モデル名 --store-failures
テスト内容確認クエリ
-- テストしない方をコメントアウトする
{# {% set check_flag = "not_null" %} #}
{% set check_flag = "unique" %}
{% set table = "table" %}
{% set column = "id" %}
SELECT *
FROM {{ ref(table) }}
{%- if check_flag == "not_null" %}
WHERE {{ column }} IS NULL
{% elif check_flag == "unique" %}
WHERE {{ column }} IN (
SELECT {{ column }}
FROM {{ ref(table) }}
GROUP BY {{ column }}
HAVING COUNT({{ column }}) > 1
)
{% endif -%}
ORDER BY {{ column }} ASC
dbt-osmosis
インストール
結局pip install
した、packages.yml
に入れてインストールしても出来なかった。
dbt-osmosis
pip install -r requirements.txt
yml作成コマンド
- 一回、dbt build しないとファイルは作成されるが、カラムリストが生成されない
dbt-osmosis yaml refactor ./models/~フォルダ名
models:
jaffle_shop:
+dbt-osmosis: "{model}.yml" # _{model}.ymlとアンダーバー前に入れるよりファイルの並び的に良い
materialized: table
staging:
materialized: view
BigQueryのコンソール上でdescriptionを参照できるようにする
models:
+persist_docs:
relation: true
columns: true
relation を true にすると、テーブルのdescriptionが反映され、 columns を true にするとカラムのdescriptionが反映されます。
dbt ref() と source() の比較
source基本モデルで を使用し、それ以外はrefを使用する必要があります。