首页 > 解决方案 > 如何在 BigQuery 中手动查询缓存表

问题描述

假设我有以下查询:

select 1

如果我再次运行查询,它将从缓存中获取它:

查询完成(经过 0.1 秒,已缓存)

但是,如果我运行如下查询:

SELECT 1

它不会从缓存中抓取它。有没有办法手动查询缓存表?例如,转换SELECT 1为查询SELECT * FROM name_of_cache_table

查询规范化在上述情况下有效,但出于我们的目的,我们希望能够在必要时直接访问缓存。

标签: sqlgoogle-bigquery

解决方案


可以查询缓存表,因为它创建了一个匿名表。有关更多详细信息,请参阅如何存储缓存结果

为了能够查看这些匿名表,您需要bq ls -a在终端中调用,因为无法在 BQ UI 中查看它们。请参阅列出数据集

但请注意,不鼓励从缓存表中查询,因为它们会在 24 小时内过期。

我在我的项目中尝试了这个,我得到了一些匿名表(我更改了给定测试表的一些值,只是为了使它们与我的不是 100% 相同)。

命令:

bq ls -a --project_id my-project

匿名表以下划线开头,然后是随机字符串值:

_04c819c1520b1c756fc2a6364v87c5fc9d53f48c
_18af1144380d70b33cc27c9975c444fdfe36dfa9
_730f58d68c6f40ed0335322e46c4c87cer3af6290
....

要检查您需要的数据是否在这些数据集上,您可以检查 __TABLES__ ,它将返回和 之类的creation_time字段last_modified_time

检查表元数据:


SELECT
 * 
FROM
 `_730f58d68c6f40ed0335322e46c4c87cer3af6290.__TABLES__`

元数据结果:

在此处输入图像描述

尝试查询以下表之一:

SELECT
 * 
FROM
 `_730f58d68c6f40ed0335322e46c4c87cer3af6290.anon36335c2bcd73b61558b7028ca8666efac3802a28`

匿名表的结果:

在此处输入图像描述


推荐阅读