我在 BigQuery 上有每日表格。如何查询"newest"个?
I have daily tables on BigQuery. How to query the "newest" one?
我创建每日表格。如何查询"newest"一个?
例如,GitHubArchive 现在发布每日表格 - 而不是单一表格(参见 /r/bigquery/.../github_archive_changes_monthly_and_daily_tables/)。
要查找最新的 table,您可以使用 BigQuery 的 table 查询函数:
比如最新的每日GitHubArchivetable:
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
为了最大限度地方便起见,您可以将该查询存储为视图以与他人共享。然后查询最新的table,只查询视图:
SELECT num_records
FROM [fh-bigquery:public_dump.githubarchive_latest_day]
# 201859
有关 table 查询函数的更多信息,请参阅 Jordan 对 How do I use the TABLE_QUERY() function in BigQuery? 的回答。
Felipe 的回答使用旧版 SQL。这是标准 SQL.
中的解决方案
如果你的 table 名字有谓语table 后缀,就像你 link 中的 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
)
请注意,如果您的项目中有 table 具有不同的架构,后一种语法是危险的,因为查询将使用它在通配符中看到的第一个 table 的架构。
如果您尝试创建按日期分区的 table,可以使用名为 date-partitioned tables 的 BigQuery 功能来完成此操作,并使之后的查询更容易。
我创建每日表格。如何查询"newest"一个?
例如,GitHubArchive 现在发布每日表格 - 而不是单一表格(参见 /r/bigquery/.../github_archive_changes_monthly_and_daily_tables/)。
要查找最新的 table,您可以使用 BigQuery 的 table 查询函数:
比如最新的每日GitHubArchivetable:
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
为了最大限度地方便起见,您可以将该查询存储为视图以与他人共享。然后查询最新的table,只查询视图:
SELECT num_records
FROM [fh-bigquery:public_dump.githubarchive_latest_day]
# 201859
有关 table 查询函数的更多信息,请参阅 Jordan 对 How do I use the TABLE_QUERY() function in BigQuery? 的回答。
Felipe 的回答使用旧版 SQL。这是标准 SQL.
中的解决方案如果你的 table 名字有谓语table 后缀,就像你 link 中的 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
)
请注意,如果您的项目中有 table 具有不同的架构,后一种语法是危险的,因为查询将使用它在通配符中看到的第一个 table 的架构。
如果您尝试创建按日期分区的 table,可以使用名为 date-partitioned tables 的 BigQuery 功能来完成此操作,并使之后的查询更容易。