SQL BigQuery:查询作业执行日志

问题描述 投票:0回答:0

我正在尝试粗略估计我的 ETL 管道每次执行以及每天的执行情况。我正在查询 BQ 作业历史记录并进行一些小的聚合,以获得我的估计成本、平均执行运行时间、GB 计费、时段时间等值

因为每次执行都由几个步骤组成(即,我有一些预操作,如变量声明、创建临时表等),当我查看 BQ 作业历史记录时,每次执行都出现在几个不同的步骤中

statement_types
和它们各自的子查询,但也作为一个整体
SCRIPT
出现整个查询。在这两种情况下,链接到
SCRIPT
语句类型的查询与将所有单独的子查询及其各自的 statement_types 放在一起时得到的查询是相同的。我为 SCRIPT 类型获得的指标实际上与在不同步骤中分解的指标相同,只有一些细微差别。

下面是一个查询,它为我提供了一次执行的计算成本

WITH main AS (


   SELECT 
      job_id,
      start_time,
      DATE(start_time) AS execution_date,
      statement_type,
      query,
      CASE WHEN statement_type LIKE 'SCRIPT' THEN 'whole_job' ELSE 'steps' END AS type,
      TIMESTAMP_DIFF(end_time, start_time, SECOND) AS duration_seconds, 
      ROUND(total_bytes_processed/1073741824, 2) AS gigabytes_processed,
      ROUND(total_bytes_billed/1073741824, 2) AS gigabytes_billed,
      ROUND(total_slot_ms/3600000, 2) AS total_slot_hours,
      ROUND(0.04*(total_slot_ms/3600000), 4) AS query_cost_usd
  FROM 
    `region-eu`.INFORMATION_SCHEMA.JOBS
  WHERE 
    DATE(start_time) = '2023-04-29'
  AND 
    user_email = 'dataform@<some_project>.iam.gserviceaccount.com'
  AND 
    query NOT LIKE '%<some_query>%'
  ORDER BY 
    start_time
  LIMIT 14
)

SELECT 
    execution_date,
    type,
    ROUND(AVG(duration_seconds),3) AS avg_execution_duration_daily,
    ROUND(SUM(gigabytes_processed),3) AS total_execution_gb_billed,
    ROUND(SUM(total_slot_hours),3) AS total_execution_slot_hrs,
    ROUND(SUM(query_cost_usd),2) AS total_execution_cost,
  FROM 
    main
  WHERE 
    execution_date = '2023-04-29'
  GROUP BY 
    1,2
  ORDER BY 
    1 ASC

结果如下:

我的问题是,我是将这两个结果视为构成一次执行的两个独立组件,还是它们代表同一个执行?如果我的问题没有意义,请告诉我,我很乐意澄清。

sql google-bigquery etl pipeline data-analysis
© www.soinside.com 2019 - 2024. All rights reserved.