为什么这两个查询具有相同的" GB处理" (从而成本)?

时间:2015-07-09 14:27:14

标签: google-bigquery

我的测试数据包含27,768,767行。我的架构包含一条"消息"字符串类型的列。这些字符串的长度各不相同,但通常为几百个字符。还有类型为int的user_id列。这里有两个返回0行的查询(where子句在我的数据中没有匹配)。然而,令我惊讶的是,它们都报告了4.69 GB的处理。

SELECT * FROM logtesting.logs WHERE user_id=1;

Query complete (1.7s elapsed, 4.69 GB processed)

SELECT * FROM logtesting.logs WHERE message CONTAINS 'this string never appears';

Query complete (2.1s elapsed, 4.69 GB processed)

由于整数存储在8 bytes中,我原本以为在前一个(user_id)查询中处理的数据大约是213MB(每个user_id有2800万行* 8个字节)。后者(消息)查询更难以估计,因为字符串的长度不同,但我希望它比前一个(user_id)查询大几倍。

我对how BigQuery calculates query costs的理解是错误的吗?

1 个答案:

答案 0 :(得分:4)

无论你做什么,BigQuery都需要扫描表格中的所有行(不一定是所有列),所以你得到这个是正常的,因为你的表格不会改变。 where子句仅表示它不会返回数据。它仍然需要处理它。

确保降低处理能力的唯一方法是不选择所有列。 BigQuery是基于列的,因此如果您不需要所有属性,请不要将它们全部归还(这也意味着它们不会被处理)。这将有助于降低您的成本:)

历史上,"选择*"没有得到支持,以确保人们不会发现困难