BigQuery 脚本 - 慢

Posted

技术标签:

【中文标题】BigQuery 脚本 - 慢【英文标题】:BigQuery Scripting - Slow 【发布时间】:2019-10-06 22:40:24 【问题描述】:

所以,BigQuery 脚本功能问世了,我想尝试一下。

我知道它仍处于测试阶段并正在测试中。然而,为了感受一下,我多次运行这个 20k 循环的小简单循环,每次都需要 5 到 10 分钟(有时甚至更长时间)才能完成。有时,我不得不取消工作,因为它需要很长时间。

declare n int64;
declare i int64;
declare k float64;

set i = 0;
set n = 20000;
set k = rand();

loop
  set i = i + 1;
  if i >= n then leave;
  else set k = k*rand();
  end if;
end loop;

select k;

我想知道我是否在这里做错了什么,或者只是它的性能还不够好。

注意:这是其中一个作业 ID:music-178807:US.bquxjob_366fc627_16da33c0ee1

【问题讨论】:

你能试着说得更具体一点吗?使用 “几分钟”“永远” 之类的措辞可能会产生歧义。此外,毫无疑问,一些 BigQuery 作业 ID 会对 Google 工程师有所帮助 :) 好的。因此,它需要 5 到 10 分钟(有时甚至更多)之间的可变时间。像“永远/慢”这样的词实际上是比较小规模的脚本:-) 明白,但请记住工程师喜欢具体的细节 :) 能否也提供工作 ID? 当然。我还为好奇的工程师添加了一个工作 ID :-) 【参考方案1】:

BigQuery 中的脚本故意不如以其他语言运行此类代码的速度快。人们希望使用脚本将多个查询联系在一起,而不是在循环中乘以数字。另请注意,编写脚本不会产生额外成本,而高性能可能需要付出代价。

【讨论】:

我理解你想要表达的意思,这在某种程度上是有道理的。但是,如果用户正在扫描几百万行,那么他们已经为扫描支付了价格/字节。现在,如果他们添加脚本以在这些结果行上执行某种迭代操作,并且它在时间上爆炸了,那么它就不那么好了。我想这就是我的问题的重点。 查询仍然是进行基于集合的处理的最佳方式。如果您发现自己在数千个单独的行上运行循环,那么可能有更好的方法。

以上是关于BigQuery 脚本 - 慢的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery - 通过 java 流式传输非常慢

bigquery - 小表上的慢查询

BigQuery 比 SQL Server 慢

Go Iterator 从 Bigquery 读取 100 万行,比 Java 或 kotlin 慢 10 倍?

Python BigQuery 脚本 bigquery.jobs.create 错误

Bigquery:在 Bigquery 中计算余额或重写 SQL 脚本