google-bigquery - 带有 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
解决方案
如果您的表是集群的,那么这根本不是问题。
看:
现在,如果要限制为这些表查询的数据量,可以使用脚本:
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())
推荐阅读
- python - 获得滚动 15 分钟的最大值
- php-7 - 语法错误,视图中出现意外的“,”,但视图文件中没有“,”
- c# - Json 到 C# 对象处理动态属性
- c# - 我应该如何将我的刷新令牌换成新的访问令牌?
- visual-studio-2019 - 上下文菜单的“编辑 csproj”在 Visual Studio 2019 中间歇性不起作用
- azure - 当源数据集是 Blob 存储时,我可以在 Azure 数据工厂中一次填充不同的 SQL 表吗?
- c# - “在网络聊天中测试”现在无法正常工作,但 2 天前工作正常
- python - 是否可以在 python 中加快将列表转换为数组的速度?
- sql - 将表的一行与第二个表的每一行进行比较
- apollo-server - GraphQL:具有命名空间的 Apollo Server 订阅