О команде dbt compile
dbt compile
генерирует исполняемый SQL из исходных файлов model
, test
и analysis
. Вы можете найти эти скомпилированные SQL файлы в директории target/
вашего проекта dbt.
Команда compile
полезна для:
- Визуальной проверки скомпилированного вывода файлов моделей. Это полезно для проверки сложной логики jinja или использования макросов.
- Ручного выполнения скомпилированного SQL. При отладке модели или теста схемы часто бывает полезно выполнить базовый оператор
select
, чтобы найти источник ошибки. - Компиляции файлов
analysis
. Подробнее о файлах анализа читайте здесь.
Некоторые распространенные заблуждения:
dbt compile
не является предварительным условием дляdbt run
или других команд сборки. Эти команды сами выполнят компиляцию.- Если вы хотите, чтобы dbt просто прочитал и проверил код вашего проекта без подключения к хранилищу данных, используйте
dbt parse
.
Интерактивная компиляция
Начиная с dbt версии 1.5, compile
может быть "интерактивной" в CLI, отображая скомпилированный код узла или произвольного dbt-SQL запроса:
--select
конкретный узел по имени--inline
произвольный dbt-SQL запрос
Это выведет скомпилированный SQL в терминал, а также запишет его в директорию target/
.
Например:
dbt compile --select "stg_orders"
dbt compile --inline "select * from {{ ref('raw_orders') }}"
возвращает следующее:
dbt compile --select "stg_orders"
21:17:09 Running with dbt=1.7.5
21:17:09 Registered adapter: postgres=1.7.5
21:17:09 Found 5 models, 3 seeds, 20 tests, 0 sources, 0 exposures, 0 metrics, 401 macros, 0 groups, 0 semantic models
21:17:09
21:17:09 Concurrency: 24 threads (target='dev')
21:17:09
21:17:09 Compiled node 'stg_orders' is:
with source as (
select * from "jaffle_shop"."main"."raw_orders"
),
renamed as (
select
id as order_id,
user_id as customer_id,
order_date,
status
from source
)
select * from renamed
dbt compile --inline "select * from {{ ref('raw_orders') }}"
18:15:49 Running with dbt=1.7.5
18:15:50 Registered adapter: postgres=1.7.5
18:15:50 Found 5 models, 3 seeds, 20 tests, 0 sources, 0 exposures, 0 metrics, 401 macros, 0 groups, 0 semantic models
18:15:50
18:15:50 Concurrency: 5 threads (target='postgres')
18:15:50
18:15:50 Compiled inline node is:
select * from "jaffle_shop"."main"."raw_orders"
Команда обращается к платформе данных для кэширования связанной метаинформации и выполнения интроспективных запросов. Используйте флаги:
--no-populate-cache
, чтобы отключить начальное заполнение кэша. Если метаданные необходимы, это будет промах кэша, требующий выполнения dbt запроса метаданных. Это флагdbt
, что означает, что вам нужно добавитьdbt
как префикс. Например:dbt --no-populate-cache
.--no-introspect
, чтобы отключить интроспективные запросы. dbt выдаст ошибку, если определение модели требует выполнения одного из них. Это флагdbt compile
, что означает, что вам нужно добавитьdbt compile
как префикс. Например:dbt compile --no-introspect
.
Часто задаваемые вопросы
Почему dbt compile требует подключения к платформе данных
0