如何检索与 BigQuery 作业关联的用户和 SQL 代码?

Mic*_*mes 3 google-bigquery google-cloud-platform

出于安全目的,我希望能够审核谁在某个项目中运行了哪些类型的查询。这可能吗?

bq ls -j从命令行使用会提供一些信息;bg show -j多给一点。但既不显示用户也不显示查询本身。

Pen*_*m10 5

在 CLI 中,您可以运行bq ls -j -a以检索项目中所有用户的作业。

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

bq show --format=prettyjson -j job_joQEqPwOiOoBlOhDBEgKxQAlKJQ
Run Code Online (Sandbox Code Playgroud)

这将返回以下格式,其中包含您的查询、您的用户和字节处理等...

{
  "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": ""
}
Run Code Online (Sandbox Code Playgroud)

使用 API,您需要传递 allUsers 属性以列出所有用户的作业https://cloud.google.com/bigquery/docs/reference/v2/jobs/list#allUsers