问题标签 [bigquery-udf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
134 浏览

sql - 如何在 BigQuery 中创建可重用的 UDF

我已经实现了一个用户定义函数,它解析复杂的 JSON 并返回数百个字段来生成新表。

由于大多数 JSON 非常相似,我已经实现了一个 JS UDF 来返回不同的模式。我的问题是如何通过更改RETURNS STRUCT来重用这个 UDF来生成不同的表?

0 投票
1 回答
392 浏览

google-bigquery - 使用多行达到 Bigquery JS UDF 限制

我遇到了 BigQuery JS UDF 限制的问题。唯一记录的内存限制 [1] 是approximately 5 MB or less对 UDF 输出数据量的限制,因此我设置了一个内部检查以在输出缓冲区超过 ~3MB 时返回错误(在 base64 转换之前);但即便如此,在对一系列行运行 UDF 时,我还是遇到了限制,尽管它们单独工作正常。

例如,这失败了Resources exceeded during query execution: UDF out of memory.

作业 ID:cartodb-gcp-backend-data-team:US.bquxjob_1628ffa1_170c4d0d50f

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

作业 ID:cartodb-gcp-backend-data-team:US.bquxjob_3f216117_170c4d2abae

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

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

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

[1] - https://cloud.google.com/bigquery/docs/reference/standard-sql/user-defined-functions

[2] - https://stackoverflow.com/a/35563562

编辑:在错误跟踪器中报告:https ://issuetracker.google.com/u/1/issues/151212192

0 投票
1 回答
109 浏览

google-bigquery - BigQuery 中的函数名称区分大小写

我正在学习 Google BigQuery 的语法,目前,我正在阅读有关标识符和区分大小写的文档。我专注于 BigQuery 的标准 SQL 语法。

文档说:

BigQuery 遵循以下区分大小写规则:
类别| 区分大小写?
函数名 | 不

但是当我在Console中运行以下语句时:

创建了两个函数,并作为 select 语句的结果提供了不同的结果。

同时,如果我运行以下语句,我会收到一个错误,即找不到该函数:

Google BigQuery 中的函数名称是否不区分大小写?从上面提供的代码片段来看,它似乎是区分大小写的。

谢谢你。

0 投票
1 回答
4215 浏览

google-bigquery - 合并语句的 BigQuery 等效项

我正在执行从 teradata 到大查询的迁移。我遇到了一个在 USING 子句中有 VALUES 的合并语句。

任何人都可以帮助我找到它的 BigQuery 等价物。

0 投票
1 回答
360 浏览

sql - 如何为在 bigquery 中的异常之外声明的变量赋值?

我正在使用存储过程,我需要将值分配给在异常之外声明的变量,其想法是能够在发生错误时调用具有附加变量的另一个存储过程

结果是:

0 投票
2 回答
73 浏览

sql - 将事件表中的数据与事件发生之前更改日志表中的最新数据连接起来

我正在将JOIN用户更改日志样式表中的数据查找到具有匹配 ID 的事件表中

表格如下:

项目事件

图式

示例数据

users_changelog

图式

示例数据

注意:操作可以是“CREATE”、“UPDATE”、“DELETE”或“IMPORT”。由于用户可以多次更新,因此可以有多个具有相同 user_id 的行

目标是在用户表中显示与匹配 ID 的最新操作相关联的 event_id 和数据列。使用示例数据,预期结果将是:

我尝试了以下方法,但它会产生重复的行(更改日志表中的每一行都有一个匹配的 id):

0 投票
1 回答
106 浏览

google-cloud-platform - 在 BigQuery 中模拟窗口聚合的 UDF 的解决方法?

我正在尝试在 BigQuery 中编写自定义聚合函数。在 PGSQL 中,我可以编写可与子句一起使用的用户定义聚合函数over,但我无法为 BigQuery 编写任何此类聚合函数 - 是否可以编写一个函数来接收一列的整个数组一个分区并根据一些自定义计算返回一个值?

我试过的例子:

这给出了一个错误:Query error: Function temp_db.temp_func does not support an OVER clause at [6:19]

现有的聚合函数不足以满足我的目的,因此我需要能够对自定义窗口大小执行自定义计算。BigQuery 中是否有任何解决方法?

0 投票
1 回答
45 浏览

google-cloud-platform - 在 BigQuery 中使用 UDF 时是否可以在窗口之间保持共享状态?

这是我之前关于在 BigQuery 中模拟聚合函数(如在 PGSQL 中)的问题的后续问题。

上一个问题中提出的解决方案确实适用于每个窗口上应用的函数独立于前一个窗口的情况 - 例如计算简单平均值等,但是在计算指数移动平均等递归函数时,公式为: EMA[i] = price[i]*k + EMA[i-1]×(1−k)

使用上一个问题中的相同示例,

在 PGSQL 中将状态变量存储为自定义类型非常容易,并且是聚合函数参数的一部分。是否可以使用 BigQuery 模拟相同的功能?

0 投票
0 回答
63 浏览

google-bigquery - 如何从 BigQuery 中输入多个单词的两个表中检查字符串相似度

我有两个包含公司名称列表的表。第一个是索引表,因此里面的值是干净的并且格式是一致的。第二个表包含用户输入的公司信息,因此可能存在拼写错误和格式不一致。

第一个(索引表)与此类似:

第二个表(用户输入表)与此类似

请注意,第二个表没有industry列,因为主要目标是将industry列添加到第二个表中,但是由于没有键,我们不能简单地连接两个表。

我认为第一步是比较两者之间的相似性company_name,如果它足够相似,我们可以假设它是相同的。

我做了一些研究,我认为我们需要使用 Levenshtein Distance。老实说,我对这种方法不是很熟悉,但是根据我的有限理解,我想知道它是否适用于包含多个单词的输入(例如纽约人寿保险公司),还是仅对一个单词输入有效(例如 Apple) .

任何建议或指导将不胜感激。

0 投票
1 回答
110 浏览

google-bigquery - 未找到用户定义的函数

我创建了一个永久 UDF 函数来验证这样的电子邮件:

并使用以下查询对其进行了测试,并像魅力一样工作:

但是当我查询一个表并尝试使用这样的函数时

我明白了:

未找到函数:project-name[1:15] 处的 .udf_library.is_valid_email

如果我将它创建为临时函数,它确实有效,但这违背了拥有永久 UDF 的全部目的

有任何想法吗?

谢谢