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

Pav*_*ara 8 google-bigquery

在传统的SQL,用户可以像使用通配符表功能TABLE_DATE_RANGE,TABLE_QUERYTABLE_DATE_RANGE_STRICT.

标准有类似的功能SQL吗?

Pav*_*ara 14

在旧SQL中,用户可以使用表通配符函数从数据集中的表子集引用数据.在标准SQL中,用户可以使用相同的结果UNION ALL.但是,当用户希望使用例如日期范围(使用旧版SQL 支持TABLE_DATE_RANGETABLE_DATE_RANGE_STRICT旧版SQL)或其他复杂条件(TABLE_QUERY旧版SQL 支持)动态确定表集时,此方法可能不方便.使用标准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;
Run Code Online (Sandbox Code Playgroud)

旧版SQL查询(使用TABLE_DATE_RANGE):

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

标准SQL查询:

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

在上面的查询中,通配符表myproject.mydataset.mydailytable_*匹配数据集中myproject.mydataset以所有table_id开头的所有表mydailytable_.例如,要匹配数据集中的所有表,用户可以使用通配符的空前缀.因此,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

  • 例如:如果您有多个日期表mydataset.mytable_20160101,mydataset.mytable_20160102 ... mydataset.mytable_20160615如果您想在2016年5月21日到2016年6月14日期间对数据进行操作,则查询将为:SELECT ... FROM`mydataset .mytable_2015*`在'0521'和'0614'之间_TABLE_SUFFIX?如果你想要2015年6月15日到2016年6月14日,那么查询将是:SELECT ... FROM`mydataset.mytable_*`WHERE _TABLE_SUFFIX BETWEEN'20150615''''20160614' (3认同)