Google bigquery 使用多行访问Bigquery JS UDF限制

Google bigquery 使用多行访问Bigquery JS UDF限制,google-bigquery,bigquery-udf,Google Bigquery,Bigquery Udf,我对BigQuery JS UDF限制有问题。记录的唯一内存限制[1]是对UDF输出的数据量的约为5 MB或更小的限制,因此我设置了一个内部检查,以在输出缓冲区超过~3MB时(base64转换之前)返回错误;但即使这样,我在对一系列行运行UDF时也达到了极限,尽管它们单独运行时效果很好 例如,如果在查询执行期间超出了资源,则此操作将失败:UDF内存不足。 WITH joined_data AS ( SELECT z, x, y, ARRAY_AGG(data) as data FROM

我对BigQuery JS UDF限制有问题。记录的唯一内存限制[1]是对UDF输出的数据量的
约为5 MB或更小的
限制,因此我设置了一个内部检查,以在输出缓冲区超过~3MB时(base64转换之前)返回错误;但即使这样,我在对一系列行运行UDF时也达到了极限,尽管它们单独运行时效果很好

例如,如果在查询执行期间超出了
资源,则此操作将失败:UDF内存不足。

WITH joined_data AS
(
  SELECT z, x, y, ARRAY_AGG(data) as data
  FROM `rmr_tests.z6_pre_agg`
  WHERE x = 14
  GROUP BY z, x, y
)
SELECT z, x, y, rmr_tests.UDFNAME(data, 4096, '{}') as mvt from joined_data
作业id:cartodb gcp后端数据团队:US.BkuxJob_1628ffa1_170c4d0d50f

另一方面,如果我欺骗Bigquery以不同的方式批处理对UDF的调用,那么我没有任何问题:

WITH joined_data AS
(
  SELECT z, x, y,
      ARRAY_AGG(data) as data,
      ABS(MOD(FARM_FINGERPRINT(CONCAT(CAST(x AS STRING), y, CAST(z AS STRING))), 5)) AS r
  FROM `rmr_tests.z6_pre_agg`
  WHERE x = 14
  GROUP BY z, x, y
)
SELECT z, x, y, rmr_tests.UDFNAME(data, 4096, '{}') as mvt FROM joined_data WHERE r = 0
UNION ALL 
SELECT z, x, y, rmr_tests.UDFNAME(data, 4096, '{}') as mvt FROM joined_data WHERE r = 1
UNION ALL 
SELECT z, x, y, rmr_tests.UDFNAME(data, 4096, '{}') as mvt FROM joined_data WHERE r = 2
UNION ALL 
SELECT z, x, y, rmr_tests.UDFNAME(data, 4096, '{}') as mvt FROM joined_data WHERE r = 3
UNION ALL 
SELECT z, x, y, rmr_tests.UDFNAME(data, 4096, '{}') as mvt FROM joined_data WHERE r = 4
作业id:cartodb gcp后端数据团队:US.BkuxJob_3f216117_170c4d2abae

我不确定这是否重要,但传递给UDF的数据可能很大(在本例中为20 MB),并且输出类型为BYTE(最大值为2.71 MB,按长度(mvt)报告)

在过去的[2]中有一个类似的问题,它被引用为v8的一个可能问题,但我无法知道它是否是同一个问题

这是我的UDF中的问题还是v8+Bigquery的问题?我在node下测试了一个等价的代码,内存保持稳定(运行20-30分钟后没有明显的泄漏)

[1] -

[2] -

编辑:在bug跟踪器中报告它:

当您说“我在对一系列行运行UDF时达到了极限,尽管它们单独工作很好”。我认为这正是你达到极限的原因,因为它指的是一行,如下所示:


“当处理单行时,JavaScript UDF输出的数据量大约为5MB或更少。”

正如我所说,每一行的数据量都在3MB以下,并且可以单独处理。也许我误解了你,但我不明白只有在多行多次调用该函数时,我怎么可能达到该限制。我可以看到你在公共问题跟踪程序中打开了一个案例,在阅读该线程后,我建议你打开一个关于你最后评论的新案例,以便获得相应的帮助