@@ -6,12 +6,12 @@ import FunctionDescription from '@site/src/components/FunctionDescription';
66
77<FunctionDescription description =" Introduced or updated: v1.2.339 " />
88
9- 创建内部或外部暂存区( Stage) 。
9+ 创建内部或外部 Stage。
1010
1111## 语法
1212
1313``` sql
14- -- 内部暂存区
14+ -- 内部 Stage
1515CREATE [ OR REPLACE ] STAGE [ IF NOT EXISTS ] < internal_stage_name>
1616 [ FILE_FORMAT = (
1717 FORMAT_NAME = ' <your-custom-format>'
@@ -20,7 +20,7 @@ CREATE [ OR REPLACE ] STAGE [ IF NOT EXISTS ] <internal_stage_name>
2020 [ COPY_OPTIONS = ( copyOptions ) ]
2121 [ COMMENT = ' <string_literal>' ]
2222
23- -- 外部暂存区
23+ -- 外部 Stage
2424CREATE STAGE [ IF NOT EXISTS ] < external_stage_name>
2525 externalStageParams
2626 [ FILE_FORMAT = (
@@ -33,84 +33,29 @@ CREATE STAGE [ IF NOT EXISTS ] <external_stage_name>
3333
3434### externalStageParams
3535
36- import Tabs from '@theme/Tabs ';
37- import TabItem from '@theme/TabItem ';
38-
39- <Tabs groupId =" externalstageparams " >
40-
41- <TabItem value =" Amazon S3-compatible Storage " label =" 兼容 Amazon S3 的存储服务 " >
42-
43- ``` sql
44- externalStageParams ::=
45- ' s3://<bucket>[<path/>]'
46- CONNECTION = (
47- < connection_parameters>
48- )
49- ```
50-
51- 有关访问兼容 Amazon S3 的存储服务时可用的连接参数,请参阅[ 连接参数] ( /00-sql-reference/51-connect-parameters.md ) 。
52-
53- ::: note
54- 要在 Amazon S3 上创建外部暂存区(External Stage),您还可以使用 IAM 用户帐户,这使您能够为暂存区定义细粒度的访问控制,包括指定对特定 S3 存储桶的读或写等操作。请参阅[ 示例 3:使用 AWS IAM 用户创建外部暂存区] ( #example-3-create-external-stage-with-aws-iam-user ) 。
36+ ::: tip
37+ 对于外部 Stage,建议使用 ` CONNECTION ` 参数引用预先配置的连接对象,而非内联凭据,以获得更高的安全性与可维护性。
5538:::
56- </TabItem >
57-
58- <TabItem value =" Azure Blob Storage " label =" Azure Blob Storage " >
5939
6040``` sql
6141externalStageParams ::=
62- ' azblob://<container>[<path/>]'
63- CONNECTION = (
64- < connection_parameters>
65- )
66- ```
67-
68- 有关访问 Azure Blob Storage 时可用的连接参数,请参阅[ 连接参数] ( /00-sql-reference/51-connect-parameters.md ) 。
69- </TabItem >
70-
71- <TabItem value =" Google Cloud Storage " label =" Google Cloud Storage " >
72-
73- ``` sql
74- externalLocation ::=
75- ' gcs://<bucket>[<path>]'
42+ ' <protocol>://<location>'
7643 CONNECTION = (
7744 < connection_parameters>
7845 )
79- ```
80-
81- 有关访问 Google Cloud Storage 时可用的连接参数,请参阅[ 连接参数] ( /00-sql-reference/51-connect-parameters.md ) 。
82- </TabItem >
83-
84- <TabItem value =" Alibaba Cloud OSS " label =" 阿里云 OSS " >
85-
86- ``` sql
87- externalLocation ::=
88- ' oss://<bucket>[<path>]'
46+ |
8947 CONNECTION = (
90- < connection_parameters >
91- )
48+ CONNECTION_NAME = ' <your-connection-name> '
49+ );
9250```
9351
94- 有关访问阿里云 OSS 时可用的连接参数,请参阅[ 连接参数] ( /00-sql-reference/51-connect-parameters.md ) 。
95- </TabItem >
52+ 不同存储服务可用的连接参数,请参见 [ Connection Parameters] ( /00-sql-reference/51-connect-parameters.md ) 。
9653
97- <TabItem value =" Tencent Cloud Object Storage " label =" 腾讯云对象存储 " >
98-
99- ``` sql
100- externalLocation ::=
101- ' cos://<bucket>[<path>]'
102- CONNECTION = (
103- < connection_parameters>
104- )
105- ```
106-
107- 有关访问腾讯云对象存储时可用的连接参数,请参阅[ 连接参数] ( /00-sql-reference/51-connect-parameters.md ) 。
108- </TabItem >
109- </Tabs >
54+ 关于 ` CONNECTION_NAME ` 的更多信息,请参见 [ CREATE CONNECTION] ( ../13-connection/create-connection.md ) 。
11055
11156### FILE_FORMAT
11257
113- 详细信息请参阅 [ 输入和输出文件格式 ] ( ../../../00-sql-reference/50-file-format-options.md ) 。
58+ 详情请参见 [ Input & Output File Formats ] ( ../../../00-sql-reference/50-file-format-options.md ) 。
11459
11560### copyOptions
11661
@@ -122,23 +67,23 @@ copyOptions ::=
12267
12368| 参数 | 描述 | 是否必须 |
12469| :---| :---| :---|
125- | ` SIZE_LIMIT = <num> ` | 指定给定 COPY 语句要加载数据的最大行数(> 0) 。默认为 ` 0 ` | 可选 |
126- | ` PURGE = <bool> ` | 如果文件成功加载到表中,命令将清除暂存区中的文件 。默认为 ` false ` | 可选 |
70+ | ` SIZE_LIMIT = <num> ` | 大于 0 的数字,指定单个 COPY 语句最多加载的数据行数 。默认为 ` 0 ` 。 | 可选 |
71+ | ` PURGE = <bool> ` | 设为 true 表示文件成功加载到表后,命令会清理 Stage 中的文件 。默认为 ` false ` 。 | 可选 |
12772
12873
12974## 访问控制要求
13075
13176| 权限 | 对象类型 | 描述 |
13277| :---| :---| :---|
133- | SUPER | 全局, 表 | 操作暂存区 (列出、创建、删除暂存区 )、目录或共享。 |
78+ | SUPER | 全局、 表 | 操作 Stage (列出、创建、删除 Stage )、目录或共享。 |
13479
135- 要创建暂存区( Stage),执行操作的用户或 [ current_role] ( /guides/security/access-control/roles ) 必须具有 SUPER [ 权限(Privilege) ] ( /guides/security/access-control/privileges ) 。
80+ 创建 Stage 时,执行操作的用户或其 [ current_role] ( /guides/security/access-control/roles ) 必须拥有 SUPER [ privilege ] ( /guides/security/access-control/privileges ) 。
13681
13782## 示例
13883
139- ### 示例 1:创建内部暂存区
84+ ### 示例 1:创建内部 Stage
14085
141- 此示例创建一个名为 * my_internal_stage* 的内部暂存区 :
86+ 以下示例创建名为 * my_internal_stage* 的内部 Stage :
14287
14388``` sql
14489CREATE STAGE my_internal_stage;
@@ -151,12 +96,21 @@ my_internal_stage|Internal |StageParams { storage: Fs(StorageFsConfig { root: "
15196
15297```
15398
154- ### 示例 2:使用 AWS 访问密钥创建外部暂存区
99+ ### 示例 2:使用 Connection 创建外部 Stage
155100
156- 此示例在 Amazon S3 上创建一个名为 * my_s3_stage* 的外部暂存区 :
101+ 以下示例使用 Connection 在 Amazon S3 上创建名为 * my_s3_stage* 的外部 Stage :
157102
158103``` sql
159- CREATE STAGE my_s3_stage URL= ' s3://load/files/' CONNECTION = (ACCESS_KEY_ID = ' <your-access-key-id>' SECRET_ACCESS_KEY = ' <your-secret-access-key>' );
104+ -- 先创建 Connection
105+ CREATE CONNECTION my_s3_connection
106+ STORAGE_TYPE = ' s3'
107+ ACCESS_KEY_ID = ' <your-access-key-id>'
108+ SECRET_ACCESS_KEY = ' <your-secret-access-key>' ;
109+
110+ -- 使用 Connection 创建 Stage
111+ CREATE STAGE my_s3_stage
112+ URL= ' s3://load/files/'
113+ CONNECTION = (CONNECTION_NAME = ' my_s3_connection' );
160114
161115DESC STAGE my_s3_stage;
162116+ -- -----------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------+---------+
@@ -166,18 +120,18 @@ DESC STAGE my_s3_stage;
166120+ -- -----------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------+---------+
167121```
168122
169- ### 示例 3:使用 AWS IAM 用户创建外部暂存区
123+ ### 示例 3:使用 AWS IAM 用户创建外部 Stage
170124
171- 此示例使用 AWS Identity and Access Management (IAM) 用户在 Amazon S3 上创建一个名为 * iam_external_stage* 的外部暂存区 。
125+ 以下示例使用 AWS Identity and Access Management (IAM) 用户在 Amazon S3 上创建名为 * iam_external_stage* 的外部 Stage 。
172126
173- #### 第 1 步 :为 S3 存储桶创建访问策略
127+ #### 步骤 1 :为 S3 存储桶创建访问策略
174128
175- 以下步骤为 Amazon S3 上的存储桶(Bucket) * databend-toronto* 创建一个名为 * databend-access* 的访问策略:
129+ 以下步骤为 Amazon S3 上的存储桶 * databend-toronto* 创建名为 * databend-access* 的访问策略:
176130
177- 1 . 登录 AWS 管理控制台,然后选择 ** Services ** > ** Security, Identity, & Compliance ** > ** IAM** 。
178- 2 . 在左侧导航窗格中选择 ** Account settings ** ,然后转到右侧页面的 ** Security Token Service (STS)** 部分。确保您帐户所属的 AWS 区域的状态为 ** Active ** 。
179- 3 . 在左侧导航窗格中选择 ** Policies ** ,然后在右侧页面上选择 ** Create policy ** 。
180- 4 . 单击 ** JSON** 选项卡,将以下代码复制并粘贴到编辑器中,然后将策略另存为 * databend_access* 。
131+ 1 . 登录 AWS 管理控制台,选择 ** 服务 ** > ** 安全性、身份与合规性 ** > ** IAM** 。
132+ 2 . 在左侧导航栏选择 ** 账户设置 ** ,在右侧页面进入 ** 安全令牌服务 (STS)** 区域,确保所属 AWS 区域状态为 ** 活动 ** 。
133+ 3 . 在左侧导航栏选择 ** 策略 ** ,在右侧页面点击 ** 创建策略 ** 。
134+ 4 . 点击 ** JSON** 选项卡,将以下代码复制粘贴到编辑器,并将策略保存为 * databend_access* 。
181135
182136``` json
183137{
@@ -203,57 +157,71 @@ DESC STAGE my_s3_stage;
203157}
204158```
205159
206- #### 第 2 步 :创建 IAM 用户
160+ #### 步骤 2 :创建 IAM 用户
207161
208- 以下步骤创建一个名为 * databend* 的 IAM 用户,并将访问策略 * databend-access* 附加到该用户。
162+ 以下步骤创建名为 * databend* 的 IAM 用户,并将访问策略 * databend-access* 附加到该用户:
209163
210- 1 . 在左侧导航窗格中选择 ** Users ** ,然后在右侧页面上选择 ** Add users ** 。
164+ 1 . 在左侧导航栏选择 ** 用户 ** ,在右侧页面点击 ** 添加用户 ** 。
2111652 . 配置用户:
212- - 将用户名设置为 * databend* 。
213- - 为用户设置权限时,单击 ** Attach policies directly ** ,然后搜索并选择访问策略 * databend-access* 。
214- 3 . 创建用户后,单击用户名打开详细信息页面,然后选择 ** Security credentials ** 选项卡。
215- 4 . 在 ** Access keys ** 部分,单击 ** Create access key ** 。
216- 5 . 为用例选择 ** Third-party service ** ,并勾选下方的复选框以确认创建访问密钥 。
217- 6 . 复制生成的访问密钥和私有访问密钥并将其保存到安全的地方 。
166+ - 用户名设为 * databend* 。
167+ - 设置权限时,点击 ** 直接附加策略 ** ,搜索并选择访问策略 * databend-access* 。
168+ 3 . 用户创建完成后,点击用户名进入详情页,选择 ** 安全凭证 ** 选项卡。
169+ 4 . 在 ** 访问密钥 ** 区域,点击 ** 创建访问密钥 ** 。
170+ 5 . 用例选择 ** 第三方服务 ** ,勾选下方复选框确认创建访问密钥 。
171+ 6 . 复制并妥善保存生成的访问密钥和秘密访问密钥 。
218172
219- #### 第 3 步:创建外部暂存区
173+ #### 步骤 3:创建外部 Stage
220174
221- 使用为 IAM 用户 * databend * 生成的访问密钥和私有访问密钥来创建外部暂存区 。
175+ 使用 IAM 角色创建安全性更高的外部 Stage 。
222176
223177``` sql
224- CREATE STAGE iam_external_stage url = ' s3://databend-toronto' CONNECTION = (ACCESS_KEY_ID= ' <your-access-key-id>' SECRET_ACCESS_KEY= ' <your-secret-access-key>' );
178+ -- 先使用 IAM 角色创建 Connection
179+ CREATE CONNECTION iam_s3_connection
180+ STORAGE_TYPE = ' s3'
181+ ROLE_ARN = ' arn:aws:iam::123456789012:role/databend-access'
182+ EXTERNAL_ID = ' my-external-id-123' ;
183+
184+ -- 使用 Connection 创建 Stage
185+ CREATE STAGE iam_external_stage
186+ URL = ' s3://databend-toronto'
187+ CONNECTION = (CONNECTION_NAME = ' iam_s3_connection' );
225188```
226189
227- ### 示例 4:在 Cloudflare R2 上创建外部暂存区
190+ ### 示例 4:在 Cloudflare R2 上创建外部 Stage
228191
229- [ Cloudflare R2] ( https://www.cloudflare.com/en-ca /products/r2/ ) 是 Cloudflare 推出的一款对象存储服务,与亚马逊的 AWS S3 服务完全兼容。本示例在 Cloudflare R2 上创建一个名为 * r2_stage* 的外部暂存区 。
192+ [ Cloudflare R2] ( https://www.cloudflare.com/zh-cn /products/r2/ ) 是 Cloudflare 推出的对象存储服务,与 Amazon AWS S3 完全兼容。以下示例在 Cloudflare R2 上创建名为 * r2_stage* 的外部 Stage 。
230193
231- #### 第 1 步 :创建存储桶
194+ #### 步骤 1 :创建存储桶
232195
233- 以下步骤在 Cloudflare R2 上创建一个名为 * databend* 的存储桶。
196+ 以下步骤在 Cloudflare R2 上创建名为 * databend* 的存储桶:
234197
235- 1 . 登录 Cloudflare 仪表盘,在左侧导航窗格中选择 ** R2** 。
236- 2 . 单击 ** Create bucket ** 创建一个存储桶,并将存储桶名称设置为 * databend* 。成功创建存储桶后,您可以在查看存储桶详细信息页面时,在存储桶名称正下方找到存储桶端点 。
198+ 1 . 登录 Cloudflare 控制台,在左侧导航栏选择 ** R2** 。
199+ 2 . 点击 ** 创建存储桶 ** ,设置存储桶名称为 * databend* 。创建成功后,在存储桶详情页即可在存储桶名称下方看到存储桶端点 。
237200
238- #### 第 2 步 :创建 R2 API 令牌
201+ #### 步骤 2 :创建 R2 API 令牌
239202
240- 以下步骤创建一个包含访问密钥 ID 和私有访问密钥的 R2 API 令牌。
203+ 以下步骤创建包含 Access Key ID 和 Secret Access Key 的 R2 API 令牌:
241204
242- 1 . 在 ** R2** > ** Overview ** 页面上单击 ** Manage R2 API Tokens ** 。
243- 2 . 单击 ** Create API token ** 创建一个 API 令牌 。
244- 3 . 配置 API 令牌时,选择必要的权限并根据需要设置 ** TTL** 。
245- 4 . 单击 ** Create API Token ** 以获取访问密钥 ID 和私有访问密钥。复制并将其保存到安全的地方 。
205+ 1 . 在 ** R2** > ** 概述 ** 页面点击 ** 管理 R2 API 令牌 ** 。
206+ 2 . 点击 ** 创建 API 令牌 ** 。
207+ 3 . 配置令牌时选择所需权限,并按需设置 ** TTL** 。
208+ 4 . 点击 ** 创建 API 令牌 ** 获取 Access Key ID 和 Secret Access Key,复制并妥善保存 。
246209
247- #### 第 3 步:创建外部暂存区
210+ #### 步骤 3:创建外部 Stage
248211
249- 使用创建的访问密钥 ID 和私有访问密钥创建一个名为 * r2_stage* 的外部暂存区 。
212+ 使用已生成的 Access Key ID 和 Secret Access Key 创建名为 * r2_stage* 的外部 Stage 。
250213
251214``` sql
215+ -- 先创建 Connection
216+ CREATE CONNECTION r2_connection
217+ STORAGE_TYPE = ' s3'
218+ REGION = ' auto'
219+ ENDPOINT_URL = ' <your-bucket-endpoint>'
220+ ACCESS_KEY_ID = ' <your-access-key-id>'
221+ SECRET_ACCESS_KEY = ' <your-secret-access-key>' ;
222+
223+ -- 使用 Connection 创建 Stage
252224CREATE STAGE r2_stage
253225 URL= ' s3://databend/'
254- CONNECTION = (
255- REGION = ' auto'
256- ENDPOINT_URL = ' <your-bucket-endpoint>'
257- ACCESS_KEY_ID = ' <your-access-key-id>'
258- SECRET_ACCESS_KEY = ' <your-secret-access-key>' );
226+ CONNECTION = (CONNECTION_NAME = ' r2_connection' );
259227```
0 commit comments