Google bigquery 记录所有BigQuery查询

Google bigquery 记录所有BigQuery查询,google-bigquery,Google Bigquery,是否可以将所有BigQuery请求记录到云存储中的文件中(或者更好地记录到BigQuery表中)?bq中可用的--apilog选项似乎主要用于调试目的,但我想做的是跟踪所有查询,就像在CloudStorage中记录特定文件上的所有访问请求一样 更具体地说,我不想只记录我自己的查询,而是(a)同一项目中所有用户的查询,以及(b)任何人触摸我拥有的数据集中的表的查询。在CLI中,您可以运行bq ls-j-a为项目中的所有用户检索作业。您可以将所有输出重定向到存储文件 然后,您可以为每个作业id运行a

是否可以将所有BigQuery请求记录到云存储中的文件中(或者更好地记录到BigQuery表中)?bq中可用的--apilog选项似乎主要用于调试目的,但我想做的是跟踪所有查询,就像在CloudStorage中记录特定文件上的所有访问请求一样


更具体地说,我不想只记录我自己的查询,而是(a)同一项目中所有用户的查询,以及(b)任何人触摸我拥有的数据集中的表的查询。

在CLI中,您可以运行
bq ls-j-a
为项目中的所有用户检索作业。您可以将所有输出重定向到存储文件

然后,您可以为每个作业id运行a
bq show-j
,为了获得更多详细信息,您将选择使用json响应:

bq show --format=prettyjson -j job_joQEqPwOiOoBlOhDBEgKxQAlKJQ
这将返回以下格式,其中包含已处理的查询、用户和字节等

{
  "configuration": {
    "dryRun": false, 
    "query": {
      "createDisposition": "CREATE_IF_NEEDED", 
      "destinationTable": {
        "datasetId": "", 
        "projectId": "", 
        "tableId": ""
      }, 
      "query": "", 
      "writeDisposition": "WRITE_TRUNCATE"
    }
  }, 
  "etag": "", 
  "id": "", 
  "jobReference": {
    "jobId": "", 
    "projectId": ""
  }, 
  "kind": "bigquery#job", 
  "selfLink": "", 
  "statistics": {
    "creationTime": "1435006022346", 
    "endTime": "1435006144730", 
    "query": {
      "cacheHit": false, 
      "totalBytesProcessed": "105922683030"
    }, 
    "startTime": "1435006023171", 
    "totalBytesProcessed": "105922683030"
  }, 
  "status": {
    "state": "DONE"
  }, 
  "user_email": ""
}

使用API,您需要传递allUsers属性以列出来自所有用户的作业

我知道时间很晚了,但GCP在其最新版本中引入了审计日志这一新功能


请参阅此-

BigQuery具有
信息\u架构。作业\u BY.*
视图,以检索有关BigQuery作业的实时元数据。此视图包含当前正在运行的作业,以及最近180天已完成作业的历史记录


有关更多信息,请参见

现在有一种更好的方法可以通过信息模式表来实现这一点

以下是一种简单的方法,可以获取过去90天内项目的所有查询:

 SELECT
   job_id,
   start_time,
   user_email,
   total_bytes_processed,
   query
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 90 DAY) 
 AND CURRENT_TIMESTAMP()
 AND job_type = "QUERY"
 AND end_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 90 DAY) AND CURRENT_TIMESTAMP()
ORDER BY total_bytes_processed DESC

完整的文档可以在这里找到:

最棒的是一些定期运行该查询并将新结果附加到BQ表的示例代码。写起来并不难,但我相信已经有人做过了。你可能想添加行数
bq ls-j-a-n 1000
来显示超过50个查询。