如何知道大查询中缓存查询的第一个运行的jobId?

Posted

技术标签:

【中文标题】如何知道大查询中缓存查询的第一个运行的jobId?【英文标题】:How to know the first ran jobId of a cached query in big-query? 【发布时间】:2021-12-29 10:05:15 【问题描述】:

当我们在大查询环境中运行查询时,结果会缓存在临时表中。从下一次开始,当我们多次运行同一个查询时,后续运行将在接下来的 24 小时内从缓存中获取结果,但有一些例外。现在我的用例是,在随后的运行中,我想知道这个查询缓存结果是从哪个 jobId 获得的,之前第一次运行查询??

我检查了所有与查询相关的 java 文档,但没有找到该信息。我们有cacheHit 变量,它将告诉您查询是否已从缓存中获取。在这里,我想进一步了解,从什么 jobId 获取结果。我希望像,可能在这个method 我可以知道信息,但我总是得到空值。我也想知道大查询上下文中的 parentJob 是什么意思。

【问题讨论】:

【参考方案1】:

除了作为技术练习之外,您还不清楚为什么您甚至会关心这个。如果您想构建自己的应用程序缓存层,那就另当别论了。有关查询缓存的更多详细信息,请访问 https://cloud.google.com/bigquery/docs/cached-results。

最简单的方法可能是遍历jobs.list,直到找到具有相同目标表的作业(它将以anon 前缀开头),并且cacheHit stat 所在的位置错误/不存在。

您对parentJob 的询问与本练习无关。它用于查找作为脚本或多语句执行的一部分创建的所有子作业。有关这方面的更多信息,请访问https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting-concepts。

【讨论】:

为了给你上下文,我正在开发一个监控系统,第一次运行查询时,我们可以看到数据集名称、阶段详细信息和其他详细信息。从下一次运行相同的查询开始,我们将无法看到这些详细信息,如果我们有办法将缓存的查询与原始查询链接起来,那么最终用户会更清楚,所以我就是检查谷歌是否提供了这些详细信息(首先运行 JOBID 详细信息)。是的,如果谷歌没有提供,那么我们必须按照您建议的方式进行 使用 INFORMATION_SCHEMA 作业表在聚合中执行此操作可能会更好,而不是使用 API 将其拼接在一起:cloud.google.com/bigquery/docs/information-schema-jobs

以上是关于如何知道大查询中缓存查询的第一个运行的jobId?的主要内容,如果未能解决你的问题,请参考以下文章

查询后如何更新 Apollo 缓存?

如何在 Redshift Query 中禁用使用缓存结果?

SQL 子查询大于/小于运算符

如何禁用 Django 查询缓存?

大查询:如何检索与字段 2 对应的字段 1 中的值

Laravel - 如何查看查询来源?