我创建每日表格。如何查询“最新”的?我在BigQuery上有每日表格。如何查询“最新”的?
例如,GitHubArchive现在发布每日表格 - 而不是单一表格(请参阅/r/bigquery/.../github_archive_changes_monthly_and_daily_tables/)。
我创建每日表格。如何查询“最新”的?我在BigQuery上有每日表格。如何查询“最新”的?
例如,GitHubArchive现在发布每日表格 - 而不是单一表格(请参阅/r/bigquery/.../github_archive_changes_monthly_and_daily_tables/)。
要查找最新的表,你可以使用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?。
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功能来实现这一功能,并且使查询更容易。