跳到主要内容

什么是 Stage?

在 Databend 中,Stage 是一个存放数据文件的虚拟位置。您可以直接查询 Stage 中的文件,或将数据加载到表中。反之,您也可以将表中的数据卸载到 Stage 作为文件存储。使用 Stage 的妙处在于,您可以像访问电脑文件夹一样便捷地进行数据加载和卸载操作。就像将文件放入文件夹时无需知晓其在硬盘上的确切位置一样,访问 Stage 中的文件只需指定 Stage 名称和文件名(例如 @mystage/mydatafile.csv),而无需指明其在对象存储桶中的具体路径。与电脑文件夹类似,您可以在 Databend 中创建任意数量的 Stage。但需注意,Stage 不能嵌套包含其他 Stage,每个 Stage 都是独立存在的。

通过 Stage 加载数据还能提升文件上传、管理和筛选的效率。借助 BendSQL,您只需一条命令即可轻松上传或下载 Stage 中的文件。向 Databend 加载数据时,您可以在 COPY INTO 命令中直接指定 Stage,使命令从该 Stage 读取甚至筛选数据文件。同样,从 Databend 导出数据时,您也可以将数据文件转储至 Stage。

Stage 类型

根据实际存储位置和可访问性,Stage 可分为以下类型:内部 Stage、外部 Stage 和用户 Stage。下表总结了 Databend 中不同 Stage 类型的特性,包括存储位置、可访问性及推荐使用场景:

用户 Stage内部 Stage外部 Stage
存储位置内部对象存储(Databend)内部对象存储(Databend)外部对象存储(如 S3、Azure)
创建方式自动创建手动创建:CREATE STAGE stage_name;手动创建:CREATE STAGE stage_name 's3://bucket/prefix/' CONNECTION=(endpoint_url='x', ...);
访问控制仅创建用户可访问可与其他用户或角色共享可与其他用户或角色共享
删除 Stage不允许删除删除 Stage 并清空其中文件仅删除 Stage;外部存储中的文件保留
文件上传必须上传文件至 Databend必须上传文件至 Databend无需上传;用于从外部存储读取或卸载数据
使用场景个人/私有数据团队/共享数据外部数据集成或卸载
路径格式@~/@stage_name/@stage_name/

内部 Stage

内部 Stage 的文件实际存储在 Databend 所在的对象存储中。组织内所有用户均可访问内部 Stage,每个用户都能利用该 Stage 进行数据加载或导出任务。与创建文件夹类似,创建 Stage 时需要指定名称。以下是使用 CREATE STAGE 命令创建内部 Stage 的示例:

-- 创建名为 my_internal_stage 的内部 Stage
CREATE STAGE my_internal_stage;

外部 Stage

外部 Stage 允许您指定 Databend 所在位置之外的对象存储。例如,若您的数据集存储在 Google 云存储容器中,可使用该容器创建外部 Stage。创建外部 Stage 时,必须提供连接信息以便 Databend 访问外部存储位置。

以下是创建外部 Stage 的示例。假设您有一个名为 databend-doc 的 Amazon S3 存储桶存放数据集:

alt text

您可以使用 CREATE STAGE 命令创建外部 Stage 连接该存储桶:

-- 创建名为 my_external_stage 的外部 Stage
CREATE STAGE my_external_stage
URL = 's3://databend-doc'
CONNECTION = (
AWS_KEY_ID = '<您的密钥ID>',
AWS_SECRET_KEY = '<您的密钥>'
);

创建外部 Stage 后,即可从 Databend 访问数据集。例如列出文件:

LIST @my_external_stage;

┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ name │ size │ md5 │ last_modified │ creator │
├───────────────┼────────┼────────────────────────────────────┼───────────────────────────────┼──────────────────┤
│ Inventory.csv │ 57585"0cd02fb636a22ba9f4ae4d24555a7d68"2024-03-17 21:22:38.000 +0000NULL
│ Products.csv │ 42987"570e5cbf6a4b6e7e9a258094192f4784"2024-03-17 21:22:38.000 +0000NULL
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

请注意,外部存储必须是 Databend 支持的对象存储方案。CREATE STAGE 命令页面提供了常用对象存储的连接信息配置示例。

用户 Stage

用户 Stage 可视为特殊的内部 Stage:其文件存储在 Databend 内部对象存储中,但其他用户无法访问。每个用户都默认拥有专属的用户 Stage,无需预先创建或命名。此外,用户无法删除自己的用户 Stage。

用户 Stage 适合作为无需共享的私有数据文件仓库。访问用户 Stage 需使用 @~ 符号。例如列出 Stage 中所有文件:

LIST @~;

管理 Stage

Databend 提供多种命令帮助您管理 Stage 及其中的暂存文件:

命令描述适用于用户 Stage适用于内部 Stage适用于外部 Stage
CREATE STAGE创建内部或外部 stage
DROP STAGE删除内部或外部 stage
DESC STAGE显示内部或外部 stage 的属性
LIST返回 stage 中暂存文件的列表。或者,表函数 LIST_STAGE 提供类似功能,并增加了获取特定文件信息的灵活性
REMOVE从 stage 中移除暂存文件
SHOW STAGES返回已创建的内部和外部 stage 列表
开始使用 Databend Cloud
低成本
快速分析
多种数据源
弹性扩展
注册