О команде 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