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_RANGE
、TABLE_QUERY
和TABLE_DATE_RANGE_STRICT
等表通配符函数。
标准SQL
有类似的功能吗?
【问题讨论】:
【参考方案1】:在旧版 SQL 中,用户可以使用表通配符函数引用数据集中表子集的数据。在标准 SQL 中,用户可以使用UNION ALL
获得相同的结果。但是,当用户希望使用日期范围(在旧版 SQL 中使用 TABLE_DATE_RANGE
和 TABLE_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_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
【讨论】:
能否添加官方文档的链接 哇,它确实有效!还有什么要知道它是否会在发布版本中得到支持 最新版本的 BigQuery 已支持此功能,我们正在等待官方文档提供此功能。一旦我们准备好,我会发布一个链接。谢谢! 哇!所以它不仅特定于分片表 - 它可以应用于任何具有公共前缀的表,并且“*”将分配给任何后缀。希望文档会出现更多很酷的东西! 例如:如果您有多个日期表 mydataset.mytable_20160101, mydataset.mytable_20160102 ... mydataset.mytable_20160615 如果您想对 2016 年 5 月 21 日到 2016 年 6 月 14 日之间的数据进行操作,则查询为: SELECT ... FROMmydataset.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?
BigQuery:标准 SQL 和 PERCENTILE_CONT() 函数
react-native 中是不是有与 RCTJavaScriptDidLoadNotification 事件等效的 Android?