我正在尝试从数据集中的最新表进行高效查询,该数据集中由project_id:dataset:dataset_20160101
、project_id:dataset形式的表组成:dataset_20160102
等
此查询似乎是推荐的解决方案:
SELECT *
FROM `project_id.dataset.*`
WHERE _TABLE_SUFFIX=(SELECT MAX(table_id) FROM `project_id.dataset.__TABLES_SUMMARY__`)
但是,此查询会向我收取访问数据集中的所有表的费用,而不仅仅是最新的表。这是为什么?
最佳答案
当 WHERE 子句在伪列上使用常量表达式(例如 _TABLE_SUFFIX = 'dataset_20160102')时,我们只能在查询运行之前修剪表。对于您的查询,由于 WHERE 子句包含一个不解析为常量的子查询,因此我们无法在查询运行之前修剪表。相反,从所有表中读取数据并执行子查询。然后将数据与子查询结果连接并过滤。
可以在查询执行期间修剪表。启动查询、执行子查询、修剪表并读取数据。但目前还没有预计到达时间。
关于google-bigquery - BigQuery 高效查询最新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44637448/