BigQuery查询最新的表格有效 [英] BigQuery Query Latest Table Efficiently

查看:83
本文介绍了BigQuery查询最新的表格有效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从包含 project_id:dataset:dataset_20160101 形式的表的数据集中的 latest 表进行高效查询, project_id:dataset:dataset_20160102 等。



这个查询似乎是推荐的解决方案:



pre $ SELECT $ * b $ b FROM`project_id.dataset。*`
WHERE _TABLE_SUFFIX =(SELECT MAX(table_id)FROM`project_id.dataset .__ TABLES_SUMMARY__`)

然而,这个查询让我访问所有表在数据集中,不只是最新的一个。为什么会这样?

解决方案

现在,如果您有一个插入表的管道,那么在管道末端,可以
(1)获得MAX(table_id)
(2)创建一个视图,其中包含以下查询:

  SELECT 
*,
DATE max_table_id AS _LATEST_DATE,
PARSE_DATE('%E4Y%m%d',_TABLE_SUFFIX)AS _DATA_DATE
FROM`project_id.dataset。*`

然后,只要您想查询数据,您就可以针对该视图进行查询,并指定_DATA_DATE = _LATEST_DATE作为过滤器。在这种情况下,_LATEST_DATE是预先计算的,所以它是不变的。正如华解释的那样,您只会处理最新的表格。


I'm trying to efficiently query from the latest table in a dataset that consists of tables of the form project_id:dataset:dataset_20160101, project_id:dataset:dataset_20160102 etc.

This query seems to be the recommended solution:

SELECT * 
FROM `project_id.dataset.*`
WHERE _TABLE_SUFFIX=(SELECT MAX(table_id) FROM `project_id.dataset.__TABLES_SUMMARY__`)

However, this query bills me for accessing all tables in the dataset, not just the latest one. Why is that?

解决方案

For now, if you have a pipeline which inserts tables, then at the end of the pipeline, you could (1) get the MAX(table_id) (2) create a view with following query:

SELECT
        *,
        DATE max_table_id AS _LATEST_DATE,
        PARSE_DATE('%E4Y%m%d', _TABLE_SUFFIX) AS _DATA_DATE
FROM `project_id.dataset.*`

Then whenever you want to query the data, you could just query against the view, and specify _DATA_DATE=_LATEST_DATE as the filter. In this case, _LATEST_DATE is pre-calculated, so it's constant. As Hua explained, you will be billed for processing only the latest table.

这篇关于BigQuery查询最新的表格有效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆