首页 > 解决方案 > 带有 BigQuery 的动态表后缀不限制处理的数据

问题描述

我一直在尝试从特定表中动态选择以减少总处理数据。当手动设置过滤器时,使用 _TABLE_SUFFIX 似乎有效,如下所示

请注意,此处不能选择声明的变量,这是使用 BigQuery Web UI 的计划查询,使用声明的变量似乎会阻止保存输出表。

SELECT * FROM SOME_TABLE
WHERE _TABLE_SUFFIX BETWEEN "20200101" and FORMAT_DATE("%Y%m%d", CURRENT_DATE())

>>> 50MB PROCESSED

但是,根据其他一些表动态设置 _TABLE SUFFIX 似乎会进行全表扫描。注意这里选择的值是一样的。

SELECT * FROM SOME_TABLE
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE("%Y%m%d", (SELECT MAX(date) FROM OTHER TABLE)) and FORMAT_DATE("%Y%m%d", CURRENT_DATE())

>>> 350mb PROCESSED

标签: google-bigquery

解决方案


如果您的表是集群的,那么这根本不是问题。

看:

现在,如果要限制为这些表查询的数据量,可以使用脚本:

DECLARE begin_date STRING 
  DEFAULT (FORMAT_DATE("%Y%m%d", (SELECT MAX(date) FROM OTHER TABLE)));

SELECT * FROM SOME_TABLE
WHERE _TABLE_SUFFIX BETWEEN begin_date and FORMAT_DATE("%Y%m%d", CURRENT_DATE())

推荐阅读