查找在BigQuery中创建表的人



是否有一种方法可以比较容易地识别在BigQuery中创建每个表的用户?我试过检查INFORMATION_SCHEMA.TABLES,但似乎没有信息在那里。


更新

以下面Daniel的回答为基础,这将为您提供每个表的最新创建版本,以及仅过滤当前存在的表。

SELECT x.* EXCEPT(is_current) 
FROM (
SELECT destination_table.dataset_id as table_schema,
destination_table.table_id   as table_name,
user_email,
creation_time,
CASE WHEN RANK() OVER(PARTITION BY destination_table.dataset_id, 
destination_table.table_id 
ORDER BY creation_time DESC) = 1 THEN 1 
ELSE 0 
END as is_current,
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE statement_type IN ('CREATE_TABLE', 'CREATE_TABLE_AS_SELECT')
ORDER BY creation_time DESC) x
INNER JOIN `region-us`.INFORMATION_SCHEMA.TABLES y ON x.table_schema = y.table_schema AND 
x.table_name = y.table_name
WHERE is_current = 1
ORDER BY 1,2;

您应该能够运行以下命令:

select * 
from `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE statement_type LIKE 'CREATE_TABLE%'
order by creation_time desc
;

表中包含执行该语句的user_email。有关JOBS_BY_*视图的更多信息,请参阅文档:https://cloud.google.com/bigquery/docs/information-schema-jobs

根据shollyman的反馈,这里有一些额外的考虑对于通过QUERY的job_type创建的表,你可能想要寻找一些额外的statement_types,列表可以在这里找到:https://cloud.google.com/bigquery/docs/reference/auditlogs/rest/Shared.Types/BigQueryAuditMetadata.QueryStatementType

此外,还定义了其他可以创建表的作业类型。以job_type为COPYLOAD为例。

视图只包含过去180天的数据,所以如果超过180天,您必须将审计日志持久化到云存储或大查询中。

您也可以使用下面的查询来获取详细信息:

bq query --nouse_legacy_sql -n 1000 "
select * from DATABASE_NAME.INFORMATION_SCHEMA.TABLES where table_name='TABLE_NAME'
"

最新更新