看起来
LIMIT
对处理/查询的数据量没有影响(如果您信任 UI)。
SELECT
* --count(*)
FROM
`bigquery-public-data.github_repos.commits`
-- LIMIT 20
如何将查询的数据量限制到最小(即使可能总是需要一整个分区)
如何在查询执行前检查真实的大概金额?
在执行详细信息中指出,仅查询了 163514 行作为输入(而不是 244928379 行)
如果您想限制 BQ 用于查询的数据量,您有以下两个选项:
表分区 大查询可以使用您提供的日期/日期时间/时间戳列或通过插入日期来分区数据(如果您对表有定期更新,这很好)。
为此,您必须在 DDL 中指定分区策略:
CREATE TABLE mydataset.mytable (foo: int64, txdate:date)
PARTITION BY txdate
通配符表(如分片 - 将数据拆分为多个表
当您的数据包含有关不同域(地理、客户类型等)或来源的信息时,此方法有效。 您可以使用类似的架构(通常人们使用相同的架构)创建“子表”或“分片”,而不是使用一张大表。例如,
dateset.tablename.eur
用于欧洲数据,``dataset.tablename.jap`` 用于日本数据。
您可以直接查询其中一张表
select col1,col2... from dataset.tablename.custromer_eur;
或从所有表中查询 select col1,col2 from 'dataset.tablename.*'
通配符表也可以按日期分区。
您需要为工作线程中加载的数据量付费。当然,您在请求中不执行任何操作,而是要求第 20 个结果,查询会提前停止,并且所有数据都不会被处理,但至少会加载。你将为此付出代价!
计费总字节约为 800Mb
因此,当您使用 BigQuery 时,必须以不同的方式思考,它是分析数据库,不是为执行小请求而设计的(启动太慢,由于工作人员预热,延迟至少为 500 毫秒)。
您需要支付预留和加载成本(移动数据有成本,预留槽位也有成本)。
这就是为什么,有很多在 Google BigQuery 上省钱的技巧。 前 BigQuery 开发倡导者提供的一些示例
截至 2021 年 12 月,我注意到 select * from Limit 不会扫描整个表,您只需为少量行付费,显然如果您添加 order by,它将扫描所有内容。
您可以使用表采样来防止 BQ 进行全表扫描。 例如:- 选择 * 来自 dataset.my_table 表样本系统(50%) 其中 customer_id = 1
从下面的链接阅读更多相关信息 https://cloud.google.com/bigquery/docs/table-sampling