我创建每日表。如何查询"最新"一个?
例如,GitHubArchive现在发布每日表 - 而不是单一表(参见/r/bigquery/.../github_archive_changes_monthly_and_daily_tables/)。
答案 0 :(得分: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
有关表格查询功能的更多信息,请参阅Jordan对How do I use the TABLE_QUERY() function in BigQuery?的回答。
答案 1 :(得分:2)
Felipe的回答使用了Legacy SQL。这是标准SQL中的解决方案。
如果您的表名具有可预测的后缀,例如链接中的GitHub示例(每天使用var string = "this is a string"
string.replaceOccurrences(of: " ", with: "_")
print(string) // "this_is_a_string"
后缀),则可以使用wildcard tables and TABLE_SUFFIX
:
YYYYMMDD
如果您想依赖关于创建时间而不是前缀的BigQuery元数据,您可以这样做:
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}")
)
请注意,如果项目中的表具有不同的模式,则后一种语法很危险,因为查询将使用它在通配符中看到的第一个表的模式。
如果您正在尝试创建按日期分区的表,那么有一个名为date-partitioned tables的BigQuery功能可以实现这一点,并且可以更方便地进行查询。