【问题标题】:Querying BigQuery tables in a given date range查询给定日期范围内的 BigQuery 表
【发布时间】:2016-08-11 11:50:43
【问题描述】:

在 Google BigQuery 中,我有以下格式的表格:daily_records_yyyy_mm_dd。我需要在给定日期范围内对多个表运行查询。 TABLE_DATE_RANGE 函数要求表名采用 [prefix][day] 格式,其中 [day] 采用 YYYYMMDD 格式。 在我的情况下我仍然可以使用 TABLE_DATE_RANGE 还是有其他方法?

谢谢

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    不,您不能在此处使用 TABLE_DATE_RANGE,因为它需要特定格式

    在您的情况下(对于BigQuery Legacy SQL)-您应该使用TABLE_QUERY,您可以在其中使用任何表达式来选择表格

    另外 - 对于 BigQuery Standard SQL - 您可以使用 _TABLE_SUFFIX 伪列来处理任何表名格式

    例子:

    旧版 SQL

    SELECT *  
    FROM (
      TABLE_QUERY(YourDataset, 'LEFT(table_id, 14) = "daily_records_" 
                                AND LENGTH(table_id) = length("daily_records_") + 10
                                AND DATE(REPLACE(RIGHT(table_id, 10), "_", "-")) 
                                BETWEEN DATE("2015-11-01") AND DATE("2016-01-30")')
    )  
    

    标准 SQL

    SELECT * 
    FROM `YourDataset.daily_records_*` 
    WHERE REPLACE(_TABLE_SUFFIX, "_", "-")
          BETWEEN "2015-11-03" AND "2016-01-05"
    

    【讨论】:

    • 感谢您的回复。根据您的建议,我同时查看了 TABLE_QUERY 和 TABLE_SUFFIX,但在给定日期范围内使用其中任何一个来制定查询时遇到问题。例如,假设我想为 daily_records_2015_11_01 和 daily_records_2016_01_30 之间的表选择所有记录,我应该使用什么查询利用 ?谢谢。
    • 为您添加示例
    • 非常感谢! :)。使用 TABLE_QUERY 的旧版 SQL 查询有效,但涉及 TABLE_SUFFIX 的标准 SQL 给出以下错误:错误:参数类型的函数 DATE 没有匹配签名:STRING。支持的签名:DATE(TIMESTAMP, [STRING]);日期(INT64,INT64,INT64)在 [3:7]。
    • 让它更快 - 现在尝试:WHERE REPLACE(_TABLE_SUFFIX, "_", "-") BETWEEN "2015-11-03" AND "2016-01-05"。但理想情况下,您应该检查标准 sql 的日期函数并调整代码。如果您仍然对日期相关功能有疑问 - 请告诉我们
    • 现在可以使用了。抱歉,我没有明白您要说的关于使用日期函数的内容。在不使用日期函数的情况下以这种方式编写标准 sql 查询是否可以,或者有任何缺点吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2021-06-10
    • 2018-02-03
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多