GCP BigQuery - 限制但全表读取 - 如何将查询数据限制到最小值

问题描述 投票:0回答:4

看起来

LIMIT
对处理/查询的数据量没有影响(如果您信任 UI)。


enter image description here


SELECT
  * --count(*)
FROM
  `bigquery-public-data.github_repos.commits`
-- LIMIT   20

如何将查询的数据量限制到最小(即使可能总是需要一整个分区)

  • 无需使用“预览”或类似功能
  • 不知道数据的分区/聚类

如何在查询执行前检查真实的大概金额?


在执行详细信息中指出,仅查询了 163514 行作为输入(而不是 244928379 行)

sql google-cloud-platform google-bigquery sql-execution-plan
4个回答
0
投票

如果您想限制 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.*' 

    通配符表也可以按日期分区。


0
投票

您需要为工作线程中加载的数据量付费。当然,您在请求中不执行任何操作,而是要求第 20 个结果,查询会提前停止,并且所有数据都不会被处理,但至少会加载。你将为此付出代价!

看看这个。我有类似的要求 enter image description here

现在,让我们看看日志 enter image description here

计费总字节约为 800Mb

因此,当您使用 BigQuery 时,必须以不同的方式思考,它是分析数据库,不是为执行小请求而设计的(启动太慢,由于工作人员预热,延迟至少为 500 毫秒)。


我的表包含 3M+ 行,并且只处理了 10% enter image description here

您需要支付预留和加载成本(移动数据有成本,预留槽位也有成本)。

这就是为什么,有很多在 Google BigQuery 上省钱的技巧。 前 BigQuery 开发倡导者提供的一些示例


0
投票

截至 2021 年 12 月,我注意到 select * from Limit 不会扫描整个表,您只需为少量行付费,显然如果您添加 order by,它将扫描所有内容。


0
投票

您可以使用表采样来防止 BQ 进行全表扫描。 例如:- 选择 * 来自 dataset.my_table 表样本系统(50%) 其中 customer_id = 1

从下面的链接阅读更多相关信息 https://cloud.google.com/bigquery/docs/table-sampling

© www.soinside.com 2019 - 2024. All rights reserved.