BigQuery中是否存在与标准SQL中的表通配符函数等效的函数



在传统的SQL中,用户可以使用表通配符函数,如TABLE_DATE_RANGETABLE_QUERYTABLE_DATE_RANGE_STRICT

标准SQL是否有类似的功能?

在遗留SQL中,用户可以使用表通配符函数引用数据集中表的子集中的数据。在标准SQL中,用户可以使用UNION ALL获得相同的结果。然而,当用户想要使用例如日期范围(在传统SQL中使用TABLE_DATE_RANGETABLE_DATE_RANGE_STRICT支持)或其他复杂标准(在传统SQL中使用TABLE_QUERY支持)来动态确定表集时,这种方法可能不方便。对于标准SQL,BigQuery提供了一个与下面描述的等价的功能。

以下使用TABLE_QUERY通配符函数的遗留SQL查询可以使用标准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中具有以mydailytable_开头的table_id的所有表。例如,为了匹配数据集中的所有表,用户可以为通配符使用空前缀。因此,myproject.mydataset.*匹配数据集中的所有表。

由于*是一个特殊字符,所以在查询中使用通配符表名时必须将其引用。

_TABLE_SUFFIX伪列:

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

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

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

最新更新