在Big Query中查询多个表

时间:2012-11-01 06:02:57

标签: google-bigquery

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

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

5 个答案:

答案 0 :(得分:33)

您还可以使用表格通配符功能。以下是StandardSQL的docs中的一个示例:

SELECT 
  name
FROM 
  mydata.people
WHERE 
  age >= 35
  AND
  (_TABLE_SUFFIX BETWEEN '20140325' AND '20140327')

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

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

这将查询表格:

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

docs还有其他一些选项。我建议你查看它们。

答案 1 :(得分:14)

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

答案 2 :(得分: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

答案 3 :(得分:2)

2017年更新:

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

SELECT * FROM Roster
UNION ALL
SELECT * FROM TeamMascot

答案 4 :(得分:1)

标准SQL。

使用通配符。

SELECT trafficSource.medium AS Traffic_Source, COUNT(trafficSource.medium) AS Counts_Source
FROM `608XXXXX.ga_sessions_201310*`
GROUP BY Traffic_Source
ORDER BY Counts_Source DESC