BigQuery 中是不是有与标准 SQL 等效的表通配符函数?

Posted

技术标签:

【中文标题】BigQuery 中是不是有与标准 SQL 等效的表通配符函数?【英文标题】:Is there an equivalent of table wildcard functions in BigQuery with standard SQL?BigQuery 中是否有与标准 SQL 等效的表通配符函数? 【发布时间】:2016-06-06 18:14:44 【问题描述】:

在旧版SQL 中,用户可以使用TABLE_DATE_RANGETABLE_QUERYTABLE_DATE_RANGE_STRICT 等表通配符函数。

标准SQL有类似的功能吗?

【问题讨论】:

【参考方案1】:

在旧版 SQL 中,用户可以使用表通配符函数引用数据集中表子集的数据。在标准 SQL 中,用户可以使用UNION ALL 获得相同的结果。但是,当用户希望使用日期范围(在旧版 SQL 中使用 TABLE_DATE_RANGETABLE_DATE_RANGE_STRICT 支持)或其他复杂条件(由 @987654326 支持)来动态确定表集时,此方法可能不方便@ 在旧版 SQL 中)。对于标准 SQL,BigQuery 提供了与下面描述的等效项。

可以使用标准 SQL 重写以下使用 TABLE_QUERY 通配符函数的旧 SQL 查询。

旧版 SQL 查询(使用 TABLE_QUERY):

SELECT SUM(value1)
FROM TABLE_QUERY([myproject:mydataset],"table_id = 'mydailytable_20150105' OR
table_id = 'mydailytable_20150106' OR table_id = 'maydailytable_20150110'")
GROUP BY value2;

旧版 SQL 查询(使用 TABLE_DATE_RANGE):

SELECT SUM(value1)
FROM TABLE_DATE_RANGE([myproject:mydataset], TIMESTAMP("2015-01-05"), TIMESTAMP("2015-01-10"))

标准 SQL 查询:

SELECT SUM(value1)
FROM `myproject.mydataset.mydailytable_*`
WHERE _TABLE_SUFFIX = '20150105'
  OR _TABLE_SUFFIX = '20150106'
  OR _TABLE_SUFFIX = '20150110'
GROUP BY value2;

在上述查询中,通配符表myproject.mydataset.mydailytable_* 匹配数据集中myproject.mydataset 中所有具有table_idmydailytable_ 开头的表。例如,要匹配数据集中的所有表,用户可以使用空前缀作为通配符。所以,myproject.mydataset.* 匹配数据集中的所有表。

由于* 是一个特殊字符,因此在查询中使用通配符表名时必须用引号引起来。

_TABLE_SUFFIX 伪列:

_TABLE_SUFFIX 伪列的类型为 STRING,可以像任何其他列一样使用。它是一个保留的列名,因此在将其用作 SELECT 列表的一部分时需要为其加上别名。

此功能的官方文档可在此处获得:

https://cloud.google.com/bigquery/docs/wildcard-tables https://cloud.google.com/bigquery/docs/querying-wildcard-tables

【讨论】:

能否添加官方文档的链接 哇,它确实有效!还有什么要知道它是否会在发布版本中得到支持 最新版本的 BigQuery 已支持此功能,我们正在等待官方文档提供此功能。一旦我们准备好,我会发布一个链接。谢谢! 哇!所以它不仅特定于分片表 - 它可以应用于任何具有公共前缀的表,并且“*”将分配给任何后缀。希望文档会出现更多很酷的东西! 例如:如果您有多个日期表 mydataset.mytable_20160101, mydataset.mytable_20160102 ... mydataset.mytable_20160615 如果您想对 2016 年 5 月 21 日到 2016 年 6 月 14 日之间的数据进行操作,则查询为: SELECT ... FROM mydataset.mytable_2015* WHERE _TABLE_SUFFIX BETWEEN '0521' 和 '0614' ?如果您想要 2015 年 6 月 15 日到 2016 年 6 月 14 日,查询将是:SELECT ... FROM mydataset.mytable_* WHERE _TABLE_SUFFIX BETWEEN '20150615' AND '20160614'

以上是关于BigQuery 中是不是有与标准 SQL 等效的表通配符函数?的主要内容,如果未能解决你的问题,请参考以下文章

是否有与 SQL Server NewId() 函数等效的 Access?

WatchKit 中是不是有与 UIView 等效的类?

插件中是不是有与 Bootstrap 类等效的类

BigQuery:标准 SQL 和 PERCENTILE_CONT() 函数

css中是不是有与背景图像等效的前景?

react-native 中是不是有与 RCTJavaScriptDidLoadNotification 事件等效的 Android?