Google BigQuery:停止运行查询

时间:2015-02-03 23:26:47

标签: google-bigquery

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

我一直在为一家使用BigQuery分析Google Analytics数据的公司开展一个项目,所以我不想把它们当作一大笔账单。 (也许StackOverflow不是问这个问题的合适的地方,但是我试图找到另一个地方,但我不能。在BigQuery支持页面上,据说应该在这里询问问题,google-bigquery标签,所以我这样做。)

我写了一个查询(我不想在这里粘贴或描述,因为有人可能会滥用它来阻止BigQuery或其他东西,我不知道)。我们只是说它包括内连接。在我编写之后,在运行它之前,控制台消息就像“这将分析674KB的数据”,看起来没问题,因为该表只有10,000行。点击“放弃”查询后,我收到了相同的消息,例如“你可以放弃这个,但你仍然会收到674KB的数据”。

我非常努力地确保我所做的不会给某人带来麻烦,所以我实际上在BigQuery的本地PostgreSQL数据库(具有完全相同的数据 - 10,000行)上运行该查询,并且查询在一两秒内结束。

如何取消此查询,是否可以(我为之工作的公司)收取超过674KB数据的费用?

2 个答案:

答案 0 :(得分:1)

目前,无法通过Web界面或API调用启动BigQuery作业。

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

由于BigQuery会将查询分成多个计算机,因此即使是大型查询(TeraByte级别)也不会对单个计算机产生很大影响,更不用说674KB的查询了。但是,根据thisthis是您需要支付的金额。

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

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

  • 这意味着,不要在查询中包含您不需要的列。这可能听起来微不足道,但有时来自RDBMS的人可能会写这样的查询:

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

    查询绝对正确,但Google实际上只会为整个表收取此查询的费用,而不是只收取user_id列的大小。因此,明确指定列名称是个好主意。

  • 将表分成更小的块。不是使用包含所有数据的单个表,而是根据日期拆分表,并在查询期间使用table wildcard functions将表拼接在一起,这是一个好主意。在这种情况下,您不会被您不需要的行收费。

答案 1 :(得分:1)

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

bq cancel <job_id>

或通过jobs.cancel方法(记录为here

从API获取