【问题标题】:Google BigQuery Trying to run a TABLE_RANGE_DATEGoogle BigQuery 尝试运行 TABLE_RANGE_DATE
【发布时间】:2017-05-07 10:58:00
【问题描述】:

我正在数据集中构建一个基于分区的表,并且我正在尝试使用日期范围查询这些分区。

以下是数据示例:

Dataset: logs Tables: logs_20170501 logs_20170502 logs_20170503

我首先尝试 TABLE_RANGE_DATE

SELECT count(*) FROM TABLE_DATE_RANGE([logs.logs_], TIMESTAMP("2017-05-01"), TIMESTAMP("2017-05-03")) as logs_count

我不断收到:“错误:评估附属查询时出错

我也尝试了这些选项: 单逗号: SELECT count(*) FROM TABLE_DATE_RANGE([logs.logs_], TIMESTAMP('2017-05-01'), TIMESTAMP('2017-05-03')) as logs_count 添加项目ID: SELECT count(*) FROM TABLE_DATE_RANGE([main_sys_logs:logs.logs_], TIMESTAMP('2017-05-01'), TIMESTAMP('2017-05-03')) as logs_count

但它没有奏效。

所以我尝试使用 TABLE_SUFFIX

SELECT count(*) FROM [main_sys_logs:logs.logs_*] WHERE _TABLE_SUFFIX BETWEEN '20170501' AND '20170503'

我得到了这个错误: Invalid table name:'main_sys_logs:logs.logs_*

我一直在旧版 SQL 开/关之间切换 SQL 方言,但我在表名部分遇到了不同的错误。

这件事有什么提示或帮助吗? 也许我的表名最后的“_”是错误的,这导致了问题?感谢您的帮助。

【问题讨论】:

  • 只是好奇,但您有什么理由不使用 BigQuery 的分区表吗? cloud.google.com/bigquery/docs/partitioned-tables
  • 我测试了它,但仍然有错误,我会再试一次并在这里发布我的查询
  • 如果还不算太晚,我强烈建议使用分区表!
  • 只要您在项目 main_sys_logs 中确实有数据集 logs,并且表的名称与您在问题中描述的完全一致 - 此版本 MUST 工作 - SELECT count(*) FROM TABLE_DATE_RANGE([main_sys_logs:logs.logs_], TIMESTAMP('2017-05-01'), TIMESTAMP('2017-05-03')) as logs_count - 请您仔细检查一下! ?
  • 请注意,使用标准 SQL,您应该改为 filter on _PARTITIONTIME

标签: sql date google-bigquery date-range


【解决方案1】:

所以我尝试了这个查询并且它有效:

SELECT count(*) FROM TABLE_DATE_RANGE(logs.logs_, TIMESTAMP("2017-05-01"), TIMESTAMP("2017-05-03")) as logs_count

在我运行此查询后它开始工作,我不知道这是否是原因.. 但我只是查询数据集的 TABLES 数据

SELECT * FROM logs__TABLES__

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2023-03-13
    • 2012-11-16
    • 2022-12-14
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多