我每天都有关于BigQuery的表格。如何查询“最新”的?

时间:2015-02-10 01:17:44

标签: google-bigquery

我创建每日表。如何查询"最新"一个?

例如,GitHubArchive现在发布每日表 - 而不是单一表(参见/r/bigquery/.../github_archive_changes_monthly_and_daily_tables/)。

2 个答案:

答案 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功能可以实现这一点,并且可以更方便地进行查询。