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 - 缺少必需参数