我正在尝试粗略估计我的 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
我的问题是,我是将这两个结果视为构成一次执行的两个独立组件,还是它们代表同一个执行?如果我的问题没有意义,请告诉我,我很乐意澄清。