是否可以将所有BigQuery请求记录到云存储中的文件中(甚至更好地记录到BigQuery表中)?似乎bq中提供的--apilog选项主要用于调试目的,但我想要做的是跟踪所有查询,就像在CloudStorage中记录特定文件上的所有访问请求一样。
更具体地说,我不只是想记录我自己的查询,而是(a)同一项目中所有用户的查询,并且最佳地(b)任何人触摸的查询我拥有的数据集中的表格。
答案 0 :(得分:3)
在CLI中,您可以运行bq ls -j -a
来检索项目中所有用户的作业。您可以将所有输出重定向到存储文件。
然后,您可以为每个作业ID bq show -j <job_id>
运行,并且为了获得更多详细信息,您将选择使用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属性传递给所有用户列出作业https://cloud.google.com/bigquery/docs/reference/v2/jobs/list#allUsers
答案 1 :(得分:1)
我知道它已经很晚了,但GCP在其最新版本中引入了审计日志的这一新功能。
请参阅 - Audit Logs BQ
答案 2 :(得分:1)
BigQuery具有INFORMATION_SCHEMA.JOBS_BY_*
视图,可检索有关BigQuery作业的实时元数据。该视图包含当前正在运行的作业以及已完成作业的历史记录的最近180天。
答案 3 :(得分:0)
现在有一种更好的方法可以使用 INFORMATION_SCHEMA 表来做到这一点。
以下是获取过去 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
完整文档可在此处找到:https://cloud.google.com/bigquery/docs/information-schema-jobs