BigQuery关于成本优化的文档指出:
BigQuery 可以提供令人难以置信的性能,因为它将数据存储为列式数据结构。这意味着 SELECT * 是查询数据最昂贵的方式。这是因为它将对表中存在的每一列执行完整的查询扫描,包括您可能不需要的列。
但是,我在文档中找不到讨论 BigQuery 引擎是否优化使用SELECT *
或不使用的子查询/虚拟视图的任何地方。例子:
(1)
CREATE VIEW my_view AS ( SELECT * FROM my_table );
SELECT a, b FROM my_view -- does this only access {a, b} or all columns?
(2)
SELECT a, b FROM (SELECT * FROM my_table) AS t -- does this only access {a, b} or all columns?
所以问题是:BigQuery 是否优化子查询/视图 SELECT * 以最小化成本,如果是,它是否可靠地做到了?