Google bigquery 如何使用标准查询查询最新的表
在遗留SQL中,我发现这种语法对于从带有日期后缀的表集中查询最新的表非常有用Google bigquery 如何使用标准查询查询最新的表,google-bigquery,Google Bigquery,在遗留SQL中,我发现这种语法对于从带有日期后缀的表集中查询最新的表非常有用 SELECT * FROM TABLE_QUERY([project_id:dataset], 'table_id = (SELECT MAX(table_id) FROM [project_id:dataset.__TABLES__] WHERE table_id CONTAINS "tablename_2016") ') 因此,如果我
SELECT *
FROM
TABLE_QUERY([project_id:dataset],
'table_id = (SELECT MAX(table_id)
FROM [project_id:dataset.__TABLES__]
WHERE table_id CONTAINS "tablename_2016")
')
因此,如果我有一组表,比如tablename_20161205、tablename_20161206、tablename_20161219,那么在这种情况下,查询将找到最新的表,即tablename_20161219,我不需要查看所有表并指定最新的表
如何在标准SQL中实现这一点?
Thx太多了。您可以使用一个可能带有过滤器的过滤器来限制初始搜索。比如说,
WITH RecentTables AS (
SELECT *, _TABLE_SUFFIX
FROM `project_id.dataset.*`
WHERE _TABLE_SUFFIX >= "tablename_2016"
),
LatestTable AS (
SELECT *
FROM RecentTables
WHERE _TABLE_SUFFIX = (SELECT MAX(_TABLE_SUFFIX) FROM RecentTables)
)
SELECT *
FROM LatestTable;
为了看起来更好,我在标准SQL中的查询将是
With LatestTable AS
(
Select Max(_table_Suffix) as LatestTableName
From `project_id.dataset.*`
Where regexp_contains(_Table_Suffix, "tablename_2016")
)
SELECT *
FROM `project_id.dataset.*`
WHERE _Table_Suffix = (Select LatestTableName from LatestTable)
太棒了,非常感谢你。根据您的回答,我有一个更简单的解决方案,使用LatestTable作为从'project\u id.dataset.*'中选择Max\u table\u后缀作为TableName,其中regexp\u包含\u table\u后缀,TableName\u 2016从'project\u id.dataset.*'中选择TableName\u后缀=从LatestTable中选择TableName。。再次感谢你的建议。如果这对你有效,你能吗?我喜欢你的答案。然而值得注意的是,这将读取数据集中的所有表,而当您使用WHERE _TABLE_SUFFIX='TABLE_name'时,您只读取一个表。虽然您的答案很好,而且比公认的答案更有效,但仍有改进的余地。
With LatestTable AS
(
Select Max(_table_Suffix) as LatestTableName
From `project_id.dataset.*`
Where regexp_contains(_Table_Suffix, "tablename_2016")
)
SELECT *
FROM `project_id.dataset.*`
WHERE _Table_Suffix = (Select LatestTableName from LatestTable)