diff --git a/.translation-init b/.translation-init
index 4aeec2c493..1a9924ba12 100644
--- a/.translation-init
+++ b/.translation-init
@@ -1 +1 @@
-Translation initialization: 2025-08-18T07:47:46.585026
+Translation initialization: 2025-08-19T14:40:33.705590
diff --git a/docs/cn/sql-reference/10-sql-commands/00-ddl/20-workload-group/create-workload-group.md b/docs/cn/sql-reference/10-sql-commands/00-ddl/20-workload-group/create-workload-group.md
index 9f936737e2..3b0ec5c2e2 100644
--- a/docs/cn/sql-reference/10-sql-commands/00-ddl/20-workload-group/create-workload-group.md
+++ b/docs/cn/sql-reference/10-sql-commands/00-ddl/20-workload-group/create-workload-group.md
@@ -5,7 +5,7 @@ import FunctionDescription from '@site/src/components/FunctionDescription';
-创建一个具有指定配额设置的工作负载组(Workload Group)。工作负载组(Workload Group)通过与用户绑定来控制资源分配和查询(Query)并发。当用户提交查询(Query)时,系统会根据用户所属的工作负载组(Workload Group)自动应用相应的资源限制。
+创建具有指定配额设置的工作负载组(Workload Group)。工作负载组通过与用户绑定来控制资源分配和查询并发。当用户提交查询时,系统会根据用户所属的组应用相应限制。
## 语法
@@ -16,13 +16,13 @@ CREATE WORKLOAD GROUP [IF NOT EXISTS]
## 参数
-| 参数 | 类型 | 是否必需 | 默认值 | 描述 |
-|------------------------|------------------|----------|-------------|------------------------------------------------------------------------------|
-| `cpu_quota` | string | 否 | (无限制) | CPU 资源配额,以百分比字符串表示(例如 `"20%"`) |
-| `query_timeout` | duration | 否 | (无限制) | 查询(Query)超时时长(单位:`s`/`sec`=秒,`m`/`min`=分钟,`h`/`hour`=小时,`d`/`day`=天,`ms`=毫秒,无单位=秒) |
-| `memory_quota` | string 或 integer | 否 | (无限制) | 工作负载组(Workload Group)的最大内存使用限制(百分比或绝对值) |
-| `max_concurrency` | integer | 否 | (无限制) | 工作负载组(Workload Group)的最大并发数 |
-| `query_queued_timeout` | duration | 否 | (无限制) | 工作负载组(Workload Group)超出最大并发时的最大排队等待时间(单位:`s`/`sec`=秒,`m`/`min`=分钟,`h`/`hour`=小时,`d`/`day`=天,`ms`=毫秒,无单位=秒) |
+| 参数 | 类型 | 是否必需 | 默认值 | 描述 |
+|------------------------|-----------------|----------|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `cpu_quota` | string | 否 | (无限制) | CPU 资源配额,以百分比字符串表示(例如 `"20%"`) |
+| `query_timeout` | duration | 否 | (无限制) | 查询超时时长(单位:`s`/`sec`=秒,`m`/`min`=分钟,`h`/`hour`=小时,`d`/`day`=天,`ms`=毫秒,无单位=秒) |
+| `memory_quota` | string 或 integer | 否 | (无限制) | 工作负载组的最大内存使用限制(百分比或绝对值) |
+| `max_concurrency` | integer | 否 | (无限制) | 工作负载组的最大并发数 |
+| `query_queued_timeout` | duration | 否 | (无限制) | 当工作负载组超过最大并发数时的最大排队等待时间(单位:`s`/`sec`=秒,`m`/`min`=分钟,`h`/`hour`=小时,`d`/`day`=天,`ms`=毫秒,无单位=秒) |
## 示例
@@ -39,17 +39,20 @@ WITH cpu_quota = '70%', memory_quota = '80%', max_concurrency = 10;
### 用户分配
-用户必须分配到工作负载组(Workload Group)才能启用资源限制。当用户执行查询(Query)时,系统会自动应用该工作负载组(Workload Group)的限制。
+用户必须被分配到工作负载组才能启用资源限制。当用户执行查询时,系统会自动应用工作负载组的限制。
```sql
--- 创建并分配用户
+-- 创建用户并授予权限
CREATE USER analytics_user IDENTIFIED BY 'password123';
+GRANT ALL ON *.* TO analytics_user;
+
+-- 将用户分配到工作负载组
ALTER USER analytics_user WITH SET WORKLOAD GROUP = 'interactive_queries';
--- 重新分配到不同工作负载组
+-- 重新分配到不同的工作负载组
ALTER USER analytics_user WITH SET WORKLOAD GROUP = 'batch_processing';
--- 从工作负载组移除(用户将使用默认无限制资源)
+-- 从工作负载组中移除(用户将使用默认的无限制资源)
ALTER USER analytics_user WITH UNSET WORKLOAD GROUP;
-- 检查用户的工作负载组
@@ -59,30 +62,30 @@ DESC USER analytics_user;
## 资源配额归一化
### 配额限制
-- 每个工作负载组(Workload Group)的 `cpu_quota` 和 `memory_quota` 最高可设为 `100%` (1.0)
-- 所有工作负载组(Workload Group)的配额总和可超过 100%
-- 实际资源分配会基于相对比例进行**归一化**
+- 每个工作负载组的 `cpu_quota` 和 `memory_quota` 最高可设置为 `100%` (1.0)。
+- 所有工作负载组的配额总和可以超过 100%。
+- 实际的资源分配将根据相对比例进行**归一化**。
-### 配额归一化原理
+### 配额归一化工作原理
-资源按各组配额占总配额的比例分配:
+资源根据每个组的配额相对于总配额的比例进行分配:
```
-实际分配 = (组配额) / (所有组配额总和) × 100%
+实际分配比例 = (组配额) / (所有组配额之和) × 100%
```
**示例 1:总配额 = 100%**
-- 组 A:30% 配额 → 获得 30% 资源 (30/100)
-- 组 B:70% 配额 → 获得 70% 资源 (70/100)
+- 组 A:30% 配额 → 获得 30% 的资源 (30/100)
+- 组 B:70% 配额 → 获得 70% 的资源 (70/100)
**示例 2:总配额 > 100%**
-- 组 A:60% 配额 → 获得 40% 资源 (60/150)
-- 组 B:90% 配额 → 获得 60% 资源 (90/150)
+- 组 A:60% 配额 → 获得 40% 的资源 (60/150)
+- 组 B:90% 配额 → 获得 60% 的资源 (90/150)
- 总配额:150%
**示例 3:总配额 < 100%**
-- 组 A:20% 配额 → 获得 67% 资源 (20/30)
-- 组 B:10% 配额 → 获得 33% 资源 (10/30)
+- 组 A:20% 配额 → 获得 67% 的资源 (20/30)
+- 组 B:10% 配额 → 获得 33% 的资源 (10/30)
- 总配额:30%
-**特殊情况:** 当仅存在一个工作负载组(Workload Group)时,无论其配置配额如何,都将获得 100% 的计算集群(Warehouse)资源。
\ No newline at end of file
+**特殊情况:**当只存在一个工作负载组时,无论其配置的配额如何,它都将获得 100% 的计算集群(Warehouse)资源。
\ No newline at end of file
diff --git a/docs/cn/sql-reference/10-sql-commands/00-ddl/20-workload-group/index.md b/docs/cn/sql-reference/10-sql-commands/00-ddl/20-workload-group/index.md
index fafa08d7c7..c41230a71b 100644
--- a/docs/cn/sql-reference/10-sql-commands/00-ddl/20-workload-group/index.md
+++ b/docs/cn/sql-reference/10-sql-commands/00-ddl/20-workload-group/index.md
@@ -2,13 +2,13 @@
title: 工作负载组(Workload Group)
---
-工作负载组(Workload Group)通过为不同用户组分配 CPU、内存配额和限制并发查询,在 Databend 中实现资源管理与查询并发控制。
+工作负载组(Workload Group)通过为不同用户组分配 CPU、内存配额并限制并发查询,在 Databend 中实现资源管理与查询并发控制。
## 工作原理
-1. **创建工作负载组**,并指定资源配额(CPU、内存、并发限制)
-2. 使用 `ALTER USER` **将用户分配**到工作负载组
-3. **执行查询**时自动应用用户所在工作负载组的资源限制
+1. **创建工作负载组(Workload Group)**,并指定具体的资源配额(CPU、内存、并发限制)。
+2. 使用 `ALTER USER` **将用户分配**到工作负载组(Workload Group)。
+3. **执行查询(Query)**时,系统会根据用户自动应用其所属工作负载组(Workload Group)的资源限制。
## 快速示例
@@ -16,9 +16,15 @@ title: 工作负载组(Workload Group)
-- 创建工作负载组
CREATE WORKLOAD GROUP analytics WITH cpu_quota = '50%', memory_quota = '30%', max_concurrency = 5;
--- 将用户分配到工作负载组
+-- 创建用户并授予权限
CREATE USER analyst IDENTIFIED BY 'password';
+GRANT ALL ON *.* TO analyst;
+
+-- 将用户分配到工作负载组
ALTER USER analyst WITH SET WORKLOAD GROUP = 'analytics';
+
+-- 从工作负载组中移除用户(用户将使用默认的无限资源)
+ALTER USER analyst WITH UNSET WORKLOAD GROUP;
```
## 命令参考
@@ -26,9 +32,9 @@ ALTER USER analyst WITH SET WORKLOAD GROUP = 'analytics';
### 管理
| 命令 | 描述 |
|---------|-------------|
-| [CREATE WORKLOAD GROUP](create-workload-group.md) | 创建带资源配额的新工作负载组 |
+| [CREATE WORKLOAD GROUP](create-workload-group.md) | 创建新的工作负载组并设置资源配额 |
| [ALTER WORKLOAD GROUP](alter-workload-group.md) | 修改工作负载组配置 |
-| [DROP WORKLOAD GROUP](drop-workload-group.md) | 移除工作负载组 |
+| [DROP WORKLOAD GROUP](drop-workload-group.md) | 删除工作负载组 |
| [RENAME WORKLOAD GROUP](rename-workload-group.md) | 重命名工作负载组 |
### 信息
@@ -37,5 +43,5 @@ ALTER USER analyst WITH SET WORKLOAD GROUP = 'analytics';
| [SHOW WORKLOAD GROUPS](show-workload-groups.md) | 列出所有工作负载组及其设置 |
:::tip
-在计算集群(Warehouse)中,所有工作负载组的资源配额会被归一化处理。例如,若两组 CPU 配额分别为 60% 和 40%,则它们将分别获得实际资源的 60% 和 40%。
+资源配额在计算集群(Warehouse)中的所有工作负载组之间进行归一化。例如,如果两个组的 CPU 配额分别为 60% 和 40%,它们将分别获得实际资源的 60% 和 40%。
:::
\ No newline at end of file
diff --git a/docs/cn/sql-reference/20-sql-functions/10-semi-structured-functions/0-json/index.md b/docs/cn/sql-reference/20-sql-functions/10-semi-structured-functions/0-json/index.md
index 053804ae43..1c8d7f53ce 100644
--- a/docs/cn/sql-reference/20-sql-functions/10-semi-structured-functions/0-json/index.md
+++ b/docs/cn/sql-reference/20-sql-functions/10-semi-structured-functions/0-json/index.md
@@ -2,14 +2,14 @@
title: JSON 函数
---
-本节提供了 Databend 中 JSON 函数的参考信息。JSON 函数支持解析、验证、查询和操作 JSON 数据结构。
+本节提供 Databend 中 JSON 函数的参考信息。JSON 函数支持解析、验证、查询和操作 JSON 数据结构。
## JSON 解析与验证
| 函数 | 描述 | 示例 |
|----------|-------------|---------|
| [PARSE_JSON](parse-json) | 将 JSON 字符串解析为 VARIANT 值 | `PARSE_JSON('{"name":"John","age":30}')` → `{"name":"John","age":30}` |
-| [CHECK_JSON](check-json) | 验证字符串是否为有效的 JSON | `CHECK_JSON('{"valid": true}')` → `true` |
+| [CHECK_JSON](check-json) | 验证字符串是否为有效 JSON | `CHECK_JSON('{"valid": true}')` → `true` |
## JSON 类型信息
@@ -28,7 +28,7 @@ title: JSON 函数
| 函数 | 描述 | 示例 |
|----------|-------------|---------|
| [JSON_PATH_EXISTS](json-path-exists) | 检查 JSON 路径是否存在 | `JSON_PATH_EXISTS('{"a":1}', '$.a')` → `true` |
-| [JSON_PATH_MATCH](json-path-match) | 根据路径模式匹配 JSON 值 | `JSON_PATH_MATCH('{"items":[1,2,3]}', '$.items[*]')` → `[1,2,3]` |
+| [JSON_PATH_MATCH](json-path-match) | 按路径模式匹配 JSON 值 | `JSON_PATH_MATCH('{"items":[1,2,3]}', '$.items[*]')` → `[1,2,3]` |
| [JSON_PATH_QUERY](json-path-query) | 使用 JSONPath 查询 JSON 数据 | `JSON_PATH_QUERY('{"a":1,"b":2}', '$.a')` → `1` |
| [JSON_PATH_QUERY_ARRAY](json-path-query-array) | 查询 JSON 数据并以数组形式返回结果 | `JSON_PATH_QUERY_ARRAY('[1,2,3]', '$[*]')` → `[1,2,3]` |
| [JSON_PATH_QUERY_FIRST](json-path-query-first) | 返回 JSON 路径查询的第一个结果 | `JSON_PATH_QUERY_FIRST('[1,2,3]', '$[*]')` → `1` |
@@ -37,7 +37,10 @@ title: JSON 函数
| 函数 | 描述 | 示例 |
|----------|-------------|---------|
-| [JSON_EXTRACT_PATH_TEXT](json-extract-path-text) | 使用路径从 JSON 中提取文本值 | `JSON_EXTRACT_PATH_TEXT('{"name":"John"}', 'name')` → `'John'` |
+| [GET](get) | 按索引或字段名从 JSON 提取值 | `GET('{"name":"John"}', 'name')` → `"John"` |
+| [GET_IGNORE_CASE](get-ignore-case) | 以不区分大小写的方式按字段名提取值 | `GET_IGNORE_CASE('{"Name":"John"}', 'name')` → `"John"` |
+| [GET_PATH](get-path) | 使用路径表示法提取值 | `GET_PATH('{"user":{"name":"John"}}', 'user.name')` → `"John"` |
+| [JSON_EXTRACT_PATH_TEXT](json-extract-path-text) | 使用路径从 JSON 提取文本值 | `JSON_EXTRACT_PATH_TEXT('{"name":"John"}', 'name')` → `'John'` |
| [JSON_EACH](json-each) | 将 JSON 对象展开为键值对 | `JSON_EACH('{"a":1,"b":2}')` → `[("a",1),("b",2)]` |
| [JSON_ARRAY_ELEMENTS](json-array-elements) | 将 JSON 数组展开为单个元素 | `JSON_ARRAY_ELEMENTS('[1,2,3]')` → `1, 2, 3` |
@@ -45,6 +48,6 @@ title: JSON 函数
| 函数 | 描述 | 示例 |
|----------|-------------|---------|
-| [JSON_PRETTY](json-pretty) | 使用适当的缩进格式化 JSON | `JSON_PRETTY('{"a":1}')` → 格式化后的 JSON 字符串 |
+| [JSON_PRETTY](json-pretty) | 以适当缩进格式化 JSON | `JSON_PRETTY('{"a":1}')` → 格式化后的 JSON 字符串 |
| [STRIP_NULL_VALUE](strip-null-value) | 从 JSON 中移除 null 值 | `STRIP_NULL_VALUE('{"a":1,"b":null}')` → `{"a":1}` |
-| [JQ](jq) | 使用 jq 风格的查询处理 JSON | `JQ('{"name":"John"}', '.name')` → `"John"` |
\ No newline at end of file
+| [JQ](jq) | 使用 jq 风格查询处理 JSON | `JQ('{"name":"John"}', '.name')` → `"John"` |
\ No newline at end of file
diff --git a/docs/cn/sql-reference/20-sql-functions/10-semi-structured-functions/index.md b/docs/cn/sql-reference/20-sql-functions/10-semi-structured-functions/index.md
index afdc9209d1..35760d1397 100644
--- a/docs/cn/sql-reference/20-sql-functions/10-semi-structured-functions/index.md
+++ b/docs/cn/sql-reference/20-sql-functions/10-semi-structured-functions/index.md
@@ -2,64 +2,82 @@
title: 结构化与半结构化函数
---
-Databend 中的结构化与半结构化函数能够高效处理数组(Array)、对象(Object)、映射(Map)、JSON 以及其他结构化数据格式。这些函数为创建、解析、查询、转换和操作结构化与半结构化数据提供了全面的功能。
+Databend 中的结构化与半结构化函数能够高效处理数组(Array)、对象(Object)、映射(Map)、JSON 以及其他结构化数据格式。这些函数为创建、解析、查询、转换和操作结构化及半结构化数据提供了全面的能力。
## JSON 函数
+### 解析与验证
| 函数 | 描述 | 示例 |
|----------|-------------|--------|
| [PARSE_JSON](json/parse-json) | 将 JSON 字符串解析为 VARIANT 值 | `PARSE_JSON('[1,2,3]')` |
-| [CHECK_JSON](json/check-json) | 验证字符串是否为有效的 JSON | `CHECK_JSON('{"a":1}')` |
+| [CHECK_JSON](json/check-json) | 验证字符串是否为有效 JSON | `CHECK_JSON('{"a":1}')` |
| [JSON_TYPEOF](json/json-typeof) | 返回 JSON 值的类型 | `JSON_TYPEOF(PARSE_JSON('[1,2,3]'))` |
-| [JSON_TO_STRING](json/json-to-string) | 将 JSON 值转换为字符串 | `JSON_TO_STRING(PARSE_JSON('{"a":1}'))` |
+
+### 基于路径的查询
+| 函数 | 描述 | 示例 |
+|----------|-------------|--------|
| [JSON_PATH_EXISTS](json/json-path-exists) | 检查 JSON 路径是否存在 | `JSON_PATH_EXISTS(json_obj, '$.name')` |
-| [JSON_PATH_MATCH](json/json-path-match) | 根据路径模式匹配 JSON 值 | `JSON_PATH_MATCH(json_obj, '$.age')` |
| [JSON_PATH_QUERY](json/json-path-query) | 使用 JSONPath 查询 JSON 数据 | `JSON_PATH_QUERY(json_obj, '$.items[*]')` |
| [JSON_PATH_QUERY_ARRAY](json/json-path-query-array) | 查询 JSON 数据并以数组形式返回结果 | `JSON_PATH_QUERY_ARRAY(json_obj, '$.items')` |
-| [JSON_PATH_QUERY_FIRST](json/json-path-query-first) | 返回 JSON 路径查询的首个结果 | `JSON_PATH_QUERY_FIRST(json_obj, '$.items[*]')` |
-| [JSON_EXTRACT_PATH_TEXT](json/json-extract-path-text) | 通过路径从 JSON 中提取文本值 | `JSON_EXTRACT_PATH_TEXT(json_obj, 'name')` |
-| [GET](json/get) | 通过键从 JSON 对象获取值,或通过索引从数组获取值 | `GET(PARSE_JSON('[1,2,3]'), 0)` |
-| [GET_PATH](json/get-path) | 使用路径表达式从 JSON 对象获取值 | `GET_PATH(json_obj, 'user.name')` |
-| [GET_IGNORE_CASE](json/get-ignore-case) | 通过不区分大小写的键匹配获取值 | `GET_IGNORE_CASE(json_obj, 'NAME')` |
+| [JSON_PATH_QUERY_FIRST](json/json-path-query-first) | 返回 JSON 路径查询的第一个结果 | `JSON_PATH_QUERY_FIRST(json_obj, '$.items[*]')` |
+| [JSON_PATH_MATCH](json/json-path-match) | 根据路径模式匹配 JSON 值 | `JSON_PATH_MATCH(json_obj, '$.age')` |
+| [JQ](json/jq) | 使用 jq 语法进行高级 JSON 处理 | `JQ('.name', json_obj)` |
+
+### 值提取
+| 函数 | 描述 | 示例 |
+|----------|-------------|--------|
+| [GET](json/get) | 通过键从 JSON 对象或通过索引从数组中获取值 | `GET(PARSE_JSON('[1,2,3]'), 0)` |
+| [GET_PATH](json/get-path) | 使用路径表达式从 JSON 对象中获取值 | `GET_PATH(json_obj, 'user.name')` |
+| [GET_IGNORE_CASE](json/get-ignore-case) | 以不区分大小写的键匹配方式获取值 | `GET_IGNORE_CASE(json_obj, 'NAME')` |
+| [JSON_EXTRACT_PATH_TEXT](json/json-extract-path-text) | 使用路径从 JSON 中提取文本值 | `JSON_EXTRACT_PATH_TEXT(json_obj, 'name')` |
+
+### 转换与输出
+| 函数 | 描述 | 示例 |
+|----------|-------------|--------|
+| [JSON_TO_STRING](json/json-to-string) | 将 JSON 值转换为字符串 | `JSON_TO_STRING(PARSE_JSON('{"a":1}'))` |
+| [JSON_PRETTY](json/json-pretty) | 使用适当缩进格式化 JSON | `JSON_PRETTY(PARSE_JSON('{"a":1}'))` |
+| [STRIP_NULL_VALUE](json/strip-null-value) | 从 JSON 中移除 null 值 | `STRIP_NULL_VALUE(PARSE_JSON('{"a":1,"b":null}'))` |
+
+### 数组/对象展开
+| 函数 | 描述 | 示例 |
+|----------|-------------|--------|
| [JSON_EACH](json/json-each) | 将 JSON 对象展开为键值对 | `JSON_EACH(PARSE_JSON('{"a":1,"b":2}'))` |
-| [JSON_ARRAY_ELEMENTS](json/json-array-elements) | 将 JSON 数组展开为独立元素 | `JSON_ARRAY_ELEMENTS(PARSE_JSON('[1,2,3]'))` |
-| [JSON_PRETTY](json/json-pretty) | 格式化 JSON 并保留合理缩进 | `JSON_PRETTY(PARSE_JSON('{"a":1}'))` |
-| [STRIP_NULL_VALUE](json/strip-null-value) | 移除 JSON 中的 null 值 | `STRIP_NULL_VALUE(PARSE_JSON('{"a":1,"b":null}'))` |
+| [JSON_ARRAY_ELEMENTS](json/json-array-elements) | 将 JSON 数组展开为单个元素 | `JSON_ARRAY_ELEMENTS(PARSE_JSON('[1,2,3]'))` |
## 数组函数
| 函数 | 描述 | 示例 |
|----------|-------------|--------|
-| [ARRAY_CONSTRUCT](array/array-construct) | 从独立值创建数组 | `ARRAY_CONSTRUCT(1, 2, 3)` |
+| [ARRAY_CONSTRUCT](array/array-construct) | 从单个值创建数组 | `ARRAY_CONSTRUCT(1, 2, 3)` |
| [RANGE](array/range) | 生成连续数字的数组 | `RANGE(1, 5)` |
-| [GET](array/get) | 通过索引从数组获取元素 | `GET(PARSE_JSON('[1,2,3]'), 0)` |
+| [GET](array/get) | 通过索引从数组中获取元素 | `GET(PARSE_JSON('[1,2,3]'), 0)` |
| [ARRAY_GET](array/array-get) | GET 函数的别名 | `ARRAY_GET([1,2,3], 1)` |
| [CONTAINS](array/contains) | 检查数组是否包含特定值 | `CONTAINS([1,2,3], 2)` |
| [ARRAY_CONTAINS](array/array-contains) | 检查数组是否包含特定值 | `ARRAY_CONTAINS([1,2,3], 2)` |
-| [ARRAY_APPEND](array/array-append) | 向数组末尾追加元素 | `ARRAY_APPEND([1,2], 3)` |
-| [ARRAY_PREPEND](array/array-prepend) | 向数组开头添加元素 | `ARRAY_PREPEND([2,3], 1)` |
+| [ARRAY_APPEND](array/array-append) | 将元素追加到数组末尾 | `ARRAY_APPEND([1,2], 3)` |
+| [ARRAY_PREPEND](array/array-prepend) | 将元素前插到数组开头 | `ARRAY_PREPEND([2,3], 1)` |
| [ARRAY_INSERT](array/array-insert) | 在指定位置插入元素 | `ARRAY_INSERT([1,3], 1, 2)` |
-| [ARRAY_REMOVE](array/array-remove) | 移除所有指定元素 | `ARRAY_REMOVE([1,2,2,3], 2)` |
-| [ARRAY_REMOVE_FIRST](array/array-remove-first) | 移除数组首个元素 | `ARRAY_REMOVE_FIRST([1,2,3])` |
-| [ARRAY_REMOVE_LAST](array/array-remove-last) | 移除数组末尾元素 | `ARRAY_REMOVE_LAST([1,2,3])` |
+| [ARRAY_REMOVE](array/array-remove) | 移除所有出现的指定元素 | `ARRAY_REMOVE([1,2,2,3], 2)` |
+| [ARRAY_REMOVE_FIRST](array/array-remove-first) | 从数组中移除第一个元素 | `ARRAY_REMOVE_FIRST([1,2,3])` |
+| [ARRAY_REMOVE_LAST](array/array-remove-last) | 从数组中移除最后一个元素 | `ARRAY_REMOVE_LAST([1,2,3])` |
| [ARRAY_CONCAT](array/array-concat) | 连接多个数组 | `ARRAY_CONCAT([1,2], [3,4])` |
-| [ARRAY_SLICE](array/array-slice) | 提取数组的子集 | `ARRAY_SLICE([1,2,3,4], 1, 2)` |
+| [ARRAY_SLICE](array/array-slice) | 提取数组的一部分 | `ARRAY_SLICE([1,2,3,4], 1, 2)` |
| [SLICE](array/slice) | ARRAY_SLICE 函数的别名 | `SLICE([1,2,3,4], 1, 2)` |
-| [ARRAYS_ZIP](array/arrays-zip) | 按元素组合多个数组 | `ARRAYS_ZIP([1,2], ['a','b'])` |
-| [ARRAY_DISTINCT](array/array-distinct) | 返回数组中的唯一元素 | `ARRAY_DISTINCT([1,2,2,3])` |
+| [ARRAYS_ZIP](array/arrays-zip) | 按元素方式组合多个数组 | `ARRAYS_ZIP([1,2], ['a','b'])` |
+| [ARRAY_DISTINCT](array/array-distinct) | 从数组中返回唯一元素 | `ARRAY_DISTINCT([1,2,2,3])` |
| [ARRAY_UNIQUE](array/array-unique) | ARRAY_DISTINCT 函数的别名 | `ARRAY_UNIQUE([1,2,2,3])` |
-| [ARRAY_INTERSECTION](array/array-intersection) | 返回数组间的共同元素 | `ARRAY_INTERSECTION([1,2,3], [2,3,4])` |
-| [ARRAY_EXCEPT](array/array-except) | 返回仅存在于首个数组的元素 | `ARRAY_EXCEPT([1,2,3], [2,3])` |
-| [ARRAY_OVERLAP](array/array-overlap) | 检查数组是否存在共同元素 | `ARRAY_OVERLAP([1,2], [2,3])` |
+| [ARRAY_INTERSECTION](array/array-intersection) | 返回数组之间的共同元素 | `ARRAY_INTERSECTION([1,2,3], [2,3,4])` |
+| [ARRAY_EXCEPT](array/array-except) | 返回存在于第一个数组但不存在于第二个数组中的元素 | `ARRAY_EXCEPT([1,2,3], [2,3])` |
+| [ARRAY_OVERLAP](array/array-overlap) | 检查数组是否有共同元素 | `ARRAY_OVERLAP([1,2], [2,3])` |
| [ARRAY_TRANSFORM](array/array-transform) | 对每个数组元素应用函数 | `ARRAY_TRANSFORM([1,2,3], x -> x * 2)` |
| [ARRAY_FILTER](array/array-filter) | 根据条件筛选数组元素 | `ARRAY_FILTER([1,2,3,4], x -> x > 2)` |
-| [ARRAY_REDUCE](array/array-reduce) | 使用聚合函数将数组归约为单值 | `ARRAY_REDUCE([1,2,3], 0, (acc, x) -> acc + x)` |
+| [ARRAY_REDUCE](array/array-reduce) | 使用聚合将数组归约为单个值 | `ARRAY_REDUCE([1,2,3], 0, (acc, x) -> acc + x)` |
| [ARRAY_AGGREGATE](array/array-aggregate) | 使用函数聚合数组元素 | `ARRAY_AGGREGATE([1,2,3], 'sum')` |
-| [ARRAY_COMPACT](array/array-compact) | 移除数组中的 null 值 | `ARRAY_COMPACT([1, NULL, 2, NULL, 3])` |
-| [ARRAY_FLATTEN](array/array-flatten) | 将嵌套数组展平为单层数组 | `ARRAY_FLATTEN([[1,2], [3,4]])` |
-| [ARRAY_REVERSE](array/array-reverse) | 反转数组元素顺序 | `ARRAY_REVERSE([1,2,3])` |
+| [ARRAY_COMPACT](array/array-compact) | 从数组中移除 null 值 | `ARRAY_COMPACT([1, NULL, 2, NULL, 3])` |
+| [ARRAY_FLATTEN](array/array-flatten) | 将嵌套数组展平为单个数组 | `ARRAY_FLATTEN([[1,2], [3,4]])` |
+| [ARRAY_REVERSE](array/array-reverse) | 反转数组元素的顺序 | `ARRAY_REVERSE([1,2,3])` |
| [ARRAY_INDEXOF](array/array-indexof) | 返回元素首次出现的索引 | `ARRAY_INDEXOF([1,2,3,2], 2)` |
-| [UNNEST](array/unnest) | 将数组展开为独立行 | `UNNEST([1,2,3])` |
+| [UNNEST](array/unnest) | 将数组展开为单独的行 | `UNNEST([1,2,3])` |
## 对象函数
@@ -67,26 +85,26 @@ Databend 中的结构化与半结构化函数能够高效处理数组(Array)
|----------|-------------|--------|
| [OBJECT_CONSTRUCT](object/object-construct) | 从键值对创建 JSON 对象 | `OBJECT_CONSTRUCT('name', 'John', 'age', 30)` |
| [OBJECT_CONSTRUCT_KEEP_NULL](object/object-construct-keep-null) | 创建 JSON 对象并保留 null 值 | `OBJECT_CONSTRUCT_KEEP_NULL('a', 1, 'b', NULL)` |
-| [OBJECT_KEYS](object/object-keys) | 返回 JSON 对象的所有键(数组形式) | `OBJECT_KEYS(PARSE_JSON('{"a":1,"b":2}'))` |
+| [OBJECT_KEYS](object/object-keys) | 以数组形式返回 JSON 对象的所有键 | `OBJECT_KEYS(PARSE_JSON('{"a":1,"b":2}'))` |
| [OBJECT_INSERT](object/object-insert) | 在 JSON 对象中插入或更新键值对 | `OBJECT_INSERT(json_obj, 'new_key', 'value')` |
| [OBJECT_DELETE](object/object-delete) | 从 JSON 对象中移除键值对 | `OBJECT_DELETE(json_obj, 'key_to_remove')` |
-| [OBJECT_PICK](object/object-pick) | 创建仅含指定键的新对象 | `OBJECT_PICK(json_obj, 'name', 'age')` |
+| [OBJECT_PICK](object/object-pick) | 使用指定键创建新对象 | `OBJECT_PICK(json_obj, 'name', 'age')` |
-## 映射(Map)函数
+## 映射函数
| 函数 | 描述 | 示例 |
|----------|-------------|--------|
-| [MAP_CAT](map/map-cat) | 合并多个映射为单个映射 | `MAP_CAT({'a':1}, {'b':2})` |
-| [MAP_KEYS](map/map-keys) | 返回映射的所有键(数组形式) | `MAP_KEYS({'a':1, 'b':2})` |
-| [MAP_VALUES](map/map-values) | 返回映射的所有值(数组形式) | `MAP_VALUES({'a':1, 'b':2})` |
-| [MAP_SIZE](map/map-size) | 返回映射中的键值对数量 | `MAP_SIZE({'a':1, 'b':2})` |
+| [MAP_CAT](map/map-cat) | 将多个映射合并为单个映射 | `MAP_CAT({'a':1}, {'b':2})` |
+| [MAP_KEYS](map/map-keys) | 以数组形式返回映射的所有键 | `MAP_KEYS({'a':1, 'b':2})` |
+| [MAP_VALUES](map/map-values) | 以数组形式返回映射的所有值 | `MAP_VALUES({'a':1, 'b':2})` |
+| [MAP_SIZE](map/map-size) | 返回映射中键值对的数量 | `MAP_SIZE({'a':1, 'b':2})` |
| [MAP_CONTAINS_KEY](map/map-contains-key) | 检查映射是否包含特定键 | `MAP_CONTAINS_KEY({'a':1}, 'a')` |
| [MAP_INSERT](map/map-insert) | 向映射中插入键值对 | `MAP_INSERT({'a':1}, 'b', 2)` |
| [MAP_DELETE](map/map-delete) | 从映射中移除键值对 | `MAP_DELETE({'a':1, 'b':2}, 'b')` |
-| [MAP_TRANSFORM_KEYS](map/map-transform-keys) | 对映射的每个键应用函数 | `MAP_TRANSFORM_KEYS(map, k -> UPPER(k))` |
-| [MAP_TRANSFORM_VALUES](map/map-transform-values) | 对映射的每个值应用函数 | `MAP_TRANSFORM_VALUES(map, v -> v * 2)` |
+| [MAP_TRANSFORM_KEYS](map/map-transform-keys) | 对映射中的每个键应用函数 | `MAP_TRANSFORM_KEYS(map, k -> UPPER(k))` |
+| [MAP_TRANSFORM_VALUES](map/map-transform-values) | 对映射中的每个值应用函数 | `MAP_TRANSFORM_VALUES(map, v -> v * 2)` |
| [MAP_FILTER](map/map-filter) | 根据谓词筛选键值对 | `MAP_FILTER(map, (k, v) -> v > 10)` |
-| [MAP_PICK](map/map-pick) | 创建仅含指定键的新映射 | `MAP_PICK({'a':1, 'b':2, 'c':3}, 'a', 'c')` |
+| [MAP_PICK](map/map-pick) | 使用指定键创建新映射 | `MAP_PICK({'a':1, 'b':2, 'c':3}, 'a', 'c')` |
## 类型转换函数
@@ -106,10 +124,10 @@ Databend 中的结构化与半结构化函数能够高效处理数组(Array)
| 函数 | 描述 | 示例 |
|----------|-------------|--------|
-| [IS_ARRAY](type-predicate/is-array) | 检查 JSON 值是否为数组 | `IS_ARRAY(PARSE_JSON('[1,2,3]'))` |
-| [IS_OBJECT](type-predicate/is-object) | 检查 JSON 值是否为对象 | `IS_OBJECT(PARSE_JSON('{"a":1}'))` |
-| [IS_STRING](type-predicate/is-string) | 检查 JSON 值是否为字符串 | `IS_STRING(PARSE_JSON('"hello"'))` |
+| [IS_ARRAY](type-predicate/is-array) | 检查 JSON 值是否为 ARRAY | `IS_ARRAY(PARSE_JSON('[1,2,3]'))` |
+| [IS_OBJECT](type-predicate/is-object) | 检查 JSON 值是否为 OBJECT | `IS_OBJECT(PARSE_JSON('{"a":1}'))` |
+| [IS_STRING](type-predicate/is-string) | 检查 JSON 值是否为 STRING | `IS_STRING(PARSE_JSON('"hello"'))` |
| [IS_INTEGER](type-predicate/is-integer) | 检查 JSON 值是否为整数 | `IS_INTEGER(PARSE_JSON('42'))` |
| [IS_FLOAT](type-predicate/is-float) | 检查 JSON 值是否为浮点数 | `IS_FLOAT(PARSE_JSON('3.14'))` |
-| [IS_BOOLEAN](type-predicate/is-boolean) | 检查 JSON 值是否为布尔值 | `IS_BOOLEAN(PARSE_JSON('true'))` |
+| [IS_BOOLEAN](type-predicate/is-boolean) | 检查 JSON 值是否为 BOOLEAN | `IS_BOOLEAN(PARSE_JSON('true'))` |
| [IS_NULL_VALUE](type-predicate/is-null-value) | 检查 JSON 值是否为 null | `IS_NULL_VALUE(PARSE_JSON('null'))` |
\ No newline at end of file