跳到主要内容

CREATE STAGE

引入或更新: v1.2.339

创建内部或外部Stage。

语法

-- 内部Stage
CREATE [ OR REPLACE ] STAGE [ IF NOT EXISTS ] <internal_stage_name>
[ FILE_FORMAT = (
FORMAT_NAME = '<your-custom-format>'
| TYPE = { CSV | TSV | NDJSON | PARQUET | ORC } [ formatTypeOptions ]
) ]
[ COPY_OPTIONS = ( copyOptions ) ]
[ COMMENT = '<string_literal>' ]

-- 外部Stage
CREATE STAGE [ IF NOT EXISTS ] <external_stage_name>
externalStageParams
[ FILE_FORMAT = (
FORMAT_NAME = '<your-custom-format>'
| TYPE = { CSV | TSV | NDJSON | PARQUET | ORC } [ formatTypeOptions ]
) ]
[ COPY_OPTIONS = ( copyOptions ) ]
[ COMMENT = '<string_literal>' ]

externalStageParams

externalStageParams ::=
's3://<bucket>[<path/>]'
CONNECTION = (
<connection_parameters>
)

有关访问Amazon S3-like存储服务的连接参数,请参见连接参数

备注

要在Amazon S3上创建外部Stage,您还可以使用IAM用户账户,使您能够为Stage定义细粒度的访问控制,包括指定对特定S3存储桶的读或写访问等操作。请参见示例3:使用AWS IAM用户创建外部Stage

FILE_FORMAT

详情请参见输入与输出文件格式

copyOptions

copyOptions ::=
[ SIZE_LIMIT = <num> ]
[ PURGE = <bool> ]
参数描述是否必需
SIZE_LIMIT = <num>指定给定COPY语句要加载的最大数据行数的数字(> 0)。默认 0可选
PURGE = <bool>True指定命令将在文件成功加载到表中后清除Stage中的文件。默认 false可选

示例

示例1:创建内部Stage

此示例创建一个名为my_internal_stage的内部Stage:

CREATE STAGE my_internal_stage;

DESC STAGE my_internal_stage;

name |stage_type|stage_params |copy_options |file_format_options |number_of_files|creator |comment|
-----------------+----------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------+---------------+------------------+-------+
my_internal_stage|Internal |StageParams { storage: Fs(StorageFsConfig { root: "_data" }) }|CopyOptions { on_error: AbortNum(1), size_limit: 0, max_files: 0, split_size: 0, purge: false, single: false, max_file_size: 0, disable_variant_check: false }|Parquet(ParquetFileFormatParams)| 0|'root'@'127.0.0.1'| |

示例2:使用AWS访问密钥创建外部Stage

此示例在Amazon S3上创建一个名为my_s3_stage的外部Stage:

CREATE STAGE my_s3_stage URL='s3://load/files/' CONNECTION = (ACCESS_KEY_ID = '<your-access-key-id>' SECRET_ACCESS_KEY = '<your-secret-access-key>');

DESC STAGE my_s3_stage;
+-------------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------+---------+
| name | stage_type | stage_params | copy_options | file_format_options | comment |
+-------------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------+---------+
| my_s3_stage | External | StageParams { storage: S3(StageS3Storage { bucket: "load", path: "/files/", credentials_aws_key_id: "", credentials_aws_secret_key: "", encryption_master_key: "" }) } | CopyOptions { on_error: None, size_limit: 0 } | FileFormatOptions { format: Csv, skip_header: 0, field_delimiter: ",", record_delimiter: "\n", compression: None } | |
+-------------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------+---------+

示例3:使用AWS IAM用户创建外部Stage

此示例使用AWS Identity and Access Management (IAM)用户在Amazon S3上创建一个名为iam_external_stage的外部Stage。

步骤1:为S3存储桶创建访问策略

以下过程为Amazon S3上的存储桶databend-toronto创建一个名为databend-access的访问策略:

  1. 登录AWS管理控制台,然后选择Services > Security, Identity, & Compliance > IAM
  2. 在左侧导航窗格中选择Account settings,然后在右侧页面上的Security Token Service (STS)部分中,确保您的账户所属的AWS区域的状态为Active
  3. 在左侧导航窗格中选择Policies,然后在右侧页面中选择Create policy
  4. 点击JSON选项卡,将以下代码复制并粘贴到编辑器中,然后将策略保存为databend_access
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllObjectActions",
"Effect": "Allow",
"Action": [
"s3:*Object"
],
"Resource": "arn:aws:s3:::databend-toronto/*"
},
{
"Sid": "ListObjectsInBucket",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::databend-toronto"
}
]
}

步骤2:创建IAM用户

以下过程创建一个名为databend的IAM用户,并将访问策略databend-access附加到该用户。

  1. 在左侧导航窗格中选择Users,然后在右侧页面中选择Add users
  2. 配置用户:
    • 将用户名设置为databend
    • 在为用户设置权限时,点击Attach policies directly,然后搜索并选择访问策略databend-access
  3. 用户创建完成后,点击用户名以打开详细信息页面,然后选择Security credentials选项卡。
  4. Access keys部分,点击Create access key
  5. 选择Third-party service作为用例,并勾选下方的复选框以确认创建访问密钥。
  6. 复制并安全保存生成的访问密钥和秘密访问密钥。

步骤3:创建外部Stage

使用为IAM用户databend生成的访问密钥和秘密访问密钥创建外部Stage。

CREATE STAGE iam_external_stage url = 's3://databend-toronto' CONNECTION =(aws_key_id='<your-access-key-id>' aws_secret_key='<your-secret-access-key>' region='us-east-2');

示例4:在Cloudflare R2上创建外部Stage

Cloudflare R2是由Cloudflare引入的对象存储服务,与Amazon的AWS S3服务完全兼容。此示例在Cloudflare R2上创建一个名为r2_stage的外部Stage。

步骤1:创建存储桶

以下过程在Cloudflare R2上创建一个名为databend的存储桶。

  1. 登录Cloudflare仪表板,然后在左侧导航窗格中选择R2
  2. 点击Create bucket创建存储桶,并将存储桶名称设置为databend。存储桶成功创建后,您可以在查看存储桶详细信息页面时,在存储桶名称下方找到存储桶端点。

步骤2:创建R2 API令牌

以下过程创建一个包含访问密钥ID和秘密访问密钥的R2 API令牌。

  1. R2 > Overview中点击Manage R2 API Tokens
  2. 点击Create API token创建API令牌。
  3. 在配置API令牌时,选择必要的权限并根据需要设置TTL
  4. 点击Create API Token以获取访问密钥ID和秘密访问密钥。复制并安全保存它们。

步骤3:创建外部Stage

使用创建的访问密钥ID和秘密访问密钥创建名为r2_stage的外部Stage。

CREATE STAGE r2_stage
URL='s3://databend/'
CONNECTION = (
REGION = 'auto'
ENDPOINT_URL = '<your-bucket-endpoint>'
ACCESS_KEY_ID = '<your-access-key-id>'
SECRET_ACCESS_KEY = '<your-secret-access-key>');