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 中拆分表的建议

在bigquery中转换整个表的时间戳

使用 bigquery 表 GET api 获取表的最后修改日期

使用bigquery表GET api获取表的最后修改日期

以编程方式检查上次通过查询访问表的时间?

使用模板表的 BigQuery 流式插入 - 503 错误