由于无法在BigQuery中更新表中的数据,并且仅支持追加机制,因此我决定每月创建新表。因此,假设2012年的表格为(tbl_012012
,tbl_022012
,tbl_032012
,... tbl_122012
)。每条记录将与日期timestamp
一起存储为字符串。
现在,如果我的应用程序想要获取从2012年1月(tbl_012012
)到2012年3月(tbl_032012
)的记录,BigQuery API将通过单个SQL范围查询自动遍历所需的表,或者我必须用额外的应用程序代码编写多个SQL查询来检索每个查询结果然后将它们聚合在一起吗?
答案 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
这将查询表格:
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)
使用通配符。
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