Google BigQuery:停止运行查询

Posted

技术标签:

【中文标题】Google BigQuery:停止运行查询【英文标题】:Google BigQuery: Stop running query 【发布时间】:2015-02-03 23:26:47 【问题描述】:

几个小时前,我在 Google BigQuery 上运行了一个查询,该查询仍在运行。我点击了“放弃”,但似乎没有办法停止查询。我能做些什么?我可以以某种方式联系 Google,让他们停止查询吗?

我一直在为一家使用 BigQuery 分析 Google Analytics(分析)数据的公司开展项目,因此我不想让他们支付大笔费用或其他什么。 (也许 *** 不是问这个问题的正确地方,但我试图找到另一个地方,但我不能。在 BigQuery 支持页面上,据说应该在这里问问题,用 google-bigquery标记,所以我正在这样做)。

我写了一个查询(我不想在此处粘贴或描述它,因为有人可能会滥用它来阻止 BigQuery 或其他东西,我不知道)。假设它包括内部连接。在我写完它之后,在运行它之前,控制台消息类似于“这将分析 674KB 的数据”,这看起来不错,因为该表只有 10,000 行。在点击“放弃”查询后,我收到了同样的消息,例如“您可以放弃这个,但您仍需要为 674KB 的数据付费”。

我非常努力地确保我所做的事情不会给某人带来问题,因此我实际上已经在本地 PostgreSQL 数据库(具有完全相同的数据 - 10,000 行)上运行该查询,就像在 BigQuery 中一样,并且那里的查询在一两秒钟内完成。

如何取消此查询,我(我工作的公司)是否需要为超过 674KB 的数据付费?

【问题讨论】:

不用担心成本:无论花费多长时间,如果查询失败,您要么为这 674KB 付费,要么不收费。如果您复制粘贴查询的作业 ID,支持团队也可以调试所述查询。谢谢! 【参考方案1】:

目前,无法在 BigQuery 作业启动后停止它,无论是通过网络界面还是 API 调用。

根据this,将来可能会添加此功能。

由于 BigQuery 会将查询分片到多台机器上,因此即使是大型查询(TeraByte 级别)也不会对单台机器产生太大影响,更不用说 674KB 的查询了。但是,根据this,this 是您将被收取的金额。

以下是一些在 BigQuery 中省钱的技巧。

首先要知道的是,与传统的 RDBMS 不同,BigQuery 是基于列的,您将按列中的数据量而不是行中的数据量付费。

也就是说,不要在查询中包含不需要的列。这听起来可能微不足道,但有时来自 RDBMS 的人可能会编写如下查询:

SELECT
    COUNT(*), user_id
FROM
    [Dataset.Table]

该查询是绝对正确的,但 Google 不会只按 user_id 列的大小收费,而是会为此查询对整个表计费。因此,明确指定列名是个好主意。

将表分成更小的块。与其拥有一个包含所有数据的表,不如根据日期拆分表,并在查询期间使用table wildcard functions 将表拼接在一起。在这种情况下,不会按不需要的行向您收费。

【讨论】:

【参考方案2】:

BigQuery 支持取消查询作业。 您可以通过bq 命令行实用程序执行此操作:

bq cancel <job_id>

或从 API 通过 jobs.cancel 方法(记录在 here)

【讨论】:

以上是关于Google BigQuery:停止运行查询的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中运行 BigQuery SQL 查询,如何进行身份验证?

Google Data Studio:如何使用自定义 Big Query 查询创建时间序列图表

使用 Google Apps 脚本将查询中的数据加载到 Big Query - 缺少必需参数

Big Query 着陆页数字与 Google Analytics 界面不一致

将Big Query中的数据自动导入Google表格?

如何在 Big Query 中安排每日插入作业 [重复]