在旧版SQL
中,用户可以使用表格通配符函数,例如TABLE_DATE_RANGE
,TABLE_QUERY
和TABLE_DATE_RANGE_STRICT
。
标准SQL
是否有类似功能?
答案 0 :(得分:14)
在旧SQL中,用户可以使用表通配符函数从数据集中的表子集引用数据。在标准SQL中,用户可以使用UNION ALL
获得相同的结果。但是,当用户想要使用例如日期范围(在遗留SQL中使用TABLE_DATE_RANGE
和TABLE_DATE_RANGE_STRICT
支持)或其他复杂标准(例如,使用TABLE_QUERY
和TABLE_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