我的测试数据包括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)
Run Code Online (Sandbox Code Playgroud)
。
SELECT * FROM logtesting.logs WHERE message CONTAINS 'this string never appears';
Query complete (2.1s elapsed, 4.69 GB processed)
Run Code Online (Sandbox Code Playgroud)
由于ints以8字节存储,因此我希望在前一个(user_id)查询中处理的数据大约为213MB(2800万行*每个user_id 8个字节)。由于字符串的长度不同,后一种(消息)查询更难估计,但是我希望它比前一种(user_id)查询大几倍。
我对BigQuery如何计算查询费用的理解错误吗?
无论您做什么,BigQuery都将需要扫描表中的所有行(尽管不一定扫描所有列),所以通常会得到此信息,因为表不会改变。where子句仅表示不会返回数据。它仍然需要处理它。
确保降低处理效率的唯一方法是不选择所有列。BigQuery是基于列的,因此,如果不需要所有属性,则不要全部返回(这也意味着将不会处理它们)。这将有助于降低您的成本:)
从历史上看,不支持“选择*”以确保人们不会很难找到答案
归档时间: |
|
查看次数: |
94 次 |
最近记录: |