BigQuery中是否有与标准SQL相同的表通配符函数?

时间:2016-06-06 18:14:45

标签: google-bigquery

在旧版SQL中,用户可以使用表格通配符函数,例如TABLE_DATE_RANGETABLE_QUERYTABLE_DATE_RANGE_STRICT

标准SQL是否有类似功能?

1 个答案:

答案 0 :(得分:14)

在旧SQL中,用户可以使用表通配符函数从数据集中的表子集引用数据。在标准SQL中,用户可以使用UNION ALL获得相同的结果。但是,当用户想要使用例如日期范围(在遗留SQL中使用TABLE_DATE_RANGETABLE_DATE_RANGE_STRICT支持)或其他复杂标准(例如,使用TABLE_QUERYTABLE_QUERY支持)动态确定表集时,此方法可能不方便(在遗留SQL中由TABLE_QUERY支持。使用标准SQL,BigQuery提供了与下面描述的等价物。

可以使用标准SQL重写以下使用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查询。

旧版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_*

标准SQL查询:

myproject.mydataset

在上面的查询中,通配符表table_id匹配数据集mydailytable_中以myproject.mydataset.*开头*的所有表。例如,要匹配数据集中的所有表,用户可以使用通配符的空前缀。因此,_TABLE_SUFFIX匹配数据集中的所有表。

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

mstest.exe伪列:

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

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

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