如何通过SQL查询BigQuery中用户查询历史及特定表访问用户
如何查询访问过特定BigQuery表的用户
可以通过查询BigQuery的作业历史视图实现需求,INFORMATION_SCHEMA基础表确实没有直接关联表与查询历史的条目,需要结合作业日志和查询语句解析来筛选。
具体SQL示例
替换<你的项目ID>、<目标数据集.目标表>和<区域>(比如us)后执行:
SELECT job_id, user_email, start_time, query FROM `<你的项目ID>.<区域>.INFORMATION_SCHEMA.JOBS_BY_PROJECT` WHERE job_type = 'QUERY' AND state = 'DONE' -- 解析查询语句中的表引用,匹配目标表 AND EXISTS ( SELECT 1 FROM UNNEST(bqutil.fn.parse_table_references(query)) AS ref WHERE ref.table = '<目标数据集.目标表>' ) ORDER BY start_time DESC
关键说明
bqutil.fn.parse_table_references是BigQuery内置UDF,能自动解析查询语句中引用的所有表,避免手动正则匹配的繁琐。- 作业历史默认保留60天,若需更长时间(最多180天),需在项目设置中调整作业日志保留期。
- 执行该查询需要
bigquery.jobs.list权限,以及对应项目的作业历史访问权限。 - 视图区域需与BigQuery项目区域一致,比如项目在
europe-west1,就用europe-west1.INFORMATION_SCHEMA.JOBS_BY_PROJECT。
内容的提问来源于stack exchange,提问作者LeoL
相关产品推荐
相关产品推荐

