bigquery 表的上次访问日期
Posted
技术标签:
【中文标题】bigquery 表的上次访问日期【英文标题】:Last access date for bigquery tables 【发布时间】:2019-11-04 12:28:11 【问题描述】:有没有办法在 BigQuery 中获取表的“最后访问”日期?我发现了同样的问题 Get the Last Access date for all BigQuery tables in a BigQuery Project
但无法发表评论或回复,所以我再次询问。
从哪里得到这张桌子? -> 来自fh-bigquery.audit.cloudaudit_googleapis_com_data_access_201811*
我的 bQ 项目 ID 是“test-247020”,而我的数据集名称是 BabyName。
我该如何进行这项工作?
非常感谢您的帮助。
更新我正在使用的查询:
WITH tables AS (
SELECT FORMAT("%s.%s.%s", table.projectId, table.datasetId, table.tableId) table
, MAX(timestamp) last_access
FROM (
SELECT timestamp
, protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.referencedTables
FROM `test-247020.BabyName.cloudaudit_googleapis_com_data_access`
), UNNEST(referencedTables) table
GROUP BY 1
)
SELECT *
FROM tables
【问题讨论】:
再读一遍那个答案 【参考方案1】:Google Cloud Platform 提供了不同的方法来检索有关 BigQuery 作业和数据集/表的信息。
1 - BigQuery 网页界面:
在BigQuery web UI 的左侧面板上,可以找到“查询历史”,其中显示了与针对不同数据集测试的查询相关的执行详细信息。如果作业按日期排序,最后一个将显示在顶部。此外,“项目历史”选项卡将以前的信息扩展到整个项目。这样,就可以看到特定用户执行的查询。
2 - Stackdriver 日志记录:
Stackdriver Logging 在检查来自不同 Google Cloud Platform 产品的日志时非常有用。 使用以下Advanced filter,可以检索output logs corresponding to queries executed in BigQuery:
resource.type="bigquery_project"
protoPayload.methodName="google.cloud.bigquery.v2.JobService.InsertJob"
通过选择“最后一小时”和“跳到现在”选项,最后访问的数据将显示在日志面板的底部。
还可以将给定数据集的特定 Stackdriver 日志配置 export 记录到 BigQuery 中。这将创建一个新表,其中包含针对所选数据集执行的查询的日志信息。每次更新此类导出时,都会将新日志加载到日志表中。
3 - 云壳:
获取上次访问表信息的另一种方法是使用Cloud Shell 中的bq
command。以下 bash 脚本将以 JSON 格式检索与上一个查询相关的所有数据。
#!/bin/bash
# Get the jobID of the last executed query
LAST_JOB_ID=$(bq ls -j -a | grep query | head -1 | awk 'print $1')
echo Query $LAST_JOB_ID job info
# retrieving the job_ID info in json format
bq show --format=prettyjson -j $LAST_JOB_ID
在“referencedTables”字段中可以找到对应的数据集名称、projectID和表名:
"referencedTables": [
"datasetId": "DATASET”,
"projectId": "PROJECTID",
"tableId": "TABLE"
]
【讨论】:
【参考方案2】:您需要先导出日志from Logging to BigQuery。
【讨论】:
【参考方案3】:我去了日志资源管理器,以下查询有效 -
resource.type="bigquery_resource"
protoPayload.authorizationInfo.resource="projects/<PROJECT_NAME>/datasets/<DATASET_NAME>/tables/<TABLE_NAME>"
protoPayload.methodName="jobservice.insert"
【讨论】:
以上是关于bigquery 表的上次访问日期的主要内容,如果未能解决你的问题,请参考以下文章
需要关于基于非日期列和日期分区在 bigquery 中拆分表的建议