在 BigQuery 中,有没有办法查看所有用户的所有查询?

Mat*_*off 5 google-bigquery

目前我的角色是所有者,但我没有看到查看所有用户的所有查询的方法。我主要对查看为每个成功查询处理的字节感兴趣。如果没有这种能力,就很难在不单独询问每个用户的情况下确定成本的来源。有没有办法通过 UI 或 CLI 命令来做到这一点?

Dan*_*itt 5

在 CLI 中,您可以运行bq ls -j -a以检索项目中所有用户的作业。我认为此命令不会返回成功查询处理的字节,但bq show成功查询的作业 ID 会检索相关信息。

直接使用API​​,您可以指定请求allUsers的参数jobs.list

目前无法在 Web UI 中查看此信息。


Mat*_*off 3

丹尼·基特的回答让我明白了这一点。这是我编写的 Ruby 脚本之一,它最终给了我我想要的东西。应该很容易移植到您选择的语言。

#!/usr/bin/ruby

require "json"
require "time"

MAX_RESULTS = 1000

jobs_json = `bq ls --format json --jobs --all --max_results #{MAX_RESULTS}`
jobs = JSON.parse(jobs_json)

users = {}
jobs.each do |job|
    if job["Job Type"] == "query" and job["State"] == "SUCCESS"
        job_data_json = `bq show --format=json --job #{job["jobId"]}`
    job_data = JSON.parse(job_data_json)
    creation_time = Time.at(job_data["statistics"]["creationTime"][0..-4].to_i)
    user = job_data["user_email"]
    bytes_processed = job_data["statistics"]["totalBytesProcessed"].to_i
    if bytes_processed > 0
      users[user] = 0 unless users.key?(user)
      users[user] += bytes_processed
      puts "[#{creation_time}] #{user}: #{bytes_processed} (running total: #{users[user]})"
      # puts job_data["configuration"]["query"]["query"]
    end
    end
end

puts "\nFINAL:\n"

users.each do |user, bytes_processed|
  puts "#{user}: #{bytes_processed}"
end
Run Code Online (Sandbox Code Playgroud)