如何从Databricks(含SQL角色)获取各类使用统计数据?
获取Databricks使用统计数据的可行途径
1. 查询特定用户访问指定表的次数
可以通过Databricks内置的审计日志系统表system.access.audit实现,该表记录了工作区内所有用户的操作行为。通过SQL筛选目标用户和表的访问记录即可统计次数:
SELECT user_id, COUNT(*) AS access_count FROM system.access.audit WHERE user_id = '目标用户ID/用户名' AND action_name IN ('SELECT', 'DESCRIBE', 'SHOW_TABLE') -- 筛选涉及表访问的核心操作 AND request_params LIKE '%`目标数据库名`.`目标表名`%' -- 匹配目标表(根据实际日志格式调整) GROUP BY user_id;
注:SQL仓库的操作日志中,表名格式可能略有差异,需根据实际日志内容调整匹配规则。
2. 统计某条管道的触发次数
针对DLT管道,使用system.pipelines.events系统表统计触发次数,每个管道运行对应一条启动事件记录:
SELECT COUNT(DISTINCT run_id) AS total_trigger_count FROM system.pipelines.events WHERE pipeline_id = '目标管道ID' AND event_type = 'RUN_STARTED'; -- 仅统计启动事件,避免重复计数
如果需要区分触发类型(手动/调度/更新触发),可以增加GROUP BY trigger_type来拆分统计。
3. 获取DLT管道的运行时长
有两种直接的实现方式:
- 方法一:用
system.pipelines.runs表(更简洁)
SELECT run_id, start_time, end_time, TIMESTAMPDIFF(MINUTE, start_time, end_time) AS run_duration_minutes FROM system.pipelines.runs WHERE pipeline_id = '目标管道ID' AND status = 'SUCCEEDED' -- 可选:仅统计成功完成的运行 ORDER BY start_time DESC;
- 方法二:用
system.pipelines.events表匹配启动/结束事件
WITH run_time_mapping AS ( SELECT run_id, MAX(CASE WHEN event_type = 'RUN_STARTED' THEN timestamp END) AS start_ts, MAX(CASE WHEN event_type = 'RUN_COMPLETED' THEN timestamp END) AS end_ts FROM system.pipelines.events WHERE pipeline_id = '目标管道ID' GROUP BY run_id ) SELECT run_id, TIMESTAMPDIFF(SECOND, start_ts, end_ts) AS run_duration_seconds FROM run_time_mapping WHERE end_ts IS NOT NULL; -- 过滤未完成的运行记录
注意:访问这些系统表需要对应
SELECT权限,若权限不足需联系工作区管理员授权。
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

