CREATE STAGE
语法说明
CREATE STAGE
用于在 MatrixOne 数据库中创建一个命名的内部或外部数据阶段(Stage),用于数据导出,你可以创建一个数据阶段,通过将数据导出到数据阶段,你可以将数据文件下载到本地或将其存储在云存储服务中。
-
内部阶段(Internal Stage):内部阶段将数据文件存储在 MatrixOne 内部。内部阶段可以是永久性的或临时性的。
-
外部阶段(External Stage):外部阶段引用存储在 MatrixOne 之外位置的数据文件。目前,支持以下云存储服务:
- Amazon S3 存储桶
- Aliyun 存储桶
存储位置可以是私有/受保护的,也可以是公开的。但是,无法访问需要恢复才能检索的存档云存储类别中的数据。
内部或外部阶段可以包括一个目录表。目录表在云存储中存储分阶段文件的目录。
-
配置一个指定路径,控制用户
SELECT INTO
的写入权限,在创建之后,用户只能写入指定的STAGE
路径 -
如果不创建
STAGE
或全部STAGE
都在DISABLED
状态下,用户可以在操作系统或对象存储的权限允许情况下,写入任何路径。 -
如果不使用
STAGE
,用户SELECT INTO
时必须强行加入credential
信息。
Note
- 集群管理员(即 root 用户)和租户管理员可以创建数据阶段。
- 创建完成数据阶段以后,数据表只能导入至 STAGE 指定路径。
语法结构
> CREATE STAGE [ IF NOT EXISTS ] { stage_name }
{ StageParams }
[ directoryTableParams ]
[ COMMENT = '<string_literal>' ]
StageParams (for Amazon S3) :
URL = "endpoint"='<string>' CREDENTIALS = {"access_key_id"='<string>', "secret_access_key"='<string>', "filepath"='<string>', "region"='<string>'}
StageParams (for Aliyun OSS) :
URL = "endpoint"='<string>' CREDENTIALS = {"access_key_id"='<string>', "secret_access_key"='<string>'}
StageParams (for File System) :
URL= 'filepath'
directoryTableParams :
ENABLE = { TRUE | FALSE }
语法解释
-
IF NOT EXISTS
:可选参数,用于在创建 Stage 时检查是否已存在同名的 Stage,避免重复创建。 -
stage_name
:要创建的 Stage 的名称。 -
StageParams
:这是一个参数组,用于指定 Stage 的配置参数。-
endpoint
:Stage 的连接 URL,指定对象存储服务的位置。对于不同的对象存储服务(如 Amazon S3、Aliyun OSS、文件系统等),这个 URL 的内容可能有所不同。例如:s3.us-west-2.amazonaws.com -
CREDENTIALS
:这是一个 JSON 对象,包含连接到对象存储服务所需的凭证信息,access_key_id
:用于身份验证的访问密钥 ID。secret_access_key
:与访问密钥 ID 相关联的密钥。"filepath"='<string>
:指定 S3 存储中的文件路径或目录。"region"='<string>'
:指定 Amazon S3 存储所在的 AWS 区域。
-
-
directoryTableParams
:这是一个参数组,用于指定 Stage 的目录表(directory table)的配置。ENABLE
:是否启用目录表,值为TRUE
或FALSE
。
示例
CREATE TABLE `user` (`id` int(11) ,`user_name` varchar(255) ,`sex` varchar(255));
INSERT INTO user(id,user_name,sex) values('1', 'weder', 'man'), ('2', 'tom', 'man'), ('3', 'wederTom', 'man');
-- 创建内部数据阶段
mysql> CREATE STAGE stage1 URL='/tmp' ENABLE = TRUE;
-- 将数据从表导出到数据阶段
mysql> SELECT * FROM user INTO OUTFILE 'stage1:/user.csv';
-- 你可以在你本地目录下看到你导出的表
-- 当设置好数据阶段以后,数据表只能导出到指定路径,导出到其他路径将报错
mysql> SELECT * FROM user INTO OUTFILE '~/tmp/csv2/user.txt';
ERROR 20101 (HY000): internal error: stage exists, please try to check and use a stage instead