У меня есть проект dbt-core, который включает в себя 2 таблицы (1 инкрементальную, 1, которая объединяет инкрементную таблицу).
Поскольку dbt регистрирует только прямые файлы *.sql, но не магические инкрементальные макросы с операторами MERGE, в зарегистрированных bytes_billed в /target/run_results.json отсутствует большая часть затрат при запуске проекта.
Чтобы решить эту проблему, мне нужен способ получить все задания, созданные при запуске проекта dbt.
dbt_project.yml:
models:
dbt_tracking:
near_realtime:
+tags: near_realtime
+labels:
source: dbt_near_realtime
+materialized: table
конфигурация для файла models/near_realtime/stg_near_realtime_events.sql:
{{
config(
labels = {"task_id": "near_realtime"},
materialized = "incremental",
incremental_strategy = "merge",
on_schema_change = "append_new_columns",
partition_by = {
"field": "derived_tstamp",
"data_type": "timestamp",
"granularity": "hour",
},
partition_expiration_days=1,
cluster_by=["event_name"],
)
}}
конфигурация для файла models/near_realtime/int_near_realtime_aggs.sql:
{{
config(
labels = {"task_id": "near_realtime"},
)
}}
команда выполнения:
dbt run --select tag:near_realtime
но когда я ищу свой ярлык в
`my_project_id.region-eu.INFORMATION_SCHEMA.JOBS_BY_USER`
единственный label.key, который я получаю через:
select distinct
labels[SAFE_OFFSET(0)].key
from
`my_project_id.region-eu.INFORMATION_SCHEMA.JOBS_BY_USER`
where
timestamp_trunc(creation_time, day) = timestamp(current_date())
это:
dbt_invocation_id
Как я могу запросить задания для моего запроса, чтобы увидеть, какие total_bytes_billed мой проект выполняется в базе данных, созданной для расчета затрат?





Добавьте это в свой dbt_profile.yml:
query-comment:
job-label: True
comment: "{{ var('query_label', 'dbt_run') }}"
Затем вы можете установить метку запроса с помощью:
dbt run --select tag:my_tag --vars '{"query_label": "here_is_my_label"}'
Затем вы можете проанализировать метку запроса total_bytes_billed для каждого задания в BQ с помощью:
with
dbt_cloud_logs as (
select
datetime(creation_time, "Europe/Berlin") as creation_time
, (select unnested_labels.value from unnest(labels) as unnested_labels where unnested_labels.key = "dbt_invocation_id") as dbt_invocation_id
, (select unnested_labels.value from unnest(labels) as unnested_labels where unnested_labels.key = "query_comment") as dbt_query_label
, total_bytes_billed
from
`region-eu.INFORMATION_SCHEMA.JOBS`
where
1=1
and user_email = "your_service_account_or_email_adress"
and timestamp_trunc(creation_time, day, "Europe/Berlin") >= timestamp("when_did_you_implement_job_query_labels?", "Europe/Berlin")
)
select
*
from
dbt_cloud_logs
where
1=1
and dbt_query_label is not null
and dbt_invocation_id is not null
order by
dbt_query_label
, creation_time desc