在Big Query中查询多个表

Pra*_*kar 14 google-bigquery

由于无法在BigQuery中更新表中的数据,并且仅支持追加机制,因此我决定每月创建新表.因此,假设2012年全年的表是(tbl_012012,tbl_022012,tbl_032012,... tbl_122012).每条记录将与日期一起存储timestamp为字符串.

现在,如果我的应用程序想要获取从2012年1月(tbl_012012)到2012年3月(tbl_032012)的记录,BigQuery API是否会通过单个SQL范围查询自动遍历所需的表,或者我是否必须使用额外的应用程序代码编写多个SQL查询来检索每个查询结果然后将它们聚合在一起?

Edu*_*rdo 35

您还可以使用表通配符函数.以下是StandardSQL 文档中的一个示例:

SELECT 
  name
FROM 
  mydata.people
WHERE 
  age >= 35
  AND
  (_TABLE_SUFFIX BETWEEN '20140325' AND '20140327')
Run Code Online (Sandbox Code Playgroud)

这是LegacySQL(docs)的类似示例.

SELECT 
  name
FROM 
  (TABLE_DATE_RANGE([mydata.people], 
                TIMESTAMP('2014-03-25'), 
                TIMESTAMP('2014-03-27'))) 
WHERE 
  age >= 35
Run Code Online (Sandbox Code Playgroud)

这将查询表:

  • mydata.people20140325
  • mydata.people20140326
  • mydata.people20140327

这些文档还有其他一些选项.我建议你检查一下.


Rya*_*oyd 14

一个SQL查询可以引用多个表.只需在FROM子句中用逗号分隔每个表,即可查询所有提到的表.


Nat*_*yne 5

这是一个演示多表选择示例的代码段:

SELECT trafficSource.medium AS Traffic_Source, COUNT(trafficSource.medium) AS Counts_Source
FROM [608XXXXX.ga_sessions_20131008],
[608XXXXX.ga_sessions_20131009],
[608XXXXX.ga_sessions_20131010],
[608XXXXX.ga_sessions_20131011],
[608XXXXX.ga_sessions_20131012],
[608XXXXX.ga_sessions_20131013],
[608XXXXX.ga_sessions_20131014],
[608XXXXX.ga_sessions_20131015],
GROUP BY Traffic_Source
ORDER BY Counts_Source DESC
Run Code Online (Sandbox Code Playgroud)


Fel*_*ffa 5

2017年更新:

使用 BigQuery #standardSQL - 您可以使用 standardUNION ALL来遍历多个表,也可以使用 a*来匹配共享相同前缀的所有表。使用*匹配器时,您还可以访问元列_TABLE_SUFFIX- 了解行来自哪个表。

SELECT * FROM Roster
UNION ALL
SELECT * FROM TeamMascot
Run Code Online (Sandbox Code Playgroud)