跳到主要内容

管理 Storage Vault:创建、配置与权限管理

Storage Vault 是 Doris 在存算分离模式中使用的远程共享存储抽象。可以配置一个或多个 Storage Vault,并将不同的表存储在不同的 Storage Vault 上,实现灵活的存储管理。

创建 Storage Vault

语法

CREATE STORAGE VAULT [IF NOT EXISTS] <vault_name>
PROPERTIES
("key" = "value", ...)

<vault_name> 是用户自定义的 Storage Vault 名称,作为后续操作的唯一标识。

创建 HDFS Storage Vault

创建基于 HDFS 的 Storage Vault 前,需确保所有节点(包括 FE、BE 节点及 Meta Service)均可访问目标 HDFS,包括完成 Kerberos 授权配置和连通性检查(可在各节点上使用 Hadoop Client 测试)。

CREATE STORAGE VAULT IF NOT EXISTS hdfs_vault_demo
PROPERTIES (
"type" = "hdfs", -- required
"fs.defaultFS" = "hdfs://127.0.0.1:8020", -- required
"path_prefix" = "big/data", -- optional,一般按业务名称填写
"hadoop.username" = "user", -- optional
"hadoop.security.authentication" = "kerberos", -- optional
"hadoop.kerberos.principal" = "hadoop/127.0.0.1@XXX", -- optional
"hadoop.kerberos.keytab" = "/etc/emr.keytab" -- optional
);

创建 S3 Storage Vault

CREATE STORAGE VAULT IF NOT EXISTS s3_vault_demo
PROPERTIES (
"type" = "S3", -- required
"s3.endpoint" = "oss-cn-beijing.aliyuncs.com", -- required
"s3.region" = "cn-beijing", -- required
"s3.bucket" = "bucket", -- required
"s3.root.path" = "big/data/prefix", -- required
"s3.access_key" = "ak", -- required
"s3.secret_key" = "sk", -- required
"provider" = "OSS", -- required
"use_path_style" = "false" -- optional
);
权限要求

对象存储路径必须具备以下访问权限:headgetlistputmultipartUploaddelete

更多云厂商示例及参数说明,请参阅 CREATE-STORAGE-VAULT

查看 Storage Vault

语法

SHOW STORAGE VAULTS

返回结果包含 4 列:

列名说明
Storage Vault 名称用户定义的 Vault 标识名
Storage Vault ID系统分配的唯一 ID
属性Vault 的配置属性
是否为默认是否为默认 Storage Vault

设置默认 Storage Vault

语法

SET <vault_name> AS DEFAULT STORAGE VAULT

设置后,建表时若未显式指定 Storage Vault,将自动使用该默认 Vault。

建表时指定 Storage Vault

CREATE TABLEPROPERTIES 中指定 storage_vault_name,表数据将存储到对应的 Storage Vault。

注意

建表成功后,不允许修改该表的 storage_vault,即不支持更换 Storage Vault。

示例

CREATE TABLE IF NOT EXISTS supplier (
s_suppkey int(11) NOT NULL COMMENT "",
s_name varchar(26) NOT NULL COMMENT "",
s_address varchar(26) NOT NULL COMMENT "",
s_city varchar(11) NOT NULL COMMENT "",
s_nation varchar(16) NOT NULL COMMENT "",
s_region varchar(13) NOT NULL COMMENT "",
s_phone varchar(16) NOT NULL COMMENT ""
)
UNIQUE KEY (s_suppkey)
DISTRIBUTED BY HASH(s_suppkey) BUCKETS 1
PROPERTIES (
"replication_num" = "1",
"storage_vault_name" = "hdfs_demo_vault"
);

创建数据库时指定 Storage Vault

CREATE DATABASEPROPERTIES 中指定 storage_vault_name。数据库下的新建表若未单独指定 Storage Vault,将继承数据库的 Storage Vault 配置。

示例

CREATE DATABASE IF NOT EXISTS `db_test`
PROPERTIES (
"storage_vault_name" = "hdfs_demo_vault"
);

可通过 ALTER-DATABASE 更改数据库的 storage_vault_name更改仅对新建表生效,不影响已有表

版本说明与优先级规则
  • 3.0.5 版本起支持在建库时指定 Storage Vault。
  • 建表时 Storage Vault 的优先级(从高到低):数据库默认 Storage Vault
  • 若 Storage Vault 的 VAULT_NAME 被修改,可能导致数据库配置的 Vault 失效并报错,需为数据库重新配置有效的 storage_vault_name

修改 Storage Vault

ALTER STORAGE VAULT 用于更新 Storage Vault 的可修改属性。

可修改属性

S3 Storage Vault 支持修改的属性:

属性说明
VAULT_NAMEVault 名称(重命名)
s3.access_key访问密钥 ID
s3.secret_key访问密钥 Secret
use_path_style是否使用路径样式访问

HDFS Storage Vault 禁止修改的属性:

属性原因
path_prefix修改会导致历史数据路径不一致
fs.defaultFS修改会导致无法访问已写入数据

更多属性说明,请参阅 CREATE-STORAGE-VAULT

示例

修改 S3 Storage Vault:

ALTER STORAGE VAULT old_s3_vault
PROPERTIES (
"type" = "S3",
"VAULT_NAME" = "new_s3_vault",
"s3.access_key" = "new_ak",
"s3.secret_key" = "new_sk"
);

修改 HDFS Storage Vault:

ALTER STORAGE VAULT old_hdfs_vault
PROPERTIES (
"type" = "hdfs",
"VAULT_NAME" = "new_hdfs_vault",
"hadoop.username" = "hdfs"
);

删除 Storage Vault

暂不支持删除 Storage Vault。

Storage Vault 权限管理

Admin 用户可向指定 MySQL 用户或角色授予 Storage Vault 的使用权限,控制哪些用户可以在建表时引用该 Vault 或查看其信息。

拥有某个 Storage Vault USAGE_PRIV 权限的用户/角色,可执行以下操作:

  • 通过 SHOW STORAGE VAULTS 查看该 Storage Vault 的信息
  • 建表时在 PROPERTIES 中指定使用该 Storage Vault

授予权限

语法

GRANT
USAGE_PRIV
ON STORAGE VAULT <vault_name>
TO { ROLE | USER } {<role> | <user>}

示例

GRANT USAGE_PRIV ON STORAGE VAULT my_storage_vault TO USER user1;

撤销权限

语法

REVOKE
USAGE_PRIV
ON STORAGE VAULT <vault_name>
FROM { ROLE | USER } {<role> | <user>}

示例

REVOKE USAGE_PRIV ON STORAGE VAULT my_storage_vault FROM USER user1;

常见问题

Q1:如何查询某个 Storage Vault 被哪些表引用?

步骤一:通过 SHOW STORAGE VAULTS 查看目标 Storage Vault 对应的 storage_vault_id

步骤二:执行以下 SQL 查询引用该 Vault 的表,将 PROPERTY_VALUE=3 替换为实际的 storage_vault_id 值:

SELECT *
FROM information_schema.table_properties
WHERE PROPERTY_NAME = "storage_vault_id"
AND PROPERTY_VALUE = 3;

查询结果示例:

+---------------+---------------------------------+-------------------------------------+------------------+----------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | PROPERTY_NAME | PROPERTY_VALUE |
+---------------+---------------------------------+-------------------------------------+------------------+----------------+
| internal | regression_test_vault_p0_create | s3_92ba28c209154d968e680e58dd54d0cc | storage_vault_id | 3 |
+---------------+---------------------------------+-------------------------------------+------------------+----------------+
1 row in set (0.04 sec)

Q2:建表后能否更换 Storage Vault?

不支持。建表成功后,该表的 storage_vault 属性不可修改。如需使用不同的 Storage Vault,需要重新建表并导入数据。

Q3:修改 Storage Vault 名称后,原来引用该 Vault 的数据库会受影响吗?

会受影响。若 Storage Vault 的 VAULT_NAME 被修改,数据库级别的 storage_vault_name 配置可能失效,导致在该数据库下新建表时报错。需要通过 ALTER-DATABASE 重新为数据库指定有效的 storage_vault_name