columns
- Models
- Sources
- Seeds
- Snapshots
- Analyses
models:
- name: <model_name>
columns:
- name: <column_name>
data_type: <string>
description: <markdown_string>
quote: true | false
data_tests: ...
config:
tags: ...
meta: ...
- name: <another_column>
...
sources:
- name: <source_name>
tables:
- name: <table_name>
columns:
- name: <column_name>
description: <markdown_string>
data_type: <string>
quote: true | false
data_tests: ...
config:
tags: ...
meta: ...
- name: <another_column>
...
seeds:
- name: <seed_name>
columns:
- name: <column_name>
description: <markdown_string>
data_type: <string>
quote: true | false
data_tests: ...
config:
tags: ...
meta: ...
- name: <another_column>
...
snapshots:
- name: <snapshot_name>
columns:
- name: <column_name>
description: <markdown_string>
data_type: <string>
quote: true | false
data_tests: ...
config:
tags: ...
meta: ...
- name: <another_column>
analyses:
- name: <analysis_name>
columns:
- name: <column_name>
description: <markdown_string>
data_type: <string>
- name: <another_column>
Столбцы не являются самостоятельными ресурсами. Вместо этого они являются дочерними свойствами другого типа ресурса. Они могут определять под-свойства, которые аналогичны свойствам, определенным на уровне ресурса:
tagsmetadata_testsdescription
Поскольку столбцы не являются ресурсами, их свойства tags и meta не считаются полноценными конфигурациями, даже если они вложены в блок config. Они не наследуют значения tags или meta от родительских ресурсов. Однако вы можете выбрать обобщённый тест (generic test), определённый на столбце, используя теги, применённые к этому столбцу или к ресурсу верхнего уровня; см. примеры выбора тестов.
Столбцы могут опционально определять data_type. Это необходимо для:
- обеспечения соблюдения контракта модели;
- использования в других пакетах или плагинах, например, в свойстве
externalдля источников и в пакетеdbt-external-tables.
quote
Поле quote можно использовать для включения или отключения кавычек для имён столбцов.
- Models
- Sources
- Seeds
- Snapshots
- Analyses
models:
- name: model_name
columns:
- name: column_name
quote: true | false
sources:
- name: source_name
tables:
- name: table_name
columns:
- name: column_name
quote: true | false
seeds:
- name: seed_name
columns:
- name: column_name
quote: true | false
snapshots:
- name: snapshot_name
columns:
- name: column_name
quote: true | false
analyses:
- name: analysis_name
columns:
- name: column_name
quote: true | false
Значение по умолчанию
Значение кавычек по умолчанию — false.
Пояснение
Это особенно актуально для пользователей Snowflake, где поведение кавычек может быть достаточно непредсказуемым.
Это свойство полезно в следующих случаях:
- источник (table) имеет столбец, который необходимо брать в кавычки для корректного выбора, например, чтобы сохранить регистр имени столбца;
- seed был создан с
quote_columns: true(документация) в Snowflake; - модель использует кавычки в SQL, потенциально как обходное решение при использовании зарезервированных слов:
select user_group as "group"
Если не установить quote: true:
- тесты данных, применённые к этому столбцу, могут завершаться ошибкой из‑за некорректного SQL;
- документация может отображаться некорректно, например
groupи"group"могут не сопоставляться как одно и то же имя столбца.
Пример
Добавление тестов данных к столбцу с кавычками в таблице источника
Это особенно важно при использовании Snowflake:
sources:
- name: stripe
tables:
- name: payment
columns:
- name: orderID
quote: true
data_tests:
- not_null
Без quote: true возникнет следующая ошибка:
$ dbt test -s source:stripe.*
Running with dbt=0.16.1
Found 7 models, 22 tests, 0 snapshots, 0 analyses, 130 macros, 0 operations, 0 seed files, 4 sources
13:33:37 | Concurrency: 4 threads (target='learn')
13:33:37 |
13:33:37 | 1 of 1 START test source_not_null_stripe_payment_order_id............ [RUN]
13:33:39 | 1 of 1 ERROR source_not_null_stripe_payment_order_id................. [ERROR in 1.89s]
13:33:39 |
13:33:39 | Finished running 1 tests in 6.43s.
Completed with 1 error and 0 warnings:
Database Error in test source_not_null_stripe_payment_order_id (models/staging/stripe/src_stripe.yml)
000904 (42000): SQL compilation error: error line 3 at position 6
invalid identifier 'ORDERID'
compiled SQL at target/compiled/jaffle_shop/schema_test/source_not_null_stripe_payment_orderID.sql
Это происходит потому, что dbt пытается выполнить:
select count(*)
from raw.stripe.payment
where orderID is null
Вместо:
select count(*)
from raw.stripe.payment
where "orderID" is null