2015-02-10 44 views

回答

8

要查找最新的表,你可以使用BigQuery的表查询功能:

例如,最新的每日GitHubArchive表:

SELECT COUNT(*) num_records 
FROM TABLE_QUERY(githubarchive:day, 
    "table_id IN (
    SELECT table_id FROM githubarchive:day.__TABLES__ 
    ORDER BY creation_time DESC LIMIT 1)") 

# 201859 

为了最大限度地方便,你可以在查询存储为视图与他人分享。然后,查询最新的表格,只需查询视图:

SELECT num_records 
FROM [fh-bigquery:public_dump.githubarchive_latest_day] 

# 201859 

更多关于表查询功能,看到乔丹的回答How do I use the TABLE_QUERY() function in BigQuery?

2

Felipe的答案使用Legacy SQL。这是标准SQL中的一个解决方案。

如果你的表名在你的链接可预测的后缀像GitHub的例子(使用YYYYMMDD后缀的每一天),你可以使用wildcard tables and TABLE_SUFFIX

SELECT COUNT(*) 
FROM `githubarchive.day.events_*` 
WHERE _TABLE_SUFFIX = (
    SELECT MAX(SUBSTR(table_id, -8)) 
    FROM `githubarchive.day.__TABLES_SUMMARY__` 
    WHERE REGEXP_CONTAINS(table_id, "events_\\d{8}") 
) 

如果你想依靠BigQuery的关于元数据创建时间,而不是前缀,你可以这样做:

SELECT COUNT(*) 
FROM `githubarchive.day.*` 
WHERE _TABLE_SUFFIX = (
    SELECT table_id 
    FROM `githubarchive.day.__TABLES_SUMMARY__` 
    ORDER BY creation_time DESC 
    LIMIT 1 
) 

需要注意的是,如果你有在你的项目不同模式的表格,后者语法是危险的,因为查询将使用第一个表的架构它在通配符中看到。

如果您正在尝试创建按日期分区的表格,那么可以使用名为date-partitioned tables的BigQuery功能来实现这一功能,并且使查询更容易。

相关问题