首页 > 解决方案 > 如何使用python实时监控Bigquery中特定表的Stackdriver日志?

问题描述

我正在使用 BI 工具查看 Bigquery 中的数据。数据分布在多个表中,因此我在查询中有几个 JOINS 以获取所需格式的数据。由于处理所有这些数据需要一分钟,并且我想要一种实时的体验,因此我创建了一个计划查询来运行该查询,该查询执行连接并将输出保存到一个表中。表中的数据每 30 分钟从 ETL 工具馈送一次(增量加载)。这将创建 Bigquery 作业以加载数据。

我有一个特定的表,在这个表的工作完成后,我想运行预定的查询。

我在计划查询中禁用了计划并使其只能在 API 调用期间运行。我编写了一个 python 脚本,将 API 请求发送到预定查询。

python中是否有任何方法可以实时监控特定Bigquery表的日志,因此当特定表的作业状态更改为“Succeeded”时,我将向计划查询发送API请求以运行计划查询?

我看到Stackdriver 记录 python 代码,似乎我必须反复发出 API 请求来模拟实时监控。我似乎无法过滤特定表的 API 请求中的结果,我从日志结果中编写了一些脚本来为我执行此操作。

有没有原生的库?

标签: google-bigquerygoogle-cloud-stackdriver

解决方案


如果您提到的过滤器是正确的,这应该可以工作:

from google.cloud import logging
from google.cloud.logging import DESCENDING

filter = 'resource.type="bigquery_resource" AND protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.tableId="tableID" AND log_name="projects/projectID/logs/cloudaudit.googleapis.com%2Fdata_access" AND proto_payload.method_name="jobservice.jobcompleted'



for element in logging_client.list_entries(order_by=DESCENDING, filter_=filter): 
     .... YOUR LOGIC HERE ...

如果您需要实时解决方案(一些等待日志到达的代码),您应该自己实现。上面的代码将带来与您的过滤器相关的所有日志,按日期降序排列。如果您只想列出最后的日志,您还应该更改过滤器添加时间戳过滤器。

如果您有任何问题,请随时问我。我希望它有帮助


推荐阅读