【问题标题】:I have daily tables on BigQuery. How to query the "newest" one?我在 BigQuery 上有每日表格。如何查询“最新”的?
【发布时间】:2015-04-09 22:39:38
【问题描述】:

我创建每日表格。如何查询“最新”的?

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

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    要查找最新的表,您可以使用 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? 的回答。

    【讨论】:

      【解决方案2】:

      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 功能可以做到这一点,并让之后的查询变得更容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-06
        • 1970-01-01
        • 2017-11-22
        • 1970-01-01
        • 1970-01-01
        • 2021-06-03
        • 1970-01-01
        • 2020-04-18
        相关资源
        最近更新 更多