【发布时间】: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