我一直在尝试从特定表中动态选择,以减少总处理数据。当按如下所述手动设置过滤器时,使用_TABLE_SUFFIX似乎可以工作
请注意,此处没有声明的变量,这是使用BigQuery网络用户界面的预定查询,使用声明的变量似乎会阻止保存输出表。
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
答案 0 :(得分:1)
如果您的表是集群的,那么这根本不是问题。
请参阅:
现在,如果要限制查询这些表的数据量,可以使用脚本:
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())