繁体   English   中英

查找谁在 BigQuery 中创建了表

[英]Find who created a table in 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/参考/auditlogs/rest/Shared.Types/BigQueryAuditMetadata.QueryStatementType

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

该视图仅包含过去 180 天的数据,因此您必须将审计日志持久保存到云存储或大查询中。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM