Обновление до версии v1.5
dbt Core v1.5 — это релиз с новыми возможностями, в котором представлены два значимых дополнения:
- Управление моделями — доступ, контракты, версии — первая фаза развёртываний с несколькими проектами
- Python-точка входа для программных вызовов, функционально эквивалентная CLI
Ресурсы
- Журнал изменений
- Руководство по установке CLI dbt Core
- Руководство по обновлению в Cloud
- График выпусков
Что нужно знать перед обновлением
dbt Labs стремится обеспечить обратную совместимость для всех версий 1.x, за исключением изменений, явно упомянутых ниже. Если вы столкнетесь с ошибкой при обновлении, пожалуйста, сообщите нам, создав проблему.
Изменения в поведении
Этот релиз включает значительные новые функции и переработку CLI и процесса инициализации dbt-core. В рамках рефакторинга его внутренней структуры с argparse на click мы внесли несколько изменений в конфигурацию времени выполнения. Итогом этих изменений стали более согласованные и практичные варианты конфигурации и более читаемая кодовая база.
Где это возможно, мы предоставим обратную совместимость и предупреждения о депрекации как минимум на одну минорную версию до фактического удаления старой функциональности. В этих случаях мы все же оставляем за собой право полностью удалить обратную совместимость для устаревшей функциональности в будущей минорной версии v1.x dbt-core.
Установка log-path и target-path в dbt_project.yml устарела для согласованности с другими конфигурациями времени выполнения, специфичными для вызова (dbt-core#6882). Мы рекомендуем устанавливать через переменные окружения или флаг CLI.
Команда dbt list теперь по умолчанию включает логи уровня INFO. Ранее команда list (и только команда list) выводила логи уровня WARN в stdout, чтобы было удобно передавать её результат через пайп (pipe) в jq, файл или другой процесс. Чтобы добиться такого же поведения, вы можете использовать один из следующих параметров:
dbt list --log-level warn(рекомендуется; эквивалент прежнего поведения по умолчанию)dbt list --quiet(подавляет все логи ниже уровняERROR, за исключением «печатных» сообщений и вывода командыlist)
Следующие переменные окружения были переименованы для согласованности с конвенцией, принятой для всех других параметров:
DBT_DEFER_TO_STATE→DBT_DEFERDBT_FAVOR_STATE_MODE→DBT_FAVOR_STATEDBT_NO_PRINT→DBT_PRINTDBT_ARTIFACT_STATE_PATH→DBT_STATE
Как описано в dbt-core#7169, параметры командной строки, которые могли быть тихими ранее, больше не будут тихими. См. dbt-labs/dbt-core#7158 и dbt-labs/dbt-core#6800 для получения дополнительных примеров поведения, которое мы исправляем.
Пустой ключ tests: в yaml-файле теперь будет вызывать ошибку валидации, вместо того чтобы быть тихо пропущенным. Вы можете решить эту проблему, удалив пустой ключ tests:, или явно установив его в пустой список:
# ❌ это вызовет ошибку
models:
- name: my_model
tests:
config: ...
# ✅ это нормально
models:
- name: my_model
tests: [] # todo! добавить тесты позже
config: ...
Некоторые параметры, которые ранее могли быть указаны после подкоманды, теперь могут быть указаны только до. Это включает в себя инверсии параметров, например, --write-json и --no-write-json. Список затронутых параметров:
Список затронутых параметров
--cache-selected-only | --no-cache-selected-only
--debug, -d | --no-debug
--deprecated-print | --deprecated-no-print
--enable-legacy-logger | --no-enable-legacy-logger
--fail-fast, -x | --no-fail-fast
--log-cache-events | --no-log-cache-events
--log-format
--log-format-file
--log-level
--log-level-file
--log-path
--macro-debugging | --no-macro-debugging
--partial-parse | --no-partial-parse
--partial-parse-file-path
--populate-cache | --no-populate-cache
--print | --no-print
--printer-width
--quiet, -q | --no-quiet
--record-timing-info, -r
--send-anonymous-usage-stats | --no-send-anonymous-usage-stats
--single-threaded | --no-single-threaded
--static-parser | --no-static-parser
--use-colors | --no-use-colors
--use-colors-file | --no-use-colors-file
--use-experimental-parser | --no-use-experimental-parser
--version, -V, -v
--version-check | --no-version-check
--warn-error
--warn-error-options
--write-json | --no-write-json
Кроме того, некоторые параметры, которые ранее могли быть указаны до подкоманды, теперь могут быть указаны только после. Любой параметр, не входящий в приведенный выше список, должен появляться после подкоманды, начиная с версии v1.5 и позже. Например, --profiles-dir.
Встроенный макрос collect_freshness теперь возвращает весь объект response, а не только результат table. Если вы используете пользовательскую переопределение для collect_freshness, убедитесь, что вы также возвращаете объект response; в противном случае некоторые из ваших команд dbt никогда не завершатся. Например:
{{ return(load_result('collect_freshness')) }}
Наконец: во встроенном макросе generate_alias_name теперь есть логика для работы с версионированными моделями. Если в вашем проекте макрос generate_alias_name был переопределён с собственной логикой и вы хотите начать использовать версии моделей, вам потребуется обновить логику в этом макросе. Обратите внимание: хотя это не является обязательным требованием для обновления до v1.5 — это нужно только для использования новой функциональности — мы рекомендуем сделать это в рамках обновления, независимо от того, планируете ли вы использовать версии моделей уже сейчас или только в отдалённом будущем.
Аналогично, если в вашем проекте макрос ref был переопределён с собственной логикой, вам необходимо обновить логику в этом макросе, как описано здесь.
Для потребителей артефактов dbt (метаданные)
Версия схемы manifest будет обновлена до v9. Конкретные изменения:
- Добавление
groupsв качестве ключа верхнего уровня - Добавление
access,constraints,version,latest_versionв качестве атрибутов узла верхнего уровня для моделей - Добавление
constraintsв качестве атрибута уровня столбца - Добавление
groupиcontractв качестве конфигураций узла - Для поддержки версий моделей тип
refsизменен сList[List[str]]наList[RefArgs], с вложенными ключамиname: str,package: Optional[str] = None, иversion: Union[str, float, NoneType] = None).
Для разработчиков адаптеров плагинов
Для получения более подробной информации и для вопросов, пожалуйста, прочитайте и прокомментируйте обсуждение на GitHub: dbt-labs/dbt-core#7213.
Новая и измененная документация
Управление моделями
Первая фаза поддержки развертываний dbt в масштабе — для нескольких проектов с четко определённой ответственностью и границами интерфейсов. Подробнее о governance моделей. Всё это является новым функционалом версии v1.5.
Обновленный CLI
Компилируйте и просматривайте модели dbt и --inline dbt-SQL запросы в CLI, используя:
dbt compiledbt show(новое!)
Методы выбора узлов могут использовать подстановочные знаки в стиле Unix для выбора узлов, соответствующих шаблону:
dbt ls --select "tag:team_*"
И (!): первая точка входа для программных вызовов, наравне с командами CLI.
Запустите dbt --help, чтобы увидеть новую и улучшенную справочную документацию :)
Коротко о главном
- Верхнеуровневый ключ
version: 2теперь необязателен во всех YAML-файлах. Также верхнеуровневые ключиconfig-version: 2иversion:теперь необязательны в файлахdbt_project.yml. - События и логирование: в словарь
node_infoдобавлено полеnode_relation(database,schema,identifier), доступное в событиях, относящихся к конкретным узлам - Поддержка задания
--project-dirчерез переменную окружения:DBT_PROJECT_DIR - Более детальные настройки для логирования (для задания формата логов, уровней логирования и цветовой подсветки), а также для наполнения кэша
- dbt перезаписывает файл
manifest.jsonво время парсинга. Это означает, что при обращении к--stateиз директорииtarget/вы можете столкнуться с предупреждением о том, что сохранённый manifest не был найден.