From 301145a75f4f2e627a8b6cbcc7db47fbb7fe172c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 14 Jul 2025 10:22:01 +0000 Subject: [PATCH 1/6] [INIT] Start translation to Simplified-Chinese --- .translation-init | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.translation-init b/.translation-init index 3df64715af..cc765780c7 100644 --- a/.translation-init +++ b/.translation-init @@ -1 +1 @@ -Translation initialization: 2025-07-08T14:01:52.224016 +Translation initialization: 2025-07-14T10:22:01.186014 From 6fec0a7689bf4e23632be51d8e415c2cc6940b0c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 14 Jul 2025 10:24:26 +0000 Subject: [PATCH 2/6] =?UTF-8?q?=F0=9F=8C=90=20Translate=2001-privileges.md?= =?UTF-8?q?=20to=20Simplified-Chinese?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../access-control/01-privileges.md | 240 +++++++++--------- 1 file changed, 119 insertions(+), 121 deletions(-) diff --git a/docs/cn/guides/56-security/access-control/01-privileges.md b/docs/cn/guides/56-security/access-control/01-privileges.md index 0582de5fd8..07caa01d41 100644 --- a/docs/cn/guides/56-security/access-control/01-privileges.md +++ b/docs/cn/guides/56-security/access-control/01-privileges.md @@ -2,15 +2,15 @@ title: 权限 --- -权限是执行操作的许可。用户必须具有特定的权限才能在 Databend 中执行特定的操作。例如,当查询表时,用户需要对该表具有 `SELECT` 权限。类似地,要在 Stage 中读取数据集,用户必须拥有 `READ` 权限。 +权限(Privilege)是执行特定操作的许可。用户必须拥有相应权限才能在 Databend 中执行特定操作。例如,查询表时需要对该表拥有 `SELECT` 权限;读取 Stage 内数据集时需具备 `READ` 权限。 -在 Databend 中,用户可以通过两种方式获得权限。一种方法是直接将权限授予用户。另一种方法是先将权限授予角色,然后将该角色分配给用户。 +在 Databend 中,用户可通过两种方式获取权限:直接授予用户,或先授予角色再将角色分配给用户。 ![Alt text](/img/guides/access-control-2.png) -## 管理权限 +## 权限管理 -要管理用户或角色的权限,请使用以下命令: +使用以下命令管理用户或角色的权限: - [GRANT](/sql/sql-commands/ddl/user/grant) - [REVOKE](/sql/sql-commands/ddl/user/revoke) @@ -18,16 +18,16 @@ title: 权限 ### 授予用户/角色权限 -要授予权限,您有两种选择:您可以直接将权限授予用户,也可以先将权限授予角色,然后将该角色授予用户。在以下示例中,权限直接授予给用户 'david'。'david' 被创建为一个新用户,密码为 'abc123',然后 'default' schema 中所有对象的权限都直接授予给 'david'。最后,显示 'david' 的已授予权限。 +权限可直接授予用户,或先授予角色再分配给用户。下例直接将权限授予用户 'david': -```sql title='Example-1:' --- 创建一个名为 'david' 的新用户,密码为 'abc123' +```sql title='示例-1:' +-- 创建用户 'david',密码 'abc123' CREATE USER david IDENTIFIED BY 'abc123'; --- 将 'default' schema 中所有对象的全部权限授予用户 'david' +-- 授予 'default' 模式所有对象权限 GRANT ALL ON default.* TO david; --- 显示用户 'david' 的已授予权限 +-- 查看用户权限 SHOW GRANTS FOR david; ┌───────────────────────────────────────────────────┐ @@ -37,22 +37,22 @@ SHOW GRANTS FOR david; └───────────────────────────────────────────────────┘ ``` -在以下示例中,权限首先授予给角色,然后将该角色授予给用户 'eric'。最初,创建一个名为 'writer' 的新角色,并授予其 'default' schema 中所有对象的全部权限。随后,'eric' 被创建为一个新用户,密码为 'abc123',并将 'writer' 角色授予给 'eric'。最后,显示 'eric' 的已授予权限。 +下例先将权限授予角色 'writer',再将角色授予用户 'eric': -```sql title='Example-2:' --- 创建一个名为 'writer' 的新角色 +```sql title='示例-2:' +-- 创建角色 'writer' CREATE ROLE writer; --- 将 'default' schema 中所有对象的全部权限授予角色 'writer' +-- 授予角色 'default' 模式所有对象权限 GRANT ALL ON default.* TO ROLE writer; --- 创建一个名为 'eric' 的新用户,密码为 'abc123' +-- 创建用户 'eric',密码 'abc123' CREATE USER eric IDENTIFIED BY 'abc123'; --- 将 'writer' 角色授予给用户 'eric' +-- 将角色授予用户 GRANT ROLE writer TO eric; --- 显示用户 'eric' 的已授予权限 +-- 查看用户权限 SHOW GRANTS FOR eric; ┌──────────────────────────────────────────────────┐ @@ -62,36 +62,34 @@ SHOW GRANTS FOR eric; └──────────────────────────────────────────────────┘ ``` -### 撤销用户/角色的权限 +### 撤销用户/角色权限 -在访问控制的上下文中,可以从单个用户或角色撤销权限。在以下示例中,我们从用户 'david' 撤销 'default' schema 中所有对象的全部权限,然后显示用户 'david' 的已授予权限: +下例撤销用户 'david' 在 'default' 模式的所有权限: -```sql title='Example-1(Continued):' --- 从用户 'david' 撤销 'default' schema 中所有对象的全部权限 +```sql title='示例-1(续):' +-- 撤销用户权限 REVOKE ALL ON default.* FROM david; --- 显示用户 'david' 的已授予权限 +-- 查看用户权限 SHOW GRANTS FOR david; ``` -在以下示例中,从角色 'writer' 撤销 'default' schema 中所有对象的权限。在此之后,显示用户 'eric' 的已授予权限。 +下例撤销角色 'writer' 在 'default' 模式的所有权限: -```sql title='Example-2(Continued):' --- 从角色 'writer' 撤销 'default' schema 中所有对象的全部权限 +```sql title='示例-2(续):' +-- 撤销角色权限 REVOKE ALL ON default.* FROM ROLE writer; --- 显示用户 'eric' 的已授予权限 --- 由于权限已从角色中撤销,因此不显示任何权限 +-- 查看用户权限(权限已撤销) SHOW GRANTS FOR eric; ``` ## 访问控制权限 -Databend 提供了一系列权限,允许您对数据库对象进行细粒度的控制。Databend 权限可以分为以下类型: +Databend 提供细粒度权限控制,分为以下类型: -- 全局权限:这组权限包括应用于整个数据库管理系统的权限,而不是系统中的特定对象。全局权限授予影响数据库整体功能和管理的动作,例如创建或删除数据库、管理用户和角色以及修改系统级设置。有关包含哪些权限,请参见 [全局权限](#global-privileges)。 - -- 对象特定权限:对象特定权限带有不同的集合,每个集合都应用于特定的数据库对象。这包括: +- [全局权限](#全局权限) +- 对象权限: - [表权限](#table-privileges) - [视图权限](#view-privileges) - [数据库权限](#database-privileges) @@ -103,124 +101,124 @@ Databend 提供了一系列权限,允许您对数据库对象进行细粒度 ### 所有权限 - -| 权限 | 对象类型 | 描述 | -|:-----------------|:------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------| -| ALL | 全部 | 授予指定对象类型的所有权限。 | -| ALTER | 全局, 数据库, 表, 视图 | 更改数据库、表、用户或 UDF。 | -| CREATE | 全局, 表 | 创建表或 UDF。 | -| CREATE DATABASE | 全局 | 创建数据库、表或 UDF。 | -| CREATE WAREHOUSE | 全局 | 创建计算集群。 | -| DELETE | 表 | 删除或截断表中的行。 | -| DROP | 全局, 数据库, 表, 视图 | 删除数据库、表、视图或 UDF。恢复删除表。 | -| INSERT | 表 | 将行插入到表中。 | -| SELECT | 数据库, 表 | 从表中选择行。显示或使用数据库。 | -| UPDATE | 表 | 更新表中的行。 | -| GRANT | 全局 | 授予/撤销用户或角色的权限。 | -| SUPER | 全局, 表 | 终止查询。设置全局配置。优化表。分析表。操作 Stage(列出 Stage。创建、删除 Stage)、catalog 或 share。 | -| USAGE | 全局 | “无权限”的同义词。 | -| CREATE ROLE | 全局 | 创建角色。 | -| DROP ROLE | 全局 | 删除角色。 | -| CREATE USER | 全局 | 创建 SQL 用户。 | -| DROP USER | 全局 | 删除 SQL 用户。 | -| WRITE | Stage | 写入 Stage。 | -| READ | Stage | 读取 Stage。 | -| USAGE | UDF | 使用 UDF。 | +| 权限 | 对象类型 | 描述 | +|:-----------------|:--------------------------|:--------------------------------------------------------------------| +| ALL | 所有 | 授予指定对象类型的所有权限 | +| ALTER | 全局/数据库/表/视图 | 修改数据库/表/用户/UDF | +| CREATE | 全局/表 | 创建表/UDF | +| CREATE DATABASE | 全局 | 创建数据库/UDF | +| CREATE WAREHOUSE | 全局 | 创建计算集群 (Warehouse) | +| DELETE | 表 | 删除/清空表数据 | +| DROP | 全局/数据库/表/视图 | 删除数据库/表/视图/UDF;恢复表 | +| INSERT | 表 | 插入数据 | +| SELECT | 数据库/表 | 查询数据;查看/使用数据库 | +| UPDATE | 表 | 更新数据 | +| GRANT | 全局 | 授予/撤销权限 | +| SUPER | 全局/表 | 终止查询;配置全局参数;优化/分析表;管理 Stage/Catalog/Share | +| USAGE | 全局 | "无权限"同义词 | +| CREATE ROLE | 全局 | 创建角色 | +| DROP ROLE | 全局 | 删除角色 | +| CREATE USER | 全局 | 创建用户 | +| DROP USER | 全局 | 删除用户 | +| WRITE | Stage | 写入 Stage | +| READ | Stage | 读取 Stage | +| USAGE | UDF | 使用 UDF | ### 全局权限 -| 权限 | 描述 | -|:-----------------|:------------------------------------------------------------------------------------------------------------------| -| ALL | 授予指定对象类型的所有权限。 | -| ALTER | 添加或删除表列。更改聚簇键。重新聚簇表。 | -| CREATEROLE | 创建角色。 | -| CREAT DATABASE | 创建 DATABASE。 | -| CREATE WAREHOUSE | 创建 WAREHOUSE。 | -| DROPUSER | 删除用户。 | -| CREATEUSER | 创建用户。 | -| DROPROLE | 删除角色。 | -| SUPER | 终止查询。设置或取消设置。操作 Stage、Catalog 或 Share。调用函数。COPY INTO Stage。 | -| USAGE | 仅连接到 Databend 查询。 | -| CREATE | 创建 UDF。 | -| DROP | 删除 UDF。 | -| ALTER | 更改 UDF。更改 SQL 用户。 | +| 权限 | 描述 | +|:-----------------|:--------------------------------------------------------------------| +| ALL | 授予所有权限 | +| ALTER | 增删表列;修改聚簇键 (Cluster Key);重聚簇表 | +| CREATEROLE | 创建角色 | +| CREATE DATABASE | 创建数据库 | +| CREATE WAREHOUSE | 创建计算集群 (Warehouse) | +| DROPUSER | 删除用户 | +| CREATEUSER | 创建用户 | +| DROPROLE | 删除角色 | +| SUPER | 终止查询;修改配置;管理 Stage/Catalog/Share;调用函数;COPY INTO | +| USAGE | 仅连接 Databend 查询 | +| CREATE | 创建 UDF | +| DROP | 删除 UDF | +| ALTER | 修改 UDF/SQL 用户 | ### 表权限 -| 权限 | 描述 | -|:----------|:-----------------------------------------------------------------------------------------------------------------| -| ALL | 授予指定对象类型的所有权限。 | -| ALTER | 添加或删除表列。更改聚簇键。重新聚簇表。 | -| CREATE | 创建表。 | -| DELETE | 删除表中的行。截断表。 | -| DROP | 删除或取消删除表。恢复已删除表的最新版本。 | -| INSERT | 将行插入到表中。COPY INTO 表。 | -| SELECT | 从表中选择行。SHOW CREATE 表。DESCRIBE 表。 | -| UPDATE | 更新表中的行。 | -| SUPER | 优化或分析表。 | -| OWNERSHIP | 授予对数据库的完全控制权。一次只能有一个角色拥有对特定对象的此权限。 | +| 权限 | 描述 | +|:-----------|:--------------------------------------------------------------------| +| ALL | 授予所有权限 | +| ALTER | 增删表列;修改聚簇键;重聚簇表 | +| CREATE | 创建表 | +| DELETE | 删除/清空表数据 | +| DROP | 删除/恢复表 | +| INSERT | 插入数据;COPY INTO 表 | +| SELECT | 查询数据;SHOW CREATE/DESCRIBE 表 | +| UPDATE | 更新数据 | +| SUPER | 优化/分析表 | +| OWNERSHIP | 完全控制数据库(单角色独占) | ### 视图权限 -| 权限 | 描述 | -|:----------|:-----------------------------------------------------------------------| -| ALL | 授予指定对象类型的所有权限 | -| ALTER | 创建或删除视图。使用另一个 QUERY 更改现有视图。 | -| DROP | 删除视图。 | +| 权限 | 描述 | +|:------|:----------------------------------------| +| ALL | 授予所有权限 | +| ALTER | 创建/删除视图;修改视图查询语句 | +| DROP | 删除视图 | ### 数据库权限 -请注意,一旦您拥有以下任何数据库权限或数据库中任何表的权限,您就可以使用 [USE DATABASE](/sql/sql-commands/ddl/database/ddl-use-database) 命令来指定数据库。 - -| 权限 | 描述 | -|:----------|:-----------------------------------------------------------------------------------------------------------------| -| ALTER | 重命名数据库。 | -| DROP | 删除或取消删除数据库。恢复已删除数据库的最新版本。 | -| SELECT | SHOW CREATE 数据库。 | -| OWNERSHIP | 授予对数据库的完全控制权。一次只能有一个角色拥有对特定对象的此权限。 | -| USAGE | 允许使用 `USE ` 进入数据库,而无需授予对任何包含对象的访问权限。 | +| 权限 | 描述 | +|:-----------|:--------------------------------------------------------------------| +| ALTER | 重命名数据库 | +| DROP | 删除/恢复数据库 | +| SELECT | SHOW CREATE 数据库 | +| OWNERSHIP | 完全控制数据库(单角色独占) | +| USAGE | 允许 USE (不授权对象访问) | > 注意: -> -> 1. 如果一个角色拥有一个数据库,该角色可以访问数据库中的所有表。 - +> 1. 角色拥有数据库即有权访问其所有表 ### 会话策略权限 -| 权限 | 描述 | -| :-- | :-- | -| SUPER | 终止查询。设置或取消设置。 | -| ALL | 授予指定对象类型的所有权限。 | +| 权限 | 描述 | +|:-------|:-------------------| +| SUPER | 终止查询;修改配置 | +| ALL | 授予所有权限 | ### Stage 权限 -| 权限 | 描述 | -|:----------|:--------------------------------------------------------------------------------------------------------------| -| WRITE | 写入到 Stage。例如,copy into a stage,presign upload 或删除一个 Stage | -| READ | 读取 Stage。例如,list stage,query stage,copy into table from stage,presign download | -| ALL | 授予指定对象类型的 READ、WRITE 权限。 | -| OWNERSHIP | 授予对 Stage 的完全控制权。一次只能有一个角色拥有对特定对象的此权限。 | +| 权限 | 描述 | +|:-----------|:--------------------------------------------------------------------| +| WRITE | 写入 Stage(COPY INTO/预签名上传/删除) | +| READ | 读取 Stage(列出/查询/COPY FROM/预签名下载) | +| ALL | 授予 READ/WRITE 权限 | +| OWNERSHIP | 完全控制 Stage(单角色独占) | > 注意: -> -> 1. 不要检查外部位置的身份验证。 +> 1. 不验证外部存储位置权限 ### UDF 权限 -| 权限 | 描述 | -|:----------|:------------------------------------------------------------------------------------------------------------| -| USAGE | 可以使用 UDF。例如,copy into a stage,presign upload | -| ALL | 授予指定对象类型的 READ、WRITE 权限。 | -| OWNERSHIP | 授予对 UDF 的完全控制权。一次只能有一个角色拥有对特定对象的此权限。 | +| 权限 | 描述 | +|:-----------|:--------------------------------------------------------------------| +| USAGE | 使用 UDF | +| ALL | 授予所有权限 | +| OWNERSHIP | 完全控制 UDF(单角色独占) | > 注意: -> -> 1. 如果 UDF 已经被持续折叠,则不检查 UDF 身份验证。 -> 2. 如果 UDF 是插入中的一个值,则不检查 UDF 身份验证。 +> 1. 常量折叠 UDF 不验证权限 +> 2. INSERT 语句值内 UDF 不验证权限 ### Catalog 权限 -| 权限 | 描述 | -|:----------|:-------------------------------------------------------------| -| SUPER | SHOW CREATE catalog. 创建或删除 catalog。 | -| ALL | 授予指定对象类型的所有权限。 | \ No newline at end of file +| 权限 | 描述 | +|:-------|:-----------------------------| +| SUPER | SHOW CREATE/创建/删除 Catalog | +| ALL | 授予所有权限 | + +### 共享权限 + +| 权限 | 描述 | +|:-------|:-------------| +| SUPER | 管理共享 | +| ALL | 授予所有权限 | \ No newline at end of file From 88b57940a178aa601e944857c3286db8600e3afb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 14 Jul 2025 10:25:08 +0000 Subject: [PATCH 3/6] =?UTF-8?q?=F0=9F=8C=90=20Translate=2001-privileges.md?= =?UTF-8?q?=20to=20Simplified-Chinese?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../00-ddl/00-database/ddl-create-database.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/cn/sql-reference/10-sql-commands/00-ddl/00-database/ddl-create-database.md b/docs/cn/sql-reference/10-sql-commands/00-ddl/00-database/ddl-create-database.md index 910869b2b8..0e8ef05db6 100644 --- a/docs/cn/sql-reference/10-sql-commands/00-ddl/00-database/ddl-create-database.md +++ b/docs/cn/sql-reference/10-sql-commands/00-ddl/00-database/ddl-create-database.md @@ -5,9 +5,9 @@ sidebar_position: 1 import FunctionDescription from '@site/src/components/FunctionDescription'; - + -创建一个数据库。 +创建数据库。 ## 语法 @@ -15,6 +15,14 @@ import FunctionDescription from '@site/src/components/FunctionDescription'; CREATE [ OR REPLACE ] DATABASE [ IF NOT EXISTS ] ``` +## 访问控制要求 + +| 权限 | 对象类型 | 描述 | +|:----------------|:----------|:-------------| +| CREATE DATABASE | 全局 | 创建数据库。 | + +要创建数据库,执行操作的用户或[当前角色(current_role)](/guides/security/access-control/roles)必须拥有 CREATE DATABASE [权限(privilege)](/guides/security/access-control/privileges)。 + ## 示例 以下示例创建一个名为 `test` 的数据库: From 55a7ba36a2f56f747c7379aff67f3396751961d2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 14 Jul 2025 10:28:00 +0000 Subject: [PATCH 4/6] =?UTF-8?q?=F0=9F=8C=90=20Translate=2001-privileges.md?= =?UTF-8?q?=20to=20Simplified-Chinese?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../00-ddl/01-table/10-ddl-create-table.md | 308 ++++++------------ 1 file changed, 97 insertions(+), 211 deletions(-) diff --git a/docs/cn/sql-reference/10-sql-commands/00-ddl/01-table/10-ddl-create-table.md b/docs/cn/sql-reference/10-sql-commands/00-ddl/01-table/10-ddl-create-table.md index 77acb0bb90..088db6e05f 100644 --- a/docs/cn/sql-reference/10-sql-commands/00-ddl/01-table/10-ddl-create-table.md +++ b/docs/cn/sql-reference/10-sql-commands/00-ddl/01-table/10-ddl-create-table.md @@ -5,23 +5,23 @@ sidebar_position: 1 import FunctionDescription from '@site/src/components/FunctionDescription'; - + import EEFeature from '@site/src/components/EEFeature'; - + 创建表是许多数据库中最复杂的操作之一,因为您可能需要: -- 手动指定引擎 -- 手动指定索引 -- 甚至指定数据分区或数据分片 +- 手动指定存储引擎(Engine) +- 手动指定索引(Index) +- 甚至需要指定数据分区(Partition)或数据分片(Shard) -Databend 旨在设计上易于使用,并且在创建表时不需要任何这些操作。此外,CREATE TABLE 语句提供了以下选项,使您可以更轻松地在各种场景中创建表: +Databend 的设计目标是易于使用,在创建表时**不需要**执行上述任何操作。此外,CREATE TABLE 语句提供以下选项,使您在各种场景下都能轻松创建表: -- [CREATE TABLE](#create-table):从头开始创建表。 -- [CREATE TABLE ... LIKE](#create-table--like):创建一个与现有表具有相同列定义的表。 -- [CREATE TABLE ... AS](#create-table--as):创建一个表,并使用 SELECT 查询的结果插入数据。 +- [CREATE TABLE](#create-table):从头创建新表 +- [CREATE TABLE ... LIKE](#create-table--like):基于现有表的列定义创建新表 +- [CREATE TABLE ... AS](#create-table--as):通过 SELECT 查询结果创建表并插入数据 另请参阅: @@ -45,121 +45,93 @@ CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ] [ . ] :::note -- 有关 Databend 中可用的数据类型,请参阅 [Data Types](../../../00-sql-reference/10-data-types/index.md)。 - -- Databend 建议在命名列时尽可能避免特殊字符。但是,如果在某些情况下必须使用特殊字符,则别名应包含在反引号中,例如:CREATE TABLE price(\`$CA\` int); - -- Databend 会自动将列名转换为小写。例如,如果您将列命名为 _Total_,它将在结果中显示为 _total_。 - ::: +- Databend 支持的数据类型请参阅[数据类型(Data Types)](../../../00-sql-reference/10-data-types/index.md) +- 建议尽量避免在列名中使用特殊字符。如必须使用,需用反引号包裹别名:`CREATE TABLE price(\`$CA\` int)` +- Databend 会自动将列名转为小写(如 _Total_ 会显示为 _total_) +::: ## CREATE TABLE ... LIKE -创建一个与现有表具有相同列定义的表。现有表的列名、数据类型及其非空约束将复制到新表。 +创建与现有表列定义相同的新表,复制列名、数据类型及非空约束(NOT NULL Constraints)。 语法: - ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name LIKE [db.]origin_table_name ``` -此命令不包括原始表中的任何数据或属性(例如 `CLUSTER BY`、`TRANSIENT` 和 `COMPRESSION`),而是使用默认系统设置创建一个新表。 - -:::note WORKAROUND - -- 使用此命令创建新表时,可以显式指定 `TRANSIENT` 和 `COMPRESSION`。例如, +此命令**不复制**原始表的数据或属性(如 `CLUSTER BY`、`TRANSIENT`、`COMPRESSION`),新表使用系统默认设置。 +:::note 变通方案 +创建时可显式指定 `TRANSIENT` 和 `COMPRESSION`: ```sql create transient table t_new like t_old; - create table t_new compression='lz4' like t_old; ``` - ::: ## CREATE TABLE ... AS -创建一个表,并使用 SELECT 命令计算的数据填充它。 +通过 SELECT 查询结果创建表并填充数据。 语法: - ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name AS SELECT query ``` -此命令不包括任何属性(例如 CLUSTER BY、TRANSIENT 和 COMPRESSION)从原始表,而是使用默认系统设置创建一个新表。 - -:::note WORKAROUND - -- 使用此命令创建新表时,可以显式指定 `TRANSIENT` 和 `COMPRESSION`。例如, +此命令**不复制**原始表属性(如 `CLUSTER BY`、`TRANSIENT`、`COMPRESSION`),新表使用系统默认设置。 +:::note 变通方案 +创建时可显式指定 `TRANSIENT` 和 `COMPRESSION`: ```sql create transient table t_new as select * from t_old; - create table t_new compression='lz4' as select * from t_old; ``` - ::: -## Column Nullable - -默认情况下,Databend 中**所有列都是可空的(NULL)**。如果您需要一个不允许 NULL 值的列,请使用 NOT NULL 约束。有关更多信息,请参阅 [NULL Values and NOT NULL Constraint](../../../00-sql-reference/10-data-types/index.md)。 +## 列可空性(Column Nullability) -## Column Default Values +Databend 中所有列默认**可为空(NULL)**。如需禁止 NULL 值,请使用 `NOT NULL` 约束。详见 [NULL 值与 NOT NULL 约束](../../../00-sql-reference/10-data-types/index.md)。 -`DEFAULT ` 在未提供显式表达式时,为列设置默认值。默认表达式可以是: +## 列默认值(Column Default Values) -- 一个固定的常量,例如下面示例中 `department` 列的 `Marketing`。 -- 一个没有输入参数并返回标量值的表达式,例如 `1 + 1`、`NOW()` 或 `UUID()`。 -- 来自序列的动态生成的值,例如下面示例中 `staff_id` 列的 `NEXTVAL(staff_id_seq)`。 - - NEXTVAL 必须用作独立的默认值;不支持 `NEXTVAL(seq1) + 1` 之类的表达式。 +`DEFAULT ` 设置当未提供显式值时的列默认值,支持: +- 固定常量(如 `'Marketing'`) +- 无参数标量表达式(如 `NOW()`、`UUID()`) +- 序列动态生成值(如 `NEXTVAL(staff_id_seq)`) ```sql CREATE SEQUENCE staff_id_seq; - CREATE TABLE staff ( - staff_id INT DEFAULT NEXTVAL(staff_id_seq), -- 如果未提供值,则从序列 'staff_id_seq' 分配下一个数字 + staff_id INT DEFAULT NEXTVAL(staff_id_seq), -- 从序列生成 name VARCHAR(50), - department VARCHAR(50) DEFAULT 'Marketing' -- 如果未提供值,则默认为 'Marketing' + department VARCHAR(50) DEFAULT 'Marketing' -- 固定默认值 ); - --- 当 COPY INTO 中未包含 staff_id 时,会自动生成 -COPY INTO staff(name, department) FROM @stage ... - --- staff_id 从暂存文件中加载 -COPY INTO staff FROM @stage ... -COPY INTO staff(staff_id, name, department) FROM @stage ... ``` -## Computed Columns - -Computed Columns 是指使用标量表达式从表中的其他列生成的列。当计算中使用的任何列中的数据更新时,Computed Columns 将自动重新计算其值以反映更新。 +## 计算列(Computed Columns) -Databend 支持两种类型的 Computed Columns:存储列和虚拟列。存储的 Computed Columns 物理存储在数据库中并占用存储空间,而虚拟 Computed Columns 不物理存储,其值在访问时动态计算。 - -Databend 支持两种用于创建 Computed Columns 的语法选项:一种使用 `AS ()`,另一种使用 `GENERATED ALWAYS AS ()`。两种语法都允许指定 Computed Columns 是存储的还是虚拟的。 +通过标量表达式从其他列生成的列,当依赖列更新时自动重新计算。支持两种类型: +- **存储列(STORED)**:物理存储计算结果 +- **虚拟列(VIRTUAL)**:查询时动态计算 +语法: ```sql -CREATE TABLE [IF NOT EXISTS] [db.]table_name -( - [ NOT NULL | NULL] AS () STORED | VIRTUAL, - [ NOT NULL | NULL] AS () STORED | VIRTUAL, - ... +-- 简写语法 +CREATE TABLE ... ( + AS () STORED|VIRTUAL ) -CREATE TABLE [IF NOT EXISTS] [db.]table_name -( - [NOT NULL | NULL] GENERATED ALWAYS AS () STORED | VIRTUAL, - [NOT NULL | NULL] GENERATED ALWAYS AS () STORED | VIRTUAL, - ... +-- 完整语法 +CREATE TABLE ... ( + GENERATED ALWAYS AS () STORED|VIRTUAL ) ``` -以下是创建存储的 Computed Columns 的示例:每当更新 "price" 或 "quantity" 列的值时,"total_price" 列将自动重新计算并更新其存储的值。 - +**存储列示例**:`total_price` 随 `price`/`quantity` 更新 ```sql -CREATE TABLE IF NOT EXISTS products ( +CREATE TABLE products ( id INT, price FLOAT64, quantity INT, @@ -167,10 +139,9 @@ CREATE TABLE IF NOT EXISTS products ( ); ``` -以下是创建虚拟 Computed Columns 的示例:"full_name" 列根据 "first_name" 和 "last_name" 列的当前值动态计算。它不占用额外的存储空间。每当访问 "first_name" 或 "last_name" 值时,将计算并返回 "full_name" 列。 - +**虚拟列示例**:`full_name` 动态拼接 `first_name`/`last_name` ```sql -CREATE TABLE IF NOT EXISTS employees ( +CREATE TABLE employees ( id INT, first_name VARCHAR, last_name VARCHAR, @@ -178,26 +149,31 @@ CREATE TABLE IF NOT EXISTS employees ( ); ``` -:::tip STORED or VIRTUAL? -在存储的 Computed Columns 和虚拟 Computed Columns 之间进行选择时,请考虑以下因素: - -- 存储空间:存储的 Computed Columns 占用表中额外的存储空间,因为它们的计算值是物理存储的。如果您的数据库空间有限或想要最大限度地减少存储使用量,那么虚拟 Computed Columns 可能是更好的选择。 - -- 实时更新:当依赖列更新时,存储的 Computed Columns 会立即更新其计算值。这确保了在查询时始终具有最新的计算值。另一方面,虚拟 Computed Columns 在查询期间动态计算其值,这可能会稍微增加处理时间。 +:::tip 选择存储(STORED)还是虚拟(VIRTUAL)? +| 考量因素 | 存储列(STORED) | 虚拟列(VIRTUAL) | +|----------------|--------------------------------|--------------------------------| +| 存储空间 | 占用物理存储 | 不占用存储空间 | +| 实时性 | 写入时立即更新 | 查询时动态计算 | +| 数据一致性 | 始终保持最新 | 可能存在瞬时不一致 | +| 查询性能 | 读取速度快 | 计算增加查询开销 | +::: -- 数据完整性和一致性:存储的 Computed Columns 维护即时数据一致性,因为它们的计算值在写入操作时会更新。但是,虚拟 Computed Columns 在查询期间动态计算其值,这意味着写入操作和后续查询之间可能存在瞬间的不一致。 - ::: +## MySQL 兼容性 -## MySQL Compatibility +Databend 与 MySQL 的主要差异在于数据类型和特定索引提示(Index Hints)。 -Databend 的语法与 MySQL 的主要区别在于数据类型和一些特定的索引提示。 +## 访问控制要求 -## Examples +| 权限 | 对象类型 | 描述 | +|--------|--------------|--------------| +| CREATE | 全局, 表 | 创建表权限 | -### Create Table +用户或 [current_role](https://docs.databend.cn/guides/security/access-control/roles) 需具备 CREATE [权限](https://docs.databend.cn/guides/security/access-control/privileges#table-privileges)。 -创建一个表,其中一列具有默认值(在本例中,`genre` 列的默认值为 'General'): +## 示例 +### 基础建表 +创建带默认值的表: ```sql CREATE TABLE books ( id BIGINT UNSIGNED, @@ -205,64 +181,13 @@ CREATE TABLE books ( genre VARCHAR DEFAULT 'General' ); ``` - -描述该表以确认结构和 `genre` 列的默认值: - -```sql -DESC books; -+-------+-----------------+------+---------+-------+ -| Field | Type | Null | Default | Extra | -+-------+-----------------+------+---------+-------+ -| id | BIGINT UNSIGNED | YES | 0 | | -| title | VARCHAR | YES | "" | | -| genre | VARCHAR | YES | 'General'| | -+-------+-----------------+------+---------+-------+ -``` - -插入一行,但不指定 `genre`: - +插入验证默认值: ```sql INSERT INTO books(id, title) VALUES(1, 'Invisible Stars'); -``` - -查询该表,并注意 `genre` 列已设置为默认值 'General': - -```sql SELECT * FROM books; -+----+----------------+---------+ -| id | title | genre | -+----+----------------+---------+ -| 1 | Invisible Stars| General | -+----+----------------+---------+ -``` - -### Create Table ... Like - -创建一个新表 (`books_copy`),其结构与现有表 (`books`) 相同: - -```sql -CREATE TABLE books_copy LIKE books; ``` - -检查新表的结构: - -```sql -DESC books_copy; -+-------+-----------------+------+---------+-------+ -| Field | Type | Null | Default | Extra | -+-------+-----------------+------+---------+-------+ -| id | BIGINT UNSIGNED | YES | 0 | | -| title | VARCHAR | YES | "" | | -| genre | VARCHAR | YES | 'General'| | -+-------+-----------------+------+---------+-------+ +结果: ``` - -将一行插入到新表中,并注意 `genre` 列的默认值已被复制: - -```sql -INSERT INTO books_copy(id, title) VALUES(1, 'Invisible Stars'); - -SELECT * FROM books_copy; +----+----------------+---------+ | id | title | genre | +----+----------------+---------+ @@ -270,97 +195,58 @@ SELECT * FROM books_copy; +----+----------------+---------+ ``` -### Create Table ... As - -创建一个新表 (`books_backup`),其中包含来自现有表 (`books`) 的数据: - +### 结构复制 +基于现有表结构创建: ```sql -CREATE TABLE books_backup AS SELECT * FROM books; -``` - -描述新表,并注意 `genre` 列的默认值未被复制: - -```sql -DESC books_backup; -+-------+-----------------+------+---------+-------+ -| Field | Type | Null | Default | Extra | -+-------+-----------------+------+---------+-------+ -| id | BIGINT UNSIGNED | NO | 0 | | -| title | VARCHAR | NO | "" | | -| genre | VARCHAR | NO | NULL | | -+-------+-----------------+------+---------+-------+ +CREATE TABLE books_copy LIKE books; +DESC books_copy; -- 验证结构复制 ``` -查询新表,并注意原始表中的数据已被复制: - +### 查询建表 +通过 SELECT 结果创建: ```sql -SELECT * FROM books_backup; -+----+----------------+---------+ -| id | title | genre | -+----+----------------+---------+ -| 1 | Invisible Stars| General | -+----+----------------+---------+ +CREATE TABLE books_backup AS SELECT * FROM books; +DESC books_backup; -- 注意默认值未复制 ``` -### Create Table ... Column As STORED | VIRTUAL - -以下示例演示了一个具有存储的 Computed Columns 的表,该列根据对 "price" 或 "quantity" 列的更新自动重新计算: - +### 计算列应用 +**存储列示例**:自动计算总额 ```sql --- 创建具有存储的 Computed Columns 的表 -CREATE TABLE IF NOT EXISTS products ( - id INT, - price FLOAT64, - quantity INT, +CREATE TABLE products ( + id INT, price FLOAT64, quantity INT, total_price FLOAT64 AS (price * quantity) STORED ); - --- 将数据插入到表中 -INSERT INTO products (id, price, quantity) -VALUES (1, 10.5, 3), - (2, 15.2, 5), - (3, 8.7, 2); - --- 查询表以查看 Computed Columns -SELECT id, price, quantity, total_price -FROM products; - ---- +INSERT INTO products VALUES (1,10.5,3), (2,15.2,5); +SELECT * FROM products; +``` +结果: +``` +------+-------+----------+-------------+ | id | price | quantity | total_price | +------+-------+----------+-------------+ | 1 | 10.5 | 3 | 31.5 | | 2 | 15.2 | 5 | 76.0 | -| 3 | 8.7 | 2 | 17.4 | +------+-------+----------+-------------+ ``` -在此示例中,我们创建一个名为 student*profiles 的表,其中包含一个名为 profile 的 Variant 类型列,用于存储 JSON 数据。我们还添加了一个名为 \_age* 的虚拟 Computed Columns,该列从 profile 列中提取 age 属性并将其转换为整数。 - +**虚拟列示例**:动态解析 JSON ```sql --- 创建具有虚拟 Computed Columns 的表 CREATE TABLE student_profiles ( id STRING, profile VARIANT, age INT NULL AS (profile['age']::INT) VIRTUAL ); -``` - -```sql --- Insert data into the table -INSERT INTO student_profiles (id, profile) VALUES - ('d78236', '{"id": "d78236", "name": "Arthur Read", "age": "16", "school": "PVPHS", "credits": 120, "sports": "none"}'), - ('f98112', '{"name": "Buster Bunny", "age": "15", "id": "f98112", "school": "TEO", "credits": 67, "clubs": "MUN"}'), - ('t63512', '{"name": "Ernie Narayan", "school" : "Brooklyn Tech", "id": "t63512", "sports": "Track and Field", "clubs": "Chess"}'); - --- Query the table to see the computed column -SELECT * FROM student_profiles; - -+--------+------------------------------------------------------------------------------------------------------------+------+ -| id | profile | age | -+--------+------------------------------------------------------------------------------------------------------------+------+ -| d78236 | `{"age":"16","credits":120,"id":"d78236","name":"Arthur Read","school":"PVPHS","sports":"none"}` | 16 | -| f98112 | `{"age":"15","clubs":"MUN","credits":67,"id":"f98112","name":"Buster Bunny","school":"TEO"}` | 15 | -| t63512 | `{"clubs":"Chess","id":"t63512","name":"Ernie Narayan","school":"Brooklyn Tech","sports":"Track and Field"}` | NULL | -+--------+------------------------------------------------------------------------------------------------------------+------+ -``` +INSERT INTO student_profiles VALUES + ('d78236', '{"name":"Arthur","age":"16"}'), + ('t63512', '{"name":"Ernie"}'); +SELECT id, age FROM student_profiles; +``` +结果: +``` ++--------+------+ +| id | age | ++--------+------+ +| d78236 | 16 | +| t63512 | NULL | ++--------+------+ +``` \ No newline at end of file From cdbec27307f154414689e7ed69bdf8ae7cab9771 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 14 Jul 2025 10:32:23 +0000 Subject: [PATCH 5/6] =?UTF-8?q?=F0=9F=8C=90=20Translate=2001-privileges.md?= =?UTF-8?q?=20to=20Simplified-Chinese?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../00-ddl/03-stage/01-ddl-create-stage.md | 113 ++++++++++-------- 1 file changed, 61 insertions(+), 52 deletions(-) diff --git a/docs/cn/sql-reference/10-sql-commands/00-ddl/03-stage/01-ddl-create-stage.md b/docs/cn/sql-reference/10-sql-commands/00-ddl/03-stage/01-ddl-create-stage.md index 5e3d08cc44..403ca93ab7 100644 --- a/docs/cn/sql-reference/10-sql-commands/00-ddl/03-stage/01-ddl-create-stage.md +++ b/docs/cn/sql-reference/10-sql-commands/00-ddl/03-stage/01-ddl-create-stage.md @@ -6,12 +6,12 @@ import FunctionDescription from '@site/src/components/FunctionDescription'; -创建内部或外部 Stage。 +创建内部或外部暂存区(Stage)。 ## 语法 ```sql --- 内部 Stage +-- 内部暂存区 CREATE [ OR REPLACE ] STAGE [ IF NOT EXISTS ] [ FILE_FORMAT = ( FORMAT_NAME = '' @@ -20,7 +20,7 @@ CREATE [ OR REPLACE ] STAGE [ IF NOT EXISTS ] [ COPY_OPTIONS = ( copyOptions ) ] [ COMMENT = '' ] --- 外部 Stage +-- 外部暂存区 CREATE STAGE [ IF NOT EXISTS ] externalStageParams [ FILE_FORMAT = ( @@ -38,7 +38,7 @@ import TabItem from '@theme/TabItem'; - + ```sql externalStageParams ::= @@ -48,10 +48,10 @@ externalStageParams ::= ) ``` -有关访问类 Amazon S3 存储服务可用的连接参数,请参见 [连接参数](/00-sql-reference/51-connect-parameters.md)。 +有关访问兼容 Amazon S3 的存储服务时可用的连接参数,请参阅[连接参数](/00-sql-reference/51-connect-parameters.md)。 :::note -要在 Amazon S3 上创建外部 Stage,您还可以使用 IAM 用户帐户,从而可以为 Stage 定义细粒度的访问控制,包括指定对特定 S3 存储桶的读取或写入访问等操作。请参见 [示例 3:使用 AWS IAM 用户创建外部 Stage](#example-3-create-external-stage-with-aws-iam-user)。 +要在 Amazon S3 上创建外部暂存区(External Stage),您还可以使用 IAM 用户帐户,这使您能够为暂存区定义细粒度的访问控制,包括指定对特定 S3 存储桶的读或写等操作。请参阅[示例 3:使用 AWS IAM 用户创建外部暂存区](#example-3-create-external-stage-with-aws-iam-user)。 ::: @@ -65,7 +65,7 @@ externalStageParams ::= ) ``` -有关访问 Azure Blob Storage 可用的连接参数,请参见 [连接参数](/00-sql-reference/51-connect-parameters.md)。 +有关访问 Azure Blob Storage 时可用的连接参数,请参阅[连接参数](/00-sql-reference/51-connect-parameters.md)。 @@ -78,10 +78,10 @@ externalLocation ::= ) ``` -有关访问 Google Cloud Storage 可用的连接参数,请参见 [连接参数](/00-sql-reference/51-connect-parameters.md)。 +有关访问 Google Cloud Storage 时可用的连接参数,请参阅[连接参数](/00-sql-reference/51-connect-parameters.md)。 - + ```sql externalLocation ::= @@ -91,10 +91,10 @@ externalLocation ::= ) ``` -有关访问阿里云 OSS 可用的连接参数,请参见 [连接参数](/00-sql-reference/51-connect-parameters.md)。 +有关访问阿里云 OSS 时可用的连接参数,请参阅[连接参数](/00-sql-reference/51-connect-parameters.md)。 - + ```sql externalLocation ::= @@ -104,13 +104,13 @@ externalLocation ::= ) ``` -有关访问腾讯云对象存储可用的连接参数,请参见 [连接参数](/00-sql-reference/51-connect-parameters.md)。 +有关访问腾讯云对象存储时可用的连接参数,请参阅[连接参数](/00-sql-reference/51-connect-parameters.md)。 ### FILE_FORMAT -有关详细信息,请参见 [输入 & 输出文件格式](../../../00-sql-reference/50-file-format-options.md)。 +详细信息请参阅[输入和输出文件格式](../../../00-sql-reference/50-file-format-options.md)。 ### copyOptions @@ -120,16 +120,25 @@ copyOptions ::= [ PURGE = ] ``` -| 参数 | 描述 | 是否必需 | -|----------------------|---------------------------------------------------------------------------------------------------------------------------------|----------| -| `SIZE_LIMIT = ` | 指定给定 COPY 语句要加载的最大数据行数的数字 (> 0)。默认值为 `0` | 可选 | -| `PURGE = ` | 如果文件已成功加载到表中,则 True 指定该命令将清除 Stage 中的文件。默认值为 `false` | 可选 | +| 参数 | 描述 | 是否必须 | +|:---|:---|:---| +| `SIZE_LIMIT = ` | 指定给定 COPY 语句要加载数据的最大行数(> 0)。默认为 `0` | 可选 | +| `PURGE = ` | 如果文件成功加载到表中,命令将清除暂存区中的文件。默认为 `false` | 可选 | + + +## 访问控制要求 + +| 权限 | 对象类型 | 描述 | +|:---|:---|:---| +| SUPER | 全局, 表 | 操作暂存区(列出、创建、删除暂存区)、目录或共享。 | + +要创建暂存区(Stage),执行操作的用户或 [current_role](/guides/security/access-control/roles) 必须具有 SUPER [权限(Privilege)](/guides/security/access-control/privileges)。 ## 示例 -### 示例 1:创建内部 Stage +### 示例 1:创建内部暂存区 -此示例创建一个名为 *my_internal_stage* 的内部 Stage: +此示例创建一个名为 *my_internal_stage* 的内部暂存区: ```sql CREATE STAGE my_internal_stage; @@ -142,9 +151,9 @@ my_internal_stage|Internal |StageParams { storage: Fs(StorageFsConfig { root: " ``` -### 示例 2:使用 AWS 访问密钥创建外部 Stage +### 示例 2:使用 AWS 访问密钥创建外部暂存区 -此示例在 Amazon S3 上创建一个名为 *my_s3_stage* 的外部 Stage: +此示例在 Amazon S3 上创建一个名为 *my_s3_stage* 的外部暂存区: ```sql CREATE STAGE my_s3_stage URL='s3://load/files/' CONNECTION = (ACCESS_KEY_ID = '' SECRET_ACCESS_KEY = ''); @@ -157,17 +166,17 @@ DESC STAGE my_s3_stage; +-------------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------+---------+ ``` -### 示例 3:使用 AWS IAM 用户创建外部 Stage +### 示例 3:使用 AWS IAM 用户创建外部暂存区 -此示例使用 AWS Identity and Access Management (IAM) 用户在 Amazon S3 上创建一个名为 *iam_external_stage* 的外部 Stage。 +此示例使用 AWS Identity and Access Management (IAM) 用户在 Amazon S3 上创建一个名为 *iam_external_stage* 的外部暂存区。 -#### 步骤 1:为 S3 存储桶创建访问策略 +#### 第 1 步:为 S3 存储桶创建访问策略 -以下过程在 Amazon S3 上为存储桶 *databend-toronto* 创建一个名为 *databend-access* 的访问策略: +以下步骤为 Amazon S3 上的存储桶(Bucket) *databend-toronto* 创建一个名为 *databend-access* 的访问策略: -1. 登录到 AWS 管理控制台,然后选择 **服务** > **安全、身份与合规** > **IAM**。 -2. 在左侧导航窗格中选择 **账户设置**,然后转到右侧页面上的 **Security Token Service (STS)** 部分。确保您的账户所属的 AWS 区域的状态为 **活动**。 -3. 在左侧导航窗格中选择 **策略**,然后在右侧页面上选择 **创建策略**。 +1. 登录 AWS 管理控制台,然后选择 **Services** > **Security, Identity, & Compliance** > **IAM**。 +2. 在左侧导航窗格中选择 **Account settings**,然后转到右侧页面的 **Security Token Service (STS)** 部分。确保您帐户所属的 AWS 区域的状态为 **Active**。 +3. 在左侧导航窗格中选择 **Policies**,然后在右侧页面上选择 **Create policy**。 4. 单击 **JSON** 选项卡,将以下代码复制并粘贴到编辑器中,然后将策略另存为 *databend_access*。 ```json @@ -194,50 +203,50 @@ DESC STAGE my_s3_stage; } ``` -#### 步骤 2:创建 IAM 用户 +#### 第 2 步:创建 IAM 用户 -以下过程创建一个名为 *databend* 的 IAM 用户,并将访问策略 *databend-access* 附加到该用户。 +以下步骤创建一个名为 *databend* 的 IAM 用户,并将访问策略 *databend-access* 附加到该用户。 -1. 在左侧导航窗格中选择 **用户**,然后在右侧页面上选择 **添加用户**。 +1. 在左侧导航窗格中选择 **Users**,然后在右侧页面上选择 **Add users**。 2. 配置用户: - 将用户名设置为 *databend*。 - - 在设置用户权限时,单击 **直接附加策略**,然后搜索并选择访问策略 *databend-access*。 -3. 创建用户后,单击用户名以打开详细信息页面,然后选择 **安全凭证** 选项卡。 -4. 在 **访问密钥** 部分中,单击 **创建访问密钥**。 -5. 为用例选择 **第三方服务**,然后勾选下面的复选框以确认创建访问密钥。 -6. 将生成的访问密钥和秘密访问密钥复制并保存到安全位置。 + - 为用户设置权限时,单击 **Attach policies directly**,然后搜索并选择访问策略 *databend-access*。 +3. 创建用户后,单击用户名打开详细信息页面,然后选择 **Security credentials** 选项卡。 +4. 在 **Access keys** 部分,单击 **Create access key**。 +5. 为用例选择 **Third-party service**,并勾选下方的复选框以确认创建访问密钥。 +6. 复制生成的访问密钥和私有访问密钥并将其保存到安全的地方。 -#### 步骤 3:创建外部 Stage +#### 第 3 步:创建外部暂存区 -使用为 IAM 用户 *databend* 生成的访问密钥和秘密访问密钥来创建外部 Stage。 +使用为 IAM 用户 *databend* 生成的访问密钥和私有访问密钥来创建外部暂存区。 ```sql -CREATE STAGE iam_external_stage url = 's3://databend-toronto' CONNECTION =(aws_key_id='' aws_secret_key='' region='us-east-2'); +CREATE STAGE iam_external_stage url = 's3://databend-toronto' CONNECTION =(ACCESS_KEY_ID='' SECRET_ACCESS_KEY=''); ``` -### 示例 4:在 Cloudflare R2 上创建外部 Stage +### 示例 4:在 Cloudflare R2 上创建外部暂存区 -[Cloudflare R2](https://www.cloudflare.com/en-ca/products/r2/) 是 Cloudflare 推出的一种对象存储服务,与 Amazon 的 AWS S3 服务完全兼容。此示例在 Cloudflare R2 上创建一个名为 *r2_stage* 的外部 Stage。 +[Cloudflare R2](https://www.cloudflare.com/en-ca/products/r2/) 是 Cloudflare 推出的一款对象存储服务,与亚马逊的 AWS S3 服务完全兼容。本示例在 Cloudflare R2 上创建一个名为 *r2_stage* 的外部暂存区。 -#### 步骤 1:创建存储桶 +#### 第 1 步:创建存储桶 -以下过程在 Cloudflare R2 上创建一个名为 *databend* 的存储桶。 +以下步骤在 Cloudflare R2 上创建一个名为 *databend* 的存储桶。 -1. 登录到 Cloudflare 仪表板,然后在左侧导航窗格中选择 **R2**。 -2. 单击 **创建存储桶** 以创建一个存储桶,并将存储桶名称设置为 *databend*。成功创建存储桶后,在查看存储桶详细信息页面时,可以在存储桶名称正下方找到存储桶端点。 +1. 登录 Cloudflare 仪表盘,在左侧导航窗格中选择 **R2**。 +2. 单击 **Create bucket** 创建一个存储桶,并将存储桶名称设置为 *databend*。成功创建存储桶后,您可以在查看存储桶详细信息页面时,在存储桶名称正下方找到存储桶端点。 -#### 步骤 2:创建 R2 API 令牌 +#### 第 2 步:创建 R2 API 令牌 -以下过程创建一个包含访问密钥 ID 和秘密访问密钥的 R2 API 令牌。 +以下步骤创建一个包含访问密钥 ID 和私有访问密钥的 R2 API 令牌。 -1. 单击 **R2** > **概述** 上的 **管理 R2 API 令牌**。 -2. 单击 **创建 API 令牌** 以创建一个 API 令牌。 +1. 在 **R2** > **Overview** 页面上单击 **Manage R2 API Tokens**。 +2. 单击 **Create API token** 创建一个 API 令牌。 3. 配置 API 令牌时,选择必要的权限并根据需要设置 **TTL**。 -4. 单击 **创建 API 令牌** 以获取访问密钥 ID 和秘密访问密钥。将它们复制并保存到安全位置。 +4. 单击 **Create API Token** 以获取访问密钥 ID 和私有访问密钥。复制并将其保存到安全的地方。 -#### 步骤 3:创建外部 Stage +#### 第 3 步:创建外部暂存区 -使用创建的访问密钥 ID 和秘密访问密钥来创建一个名为 *r2_stage* 的外部 Stage。 +使用创建的访问密钥 ID 和私有访问密钥创建一个名为 *r2_stage* 的外部暂存区。 ```sql CREATE STAGE r2_stage From 50619f359cfa176dac464cb22e872163f0cad948 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 14 Jul 2025 10:33:53 +0000 Subject: [PATCH 6/6] =?UTF-8?q?=F0=9F=8C=90=20Translate=2001-privileges.md?= =?UTF-8?q?=20to=20Simplified-Chinese?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../00-ddl/10-udf/ddl-create-function.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/cn/sql-reference/10-sql-commands/00-ddl/10-udf/ddl-create-function.md b/docs/cn/sql-reference/10-sql-commands/00-ddl/10-udf/ddl-create-function.md index f7a029eecb..1b6a0af572 100644 --- a/docs/cn/sql-reference/10-sql-commands/00-ddl/10-udf/ddl-create-function.md +++ b/docs/cn/sql-reference/10-sql-commands/00-ddl/10-udf/ddl-create-function.md @@ -4,9 +4,9 @@ sidebar_position: 1 --- import FunctionDescription from '@site/src/components/FunctionDescription'; - + -创建用户自定义函数。 +创建一个用户自定义函数 (User-Defined Function)。 ## 语法 @@ -16,6 +16,14 @@ CREATE [ OR REPLACE ] FUNCTION [ IF NOT EXISTS ] [ DESC='' ] ``` +## 访问控制要求 + +| 权限 | 对象类型 | 描述 | +|:----------|:--------------|:---------------| +| SUPER | 全局, 表 | 操作 UDF | + +要创建用户自定义函数,执行此操作的用户或 [current_role](/guides/security/access-control/roles) 必须拥有 SUPER [权限](/guides/security/access-control/privileges)。 + ## 示例 请参阅 [使用示例](/guides/query/udf#usage-examples)。 \ No newline at end of file