JSON файл результатов выполнения
Текущая схема: v5
Создается при выполнении:
build
compile
docs generate
run
seed
snapshot
test
run-operation
Этот файл содержит информацию о завершенном вызове dbt, включая данные о времени и статусе для каждого узла (модель, тест и т.д.), который был выполнен. В совокупности, множество run_results.json
могут быть объединены для расчета среднего времени выполнения моделей, частоты отказов тестов, количества изменений записей, зафиксированных снимками и т.д.
Обратите внимание, что в результатах выполнения отображаются только выполненные узлы. Если у вас есть несколько шагов выполнения или тестирования с разными критериями, каждый из них создаст разные результаты выполнения.
Примечание: dbt source freshness
создает другой артефакт, sources.json
, с аналогичными атрибутами.
Ключи верхнего уровня
metadata
args
: Словарь аргументов, переданных в команду CLI или метод RPC, который создал этот артефакт. Наиболее полезныwhich
(команда) илиrpc_method
. Этот словарь исключает значения null и включает значения по умолчанию, если они не null. Эквивалентноinvocation_args_dict
в контексте dbt-Jinja.elapsed_time
: Общее время вызова в секундах.results
: Массив деталей выполнения узлов.
Каждая запись в results
является Result
объектом, с одним отличием: вместо включения всего объекта node
, включается только unique_id
. (Полный объект node
записывается в manifest.json
.)
unique_id
: Уникальный идентификатор узла, который связывает результаты сnodes
в манифестеstatus
: Интерпретация dbt успешности выполнения, отказа или ошибкиthread_id
: Какая нить выполняла этот узел? Например,Thread-1
execution_time
: Общее время, затраченное на выполнение этого узлаtiming
: Массив, разбивающий время выполнения на этапы (частоcompile
+execute
)message
: Как dbt сообщит об этом результате в CLI, на основе информации, возвращенной из базы данных
adapter_response
: Словарь метаданных, возвращаемых из базы данных, который варьируется в зависимости от адаптера. Например, код успешного выполненияcode
, количество затронутых строкrows_affected
, общее количество обработанных байтbytes_processed
и так далее. Не применяется для тестов.rows_affected
возвращает количество строк, измененных последним выполненным оператором. В случаях, когда количество строк в запросе не может быть определено или не применимо (например, при создании представления), возвращается стандартное значение-1
дляrowcount
.
run_results.json
включает три атрибута, связанные с состоянием applied
, которые дополняют unique_id
:
compiled
: Логическое значение статуса компиляции узла (False
после парсинга, ноTrue
после компиляции).compiled_code
: Отображенная строка кода, который был скомпилирован (пустая после парсинга, но полная строка после компиляции).relation_name
: Полностью квалифицированное имя объекта, который был (или будет) создан/обновлен в базе данных.
Продолжайте искать дополнительную информацию о логическом
состоянии узлов, используя полный объект узла в manifest.json через unique_id
.
Примеры
Вот несколько примеров и результирующий вывод в файл run_results.json
.
Результаты компиляции модели
Предположим, у вас есть модель, которая выглядит следующим образом:
select {{ dbt.current_timestamp() }} as created_at
Скомпилируйте модель:
dbt compile -s my_model
Вот фрагмент вывода из run_results.json
:
{
"status": "success",
"timing": [
{
"name": "compile",
"started_at": "2023-10-12T16:35:28.510434Z",
"completed_at": "2023-10-12T16:35:28.519086Z"
},
{
"name": "execute",
"started_at": "2023-10-12T16:35:28.521633Z",
"completed_at": "2023-10-12T16:35:28.521641Z"
}
],
"thread_id": "Thread-2",
"execution_time": 0.0408780574798584,
"adapter_response": {},
"message": null,
"failures": null,
"unique_id": "model.my_project.my_model",
"compiled": true,
"compiled_code": "select now() as created_at",
"relation_name": "\"postgres\".\"dbt_dbeatty\".\"my_model\""
}
За пуск общих тестов данных
Используйте конфигурацию store_failures_as
, чтобы сохранять отказы только для одного теста данных в базе данных:
models:
- name: my_model
columns:
- name: created_at
tests:
- not_null:
config:
store_failures_as: view
- unique:
config:
store_failures_as: ephemeral
Запустите встроенный тест unique
и сохраните отказы в виде таблицы:
dbt test -s my_model
Вот фрагмент вывода из run_results.json
:
"results": [
{
"status": "pass",
"timing": [
{
"name": "compile",
"started_at": "2023-10-12T17:20:51.279437Z",
"completed_at": "2023-10-12T17:20:51.317312Z"
},
{
"name": "execute",
"started_at": "2023-10-12T17:20:51.319812Z",
"completed_at": "2023-10-12T17:20:51.441967Z"
}
],
"thread_id": "Thread-2",
"execution_time": 0.1807551383972168,
"adapter_response": {
"_message": "SELECT 1",
"code": "SELECT",
"rows_affected": 1
},
"message": null,
"failures": 0,
"unique_id": "test.my_project.unique_my_model_created_at.a9276afbbb",
"compiled": true,
"compiled_code": "\n \n \n\nselect\n created_at as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"dbt_dbeatty\".\"my_model\"\nwhere created_at is not null\ngroup by created_at\nhaving count(*) > 1\n\n\n",
"relation_name": null
},
{
"status": "pass",
"timing": [
{
"name": "compile",
"started_at": "2023-10-12T17:20:51.274049Z",
"completed_at": "2023-10-12T17:20:51.295237Z"
},
{
"name": "execute",
"started_at": "2023-10-12T17:20:51.296361Z",
"completed_at": "2023-10-12T17:20:51.491327Z"
}
],
"thread_id": "Thread-1",
"execution_time": 0.22345590591430664,
"adapter_response": {
"_message": "SELECT 1",
"code": "SELECT",
"rows_affected": 1
},
"message": null,
"failures": 0,
"unique_id": "test.my_project.not_null_my_model_created_at.9b412fbcc7",
"compiled": true,
"compiled_code": "\n \n \n\n\n\nselect *\nfrom \"postgres\".\"dbt_dbeatty\".\"my_model\"\nwhere created_at is null\n\n\n",
"relation_name": "\"postgres\".\"dbt_dbeatty_dbt_test__audit\".\"not_null_my_model_created_at\""
}
],