Skip to content

Commit 4873917

Browse files
committed
docs: refine Chinese translation for UDF docs
1 parent de1a7cc commit 4873917

File tree

12 files changed

+375
-51
lines changed

12 files changed

+375
-51
lines changed
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
---
2+
title: CREATE AGGREGATE FUNCTION
3+
sidebar_position: 1
4+
---
5+
import FunctionDescription from '@site/src/components/FunctionDescription';
6+
7+
<FunctionDescription description="引入或更新于:v1.2.799"/>
8+
9+
创建用户自定义聚合函数(UDAF),在 Databend 内置的 JavaScript 或 Python 运行时中执行。
10+
11+
### 支持的语言
12+
13+
- `javascript`
14+
- `python`
15+
16+
## 语法
17+
18+
```sql
19+
CREATE [ OR REPLACE ] FUNCTION [ IF NOT EXISTS ] <function_name>
20+
( [ <parameter_list> ] )
21+
STATE { <state_field_list> }
22+
RETURNS <return_type>
23+
LANGUAGE <language_name>
24+
[ IMPORTS = (<stage_files>) ]
25+
[ PACKAGES = (<python_packages>) ]
26+
AS $$
27+
<language_specific_code>
28+
$$
29+
[ DESC='<description>' ]
30+
```
31+
32+
| 参数 | 说明 |
33+
| --- | --- |
34+
| `<function_name>` | 聚合函数名称。 |
35+
| `<parameter_list>` | 可选的输入参数及其类型,例如 `value DOUBLE`|
36+
| `STATE { <state_field_list> }` | 定义聚合过程中需要在部分聚合和最终聚合步骤间持久化的状态结构(例如 `STATE { sum DOUBLE, count DOUBLE }`)。 |
37+
| `<return_type>` | 聚合返回的数据类型。 |
38+
| `LANGUAGE` | 运行脚本的语言,支持 `javascript``python`|
39+
| `IMPORTS` / `PACKAGES` | 可选列表,用于加载额外文件(imports)或 PyPI 包(仅限 Python)。 |
40+
| `<language_specific_code>` | 脚本主体,必须实现并暴露 `create_state``accumulate``merge``finish` 入口函数。 |
41+
| `DESC` | 可选描述。 |
42+
43+
脚本需要实现以下函数:
44+
45+
- `create_state()` – 分配并返回初始状态对象。
46+
- `accumulate(state, *args)` – 针对每个输入行更新状态。
47+
- `merge(state1, state2)` – 合并两个部分聚合状态。
48+
- `finish(state)` – 生成最终结果(返回 `None` 表示 SQL `NULL`)。
49+
50+
## 访问控制要求
51+
52+
| 权限 | 对象类型 | 描述 |
53+
|:-----|:---------|:-----|
54+
| SUPER | 全局、表 | 操作 UDF |
55+
56+
创建 UDF 的用户或其 [current_role](/guides/security/access-control/roles) 必须拥有 SUPER [权限](/guides/security/access-control/privileges)
57+
58+
## 示例
59+
60+
### Python 平均值 UDAF
61+
62+
以下 Python 聚合函数示例用于计算列的平均值:
63+
64+
```sql
65+
CREATE OR REPLACE FUNCTION py_avg (value DOUBLE)
66+
STATE { sum DOUBLE, count DOUBLE }
67+
RETURNS DOUBLE
68+
LANGUAGE python
69+
AS $$
70+
class State:
71+
def __init__(self):
72+
self.sum = 0.0
73+
self.count = 0.0
74+
75+
def create_state():
76+
return State()
77+
78+
def accumulate(state, value):
79+
if value is not None:
80+
state.sum += value
81+
state.count += 1
82+
return state
83+
84+
def merge(state1, state2):
85+
state1.sum += state2.sum
86+
state1.count += state2.count
87+
return state1
88+
89+
def finish(state):
90+
if state.count == 0:
91+
return None
92+
return state.sum / state.count
93+
$$;
94+
95+
SELECT py_avg(number) AS avg_val FROM numbers(5);
96+
```
97+
98+
```
99+
+---------+
100+
| avg_val |
101+
+---------+
102+
| 2 |
103+
+---------+
104+
```
105+
106+
### JavaScript 平均值 UDAF
107+
108+
下面示例演示如何使用 JavaScript 完成相同的平均值计算:
109+
110+
```sql
111+
CREATE OR REPLACE FUNCTION js_avg (value DOUBLE)
112+
STATE { sum DOUBLE, count DOUBLE }
113+
RETURNS DOUBLE
114+
LANGUAGE javascript
115+
AS $$
116+
export function create_state() {
117+
return { sum: 0, count: 0 };
118+
}
119+
120+
export function accumulate(state, value) {
121+
if (value !== null) {
122+
state.sum += value;
123+
state.count += 1;
124+
}
125+
return state;
126+
}
127+
128+
export function merge(state1, state2) {
129+
state1.sum += state2.sum;
130+
state1.count += state2.count;
131+
return state1;
132+
}
133+
134+
export function finish(state) {
135+
if (state.count === 0) {
136+
return null;
137+
}
138+
return state.sum / state.count;
139+
}
140+
$$;
141+
142+
SELECT js_avg(number) AS avg_val FROM numbers(5);
143+
```
144+
145+
```
146+
+---------+
147+
| avg_val |
148+
+---------+
149+
| 2 |
150+
+---------+
151+
```

docs/cn/sql-reference/10-sql-commands/00-ddl/10-udf/ddl-create-function-embedded.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: CREATE EMBEDDED FUNCTION
3-
sidebar_position: 2
3+
sidebar_position: 3
44
---
55
import FunctionDescription from '@site/src/components/FunctionDescription';
66

@@ -207,4 +207,4 @@ AS $$@s_udf/arrow_udf_example.wasm$$;
207207

208208
-- 使用函数
209209
SELECT fib_wasm(10) AS fibonacci_result;
210-
```
210+
```

docs/cn/sql-reference/10-sql-commands/00-ddl/10-udf/ddl-create-function.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ import FunctionDescription from '@site/src/components/FunctionDescription';
66

77
<FunctionDescription description="引入或更新于:v1.2.799"/>
88

9-
使用 Databend 的统一函数语法创建标量 SQL UDF(User-Defined Function)。
9+
使用 Databend 的统一函数语法创建标量 SQL UDF。其逻辑完全由 SQL 定义,无需外部编程语言支持。
10+
11+
### 支持语言
12+
13+
- 仅支持 SQL 表达式(无需外部运行时环境)
1014

1115
## 语法
1216

@@ -59,4 +63,4 @@ $$;
5963
SELECT area_of_circle(5.0) AS circle_area;
6064
SELECT calculate_age('1990-05-15') AS age;
6165
SELECT calculate_bmi(70.0, 1.75) AS bmi;
62-
```
66+
```

docs/cn/sql-reference/10-sql-commands/00-ddl/10-udf/ddl-create-table-function.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
---
22
title: CREATE TABLE FUNCTION
3-
sidebar_position: 1
3+
sidebar_position: 2
44
---
55
import FunctionDescription from '@site/src/components/FunctionDescription';
66

77
<FunctionDescription description="引入或更新于:v1.2.799"/>
88

9-
创建表格式 SQL UDF(UDTF),将 SQL 查询封装为表函数。为保持一致性,使用与标量函数相同的统一 `$$` 语法。当前仅支持基于 SQL 的表函数。
9+
创建表值 SQL UDF (UDTF),将 SQL 查询封装为表函数。此类函数完全使用 SQL 编写,不涉及外部编程语言。
10+
11+
### 支持语言
12+
13+
- 仅支持 SQL 查询(无需外部运行时环境)
1014

1115
## 语法
1216

@@ -83,4 +87,4 @@ AS $$ SELECT department, COUNT(*) as employee_count, AVG(salary) as avg_salary F
8387

8488
-- 使用复杂表函数
8589
SELECT * FROM get_department_stats();
86-
```
90+
```

docs/cn/sql-reference/10-sql-commands/00-ddl/10-udf/index.md

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,31 @@
22
title: 用户自定义函数
33
---
44

5-
Databend 中的用户自定义函数(User-Defined Function,UDF)允许您根据特定的数据处理需求创建自定义操作。本页面将帮助您为具体用例选择合适的函数类型。
6-
7-
## 函数类型对比
8-
9-
| 特性 | 标量 SQL(Scalar SQL) | 表格 SQL(Tabular SQL) | 嵌入式(Embedded) |
10-
|---|---|---|---|
11-
| **返回类型** | 单个值 | 表/结果集 | 单个值 |
12-
| **语言** | SQL 表达式 | SQL 查询 | Python/JavaScript/WASM |
13-
| **性能** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
14-
| **需要企业版** ||| Python:是 |
15-
| **包支持** ||| Python:是 |
16-
| **最佳适用场景** | 数学计算<br/>字符串操作<br/>数据格式化 | 复杂查询<br/>多行结果<br/>数据转换 | 高级算法<br/>外部库<br/>控制流逻辑 |
5+
Databend 中的用户自定义函数(User-Defined Function,UDF)允许您根据特定的数据处理需求创建自定义操作。本页将重点介绍常用命令,并帮助您选择适合您用例的函数类型。
176

187
## 函数管理命令
198

209
| 命令 | 描述 |
2110
|---|---|
22-
| [CREATE SCALAR FUNCTION](ddl-create-function.md) | 使用统一语法创建标量 SQL 函数 |
23-
| [CREATE TABLE FUNCTION](ddl-create-table-function.md) | 创建返回结果集的表格函数 |
24-
| [CREATE EMBEDDED FUNCTION](ddl-create-function-embedded.md) | 创建嵌入式函数(Python/JavaScript/WASM) |
11+
| [CREATE SCALAR FUNCTION](ddl-create-function.md) | 纯 SQL 标量函数(无外部语言) |
12+
| [CREATE AGGREGATE FUNCTION](ddl-create-aggregate-function.md) | 脚本 UDAF(JavaScript/Python 运行时) |
13+
| [CREATE TABLE FUNCTION](ddl-create-table-function.md) | 纯 SQL 表函数(返回结果集) |
14+
| [CREATE EMBEDDED FUNCTION](ddl-create-function-embedded.md) | 嵌入式函数(Python/JavaScript/WASM) |
2515
| [SHOW USER FUNCTIONS](ddl-show-user-functions.md) | 列出所有用户自定义函数 |
2616
| [ALTER FUNCTION](ddl-alter-function.md) | 修改现有函数 |
2717
| [DROP FUNCTION](ddl-drop-function.md) | 移除函数 |
2818

19+
## 函数类型对比
20+
21+
| 特性 | 标量 SQL(Scalar) | 聚合(脚本) | 表格 SQL(Tabular) | 嵌入式(Embedded) |
22+
|---|---|---|---|---|
23+
| **返回类型** | 单个值 | 单个值 | 表/结果集 | 单个值 |
24+
| **语言** | SQL 表达式 | JavaScript/Python 运行时 | SQL 查询 | Python/JavaScript/WASM |
25+
| **性能** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
26+
| **需要企业版** || Python 运行时需要 || Python 运行时需要 |
27+
| **包支持** || Python:支持 PACKAGES || Python:支持 PACKAGES |
28+
| **最佳适用场景** | 数学计算<br/>字符串操作<br/>数据格式化 | 自定义聚合逻辑<br/>需要脚本语言处理 | 复杂查询<br/>多行结果<br/>数据转换 | 高级算法<br/>外部库<br/>控制流逻辑 |
29+
2930
## 统一语法
3031

3132
所有本地 UDF 类型都使用一致的 `$$` 语法:
@@ -40,4 +41,4 @@ CREATE FUNCTION func_name(param TYPE) RETURNS TABLE(...) AS $$ query $$;
4041
-- 嵌入式函数
4142
CREATE FUNCTION func_name(param TYPE) RETURNS TYPE LANGUAGE python
4243
HANDLER = 'handler' AS $$ code $$;
43-
```
44+
```

docs/cn/sql-reference/10-sql-commands/00-ddl/11-external-function/ddl-create-function.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ import FunctionDescription from '@site/src/components/FunctionDescription';
66

77
<FunctionDescription description="引入或更新于:v1.2.339"/>
88

9-
创建外部函数(External Function)。
9+
创建外部函数(External Function),通过 Flight 协议调用远程处理程序(通常为 Python 或其他服务)。
10+
11+
### 支持语言
12+
13+
- 由远程服务器实现决定(常见为 Python,只要实现了 Flight 接口,可以使用任意语言)
1014

1115
## 语法
1216

@@ -39,4 +43,4 @@ CREATE FUNCTION gcd AS (INT, INT)
3943
LANGUAGE python
4044
HANDLER = 'gcd'
4145
ADDRESS = 'http://localhost:8815';
42-
```
46+
```

0 commit comments

Comments
 (0)