Как пометить проект dbt, чтобы можно было запросить INFORMATION_SCHEMA для всех заданий, созданных этим проектом?

  • dbt-ядро: 1.8.0
  • dbt-bigquery: 1.8.1

У меня есть проект 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 мой проект выполняется в базе данных, созданной для расчета затрат?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Добавьте это в свой 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

Другие вопросы по теме