是否可以在 google bigquery 中检索扩展的或完整的查询历史记录?
Is it possible to retrieve an extended or full query history in google bigquery?
我最近发现我不小心从 BigQuery 中删除了一个 table,它是通过查询其他 table 构建的(我仍然有)。
由于 BigQuery 中的 table 删除是永久性的(对吗?),我想重建丢失的 table,最好不要重写查询。
webUI 中的查询历史记录显然只显示有限数量的查询。很遗憾,我要找的那个不在那个列表中。
所以我的问题是,是否有可能以某种方式恢复已从查询历史记录中消失的查询?
(我知道我要查找的查询的创建日期)
使用 JobID
,您可以查询特定职位(documented here). This will give you a Jobs 资源,它将包含您的查询。
如果您不知道 JobID...我假设这取决于查询的方式 运行。它可能由 App Engine(如果您 运行 通过代码)记录在开发者控制台的日志部分。您还可以查看 Jobs List(归功于 OP)并查看您最近的工作。您还可以从列表中获得工作资源,因此它们将包含您需要的一切。
在 CLI 中,您可以 运行 bq ls -j -a
检索项目中 所有 用户的工作。
然后您可以 运行 为每个工作 ID 一个 bq show -j <job_id>
并且为了获得更多详细信息,您将选择使用 json 响应:
bq show --format=prettyjson -j job_joQEqPwOiOoBlOhDBEgKxQAlKJQ
此 returns 以下格式包含您的查询、您的用户和已处理的字节等...
{
"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
这可以使用 stackdriver 审核日志来完成。 Here 是更多信息。
即使您没有设置 stackdriver 日志记录,您仍然可以尝试查找您的查询。 BigQuery 日志默认启用,您可以在 30 天内从 stackdriver 检索这些日志。
我最近发现我不小心从 BigQuery 中删除了一个 table,它是通过查询其他 table 构建的(我仍然有)。
由于 BigQuery 中的 table 删除是永久性的(对吗?),我想重建丢失的 table,最好不要重写查询。
webUI 中的查询历史记录显然只显示有限数量的查询。很遗憾,我要找的那个不在那个列表中。
所以我的问题是,是否有可能以某种方式恢复已从查询历史记录中消失的查询?
(我知道我要查找的查询的创建日期)
使用 JobID
,您可以查询特定职位(documented here). This will give you a Jobs 资源,它将包含您的查询。
如果您不知道 JobID...我假设这取决于查询的方式 运行。它可能由 App Engine(如果您 运行 通过代码)记录在开发者控制台的日志部分。您还可以查看 Jobs List(归功于 OP)并查看您最近的工作。您还可以从列表中获得工作资源,因此它们将包含您需要的一切。
在 CLI 中,您可以 运行 bq ls -j -a
检索项目中 所有 用户的工作。
然后您可以 运行 为每个工作 ID 一个 bq show -j <job_id>
并且为了获得更多详细信息,您将选择使用 json 响应:
bq show --format=prettyjson -j job_joQEqPwOiOoBlOhDBEgKxQAlKJQ
此 returns 以下格式包含您的查询、您的用户和已处理的字节等...
{
"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
这可以使用 stackdriver 审核日志来完成。 Here 是更多信息。
即使您没有设置 stackdriver 日志记录,您仍然可以尝试查找您的查询。 BigQuery 日志默认启用,您可以在 30 天内从 stackdriver 检索这些日志。