Перейти к основному содержимому

Информационная схема dbt

Информационная схема dbt — это интерфейс с определённым контрактом для доступа к метаданным вашего проекта. Вы можете обращаться к ней с помощью SQL через dbt show или в своих проверках.

Метаданные хранятся в файлах Parquet, которые компактнее JSON-артефактов и обеспечивают более эффективное выполнение запросов. Например, для проекта, в котором общий размер manifest.json и catalog.json составляет около 70 МБ, размер информационной схемы составляет около 5 МБ.

Создание информационной схемы и выполнение запросов к ней не используют вычислительные ресурсы хранилища данных. dbt записывает файлы на основе внутренних метаданных проекта с помощью встроенного движка DuckDB, работающего внутри процесса dbt. Для использования информационной схемы не нужно устанавливать, настраивать или администрировать DuckDB.

При использовании флага --generate-info-schema dbt записывает эти файлы в каталог с указанием версии, например target/info_schema/v1/. Объём доступных метаданных растёт по мере обработки проекта в dbt:

  • Парсинг предоставляет основные метаданные проекта
  • Компиляция добавляет типы столбцов моделей и происхождение данных на уровне столбцов (при использовании --static-analysis strict)
  • Выполнение команд run или build добавляет результаты выполнения

Используйте dbt show --inline для выполнения SQL-запросов или dbt show --info для запроса представления по имени. Вы также можете читать файлы с помощью инструментов, поддерживающих Parquet, например Pandas или Polars.

Список доступных таблиц и их описания см. в разделе Таблицы информационной схемы.

dbt Wizard также использует информационную схему для анализа вашего проекта. Подробнее см. в разделе Как работает dbt Wizard.

Создание информационной схемы​

Используйте --generate-info-schema или DBT_ENGINE_GENERATE_INFO_SCHEMA=true с командами dbt build, dbt run, dbt compile или dbt parse. По умолчанию таблица dbt.node_columns содержит только столбцы, объявленные в YAML, как для моделей, так и для источников.

  • Чтобы включить выведенные типы столбцов моделей и происхождение данных на уровне столбцов, добавьте --static-analysis strict:

    dbt build --generate-info-schema --static-analysis strict

    С этим флагом dbt определяет типы столбцов на основе SQL-кода ваших моделей. Столбцы источников по-прежнему ограничены теми, которые объявлены в YAML.

  • Чтобы включить типы столбцов из хранилища данных и все столбцы источников, используемых выбранными узлами, добавьте --write-catalog к команде dbt build или dbt run:

    dbt build --generate-info-schema --write-catalog
    dbt build --generate-info-schema --static-analysis strict --write-catalog # to get inferred model column types and column-level lineage
  • При использовании dbt parse информационная схема не содержит типов столбцов, сведений о происхождении данных и результатов выполнения, поскольку dbt parse не подключается к вашему хранилищу данных.

  • dbt show читает метаданные проекта напрямую, поэтому перед использованием этой команды ничего создавать не нужно. Используйте --generate-info-schema, если хотите экспортировать файлы Parquet на диск (например, чтобы прочитать их с помощью внешних инструментов).

Каталог схемы​

Файлы Parquet информационной схемы находятся в подкаталоге с указанием версии внутри каталога target/info_schema/ вашего проекта (или каталога, заданного с помощью --info-schema-dir). Они не хранятся в вашем хранилище данных.

Переопределение выходного каталога​

Используйте --info-schema-dir или DBT_ENGINE_INFO_SCHEMA_DIR, чтобы записать информационную схему в указанный вами каталог. Подкаталог с указанием версии (v1/) по-прежнему создаётся внутри заданного каталога.

dbt build --generate-info-schema --info-schema-dir /tmp/my_schema
# writes to /tmp/my_schema/v1/

Запросы к информационной схеме​

Вы можете выполнять запросы к информационной схеме локально с помощью dbt show или любого инструмента, поддерживающего Parquet.

Запросы с помощью dbt show​

Используйте dbt show --info <view>, чтобы запросить представление непосредственно из CLI:

dbt show --info models
dbt show --info models --format json --limit 20

Эта команда напрямую запрашивает промежуточные представления, не подключаясь к вашему хранилищу данных. --info <view> эквивалентно --inline "select * from {{ info_schema('<view>') }}".

Вы также можете использовать --inline с SQL-кодом, который напрямую вызывает {{ info_schema() }}:

dbt show --inline "select name from {{ info_schema('models') }} order by name"

Запросы с помощью внешних инструментов​

Укажите любому инструменту, поддерживающему Parquet, путь к файлам в target/info_schema/v1/. Например, для pandas:

import pandas as pd
models = pd.read_parquet("target/info_schema/v1/dbt.models.parquet")

Использование информационной схемы в проверках​

Проверки — это SQL-запросы к информационной схеме dbt, предназначенные для проверки качества вашего проекта. Используйте макрос {{ info_schema() }} в своей проверке, чтобы обратиться к представлению в информационной схеме dbt. В dbt_project.yml необходимо указать версию info_schema, которую вы хотите использовать. На данный момент доступна только версия 1.

info_schema:
version: 1

Версию схемы можно найти в имени подкаталога с указанием версии (например, target/info_schema/v1/).

Связанная документация​

Нашли ошибку?

0
Loading