本地JavaScript自定义函数
In addition to Remote UDF, Timeplus Proton also supports JavaScript-based UDF running in the SQL engine. 您可以使用现代 JavaScript(由 V8提供支持)开发用户定义的标量函数 (UDF) 或用户定义的聚合函数 (UDAF)。 无需为 UDF 部署额外的服务器/服务。 将来将支持更多语言。
The JavaScript-based UDF can run in both Timeplus and Proton local deployments. 它在数据库引擎中“本地”运行。 它在数据库引擎中“本地”运行。 这并不意味着此功能仅适用于本地部署。
Register a JS UDF via SQL
Please check CREATE FUNCTION page for the SQL syntax.
Register a JS UDF via Web Console
- 从左侧导航菜单中打开 “UDF”,然后单击 “注册新功能” 按钮。
- 指定函数名称,例如
second_max
。 确保名称不会与内置函数或其他 UDF 冲突。 描述(可选) - 为输入参数和返回值选择数据类型。
- 选择“JavaScript”作为 UDF 类型。
- 指定该函数是否用于聚合。
- 输入 UDF 的 JavaScript 代码。 (我们将进一步解释如何编写代码。)
- 单击 创建 按钮注册该函数。
参数
与远程 UDF 不同,注册 JS UDF 时参数名称无关紧要。 请确保您的参数列表与您的 JavaScript 函数中的输入参数列表匹配。
输入数据采用 Timeplus 数据类型。 它们将被转换为 JavaScript 数据类型。
Timeplus 数据类型 | JavaScript 数据类型 |
---|---|
int8/16/32/64, uint8/16/32/64,float32/64 | number |
布尔值 | boolean |
fixed_string/string | 字符串 |
date/date32/datetime/datetime64 | Date (毫秒为精度) |
array(Type) | Array |
返回值
JavaScript UDF 可以返回以下数据类型,它们将被转换回指定的 Timeplus 数据类型。 支持的返回类型与参数类型类似。 唯一的区别是,如果您以 object
的形式返回一个复杂的数据结构,它将在 Timeplus 中被转换为一个命名的 tuple
。
JavaScript 数据类型 | Timeplus 数据类型 |
---|---|
number | int8/16/32/64, uint8/16/32/64,float32/64 |
boolean | 布尔值 |
字符串 | fixed_string/string |
Date (毫秒为精度) | date/date32/datetime/datetime64 |
Array | array(Type) |
object | 元组 |
开发标量函数
标量函数是每次调用返回一个值的函数;在大多数情况下,您可以将其视为每行返回一个值。 这与 聚合函数 不同,它返回每行组的一个值。
带有 1 个参数的标量函数
例如,您想检查用户是否在其个人资料中设置了工作电子邮件。 虽然这在普通 SQL 中是可以实现的,但如果你能创建 UDF 来提高 SQL 的可读性,那就更好了,例如
SELECT * FROM user_clicks where is_work_email(email)
您可以使用以下代码定义一个新函数 is_work_email
,其中一个输入类型 string
并返回 bool
。
function is_work_email(values){
return values.map(email=>email.endsWith("@gmail.com"));
}
备注: