【发布时间】:2015-04-09 22:39:38
【问题描述】:
我创建每日表格。如何查询“最新”的?
例如,GitHubArchive 现在发布每日表格 - 而不是单一的(参见 /r/bigquery/.../github_archive_changes_monthly_and_daily_tables/)。
【问题讨论】:
标签: google-bigquery
我创建每日表格。如何查询“最新”的?
例如,GitHubArchive 现在发布每日表格 - 而不是单一的(参见 /r/bigquery/.../github_archive_changes_monthly_and_daily_tables/)。
【问题讨论】:
标签: google-bigquery
要查找最新的表,您可以使用 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
有关表查询函数的更多信息,请参阅 Jordan 对 How do I use the TABLE_QUERY() function in BigQuery? 的回答。
【讨论】:
Felipe 的回答使用旧版 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 功能可以做到这一点,并让之后的查询变得更容易。
【讨论】: