用户Stage
- RFC PR: datafuselabs/databend#8519
- Tracking Issue: datafuselabs/databend#8520
概述
支持用户内部Stage。
动机
Databend目前仅支持命名的内部Stage:
CREATE STAGE @my_stage;
COPY INTO my_table FROM @my_stage;
然而,在某些情况下,命名的内部Stage使用起来较为复杂。特别是对于仅使用Stage来加载数据的用户。通过支持用户Stage,他们可以更高效地复制数据:
COPY INTO my_table from @~;
指南级解释
Databend将增加对用户Stage的支持。每个SQL用户都将拥有自己的Stage,可以通过~
来引用。
用户可以在任何地方像使用命名Stage一样使用~
:
COPY INTO my_table FROM @~;
LIST @~;
PRESIGN @~/data.csv;
REMOVE @~ PATTERN = 'ontime.*';
用户Stage是SQL用户的内部匿名Stage,因此用户不能:
- 创建
- 删除
- 修改
并且用户不能为用户Stage设置格式选项。他们需要在COPY
时指定格式设置。
参考级解释
Databend目前有两种不同的StageType
:
pub enum StageType {
Internal,
External,
}
Databend将为内部Stage生成一个唯一的prefix,如stage/{stage_name}
。
我们将添加两种新的Stage类型:
pub enum StageType {
LegacyInternal,
External,
Internal,
User,
}
StageType::Internal
将弃用StageType::LegacyInternal
。自此RFC起,我们将不再创建新的StageType::LegacyInternal
Stage。
Stage prefix规则将是:
LegacyInternal
=>stage/{stage_name}
External
=> 指定的位置。Internal
=>stage/internal/{stage_name}
User
=>stage/user/{user_name}
注意:StageType::User
将不会存储在metasrv中,而是直接在内存中持续构建。
缺点
无。