Перейти к содержимому
Последнее обновление

Управление 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 для последующих операций.

Создание Storage Vault на базе HDFS​

Перед созданием Storage Vault на базе HDFS убедитесь, что все узлы (включая узлы 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, typically filled with the business name
"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
);

Создание Storage Vault на базе S3​

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
);
Требования к правам доступа

Для пути в объектном хранилище необходимы следующие права доступа: head, get, list, put, multipartUpload, delete.

Дополнительные примеры для облачных провайдеров и описания параметров приведены в разделе CREATE-STORAGE-VAULT.

Просмотр Storage Vault​

Синтаксис

SHOW STORAGE VAULTS

Результат содержит 4 столбца:

СтолбецОписание
Имя Storage VaultИдентификатор Storage Vault, заданный пользователем
ID Storage VaultУникальный ID, назначенный системой
СвойстваСвойства конфигурации Storage Vault
IsDefaultЯвляется ли этот Storage Vault хранилищем по умолчанию

Установка Storage Vault по умолчанию​

Синтаксис

SET <vault_name> AS DEFAULT STORAGE VAULT

После этой настройки Storage Vault по умолчанию используется автоматически, если при создании таблицы Storage Vault не указан явно.

Указание Storage Vault при создании таблицы​

Укажите storage_vault_name в разделе PROPERTIES оператора CREATE TABLE. Данные таблицы будут храниться в соответствующем 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 при создании базы данных​

Укажите storage_vault_name в разделе PROPERTIES оператора CREATE DATABASE. Новые таблицы, создаваемые в этой базе данных, наследуют её настройку Storage Vault, если для них Storage Vault не указан отдельно.

Пример

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

Значение storage_vault_name для базы данных можно изменить с помощью ALTER-DATABASE. Изменение действует только для вновь создаваемых таблиц и не затрагивает существующие таблицы.

Примечания о версиях и правила приоритета
  • Указание Storage Vault при создании базы данных поддерживается начиная с версии 3.0.5.
  • Приоритет выбора Storage Vault при создании таблицы (от высшего к низшему): Таблица > База данных > Storage Vault по умолчанию.
  • При изменении VAULT_NAME у Storage Vault настройка хранилища на уровне базы данных может стать недействительной и вызывать ошибки. В этом случае необходимо заново задать для базы данных допустимое значение storage_vault_name.

Изменение Storage Vault​

ALTER STORAGE VAULT обновляет свойства Storage Vault, доступные для изменения.

Изменяемые свойства​

Свойства, которые можно изменять для Storage Vault на базе S3:

СвойствоОписание
VAULT_NAMEИмя Storage Vault (переименование)
s3.access_keyID ключа доступа
s3.secret_keyСекретный ключ доступа
use_path_styleИспользовать ли доступ в формате path-style

Свойства, которые нельзя изменять для Storage Vault на базе HDFS:

СвойствоПричина
path_prefixИзменение приводит к несогласованности путей к ранее сохранённым данным
fs.defaultFSИзменение делает уже записанные данные недоступными

Дополнительные описания свойств приведены в разделе CREATE-STORAGE-VAULT.

Примеры​

Изменение Storage Vault на базе S3:

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

Изменение Storage Vault на базе HDFS:

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

Удаление Storage Vault​

Удаление Storage Vault в настоящее время не поддерживается.

Управление доступом к Storage Vault​

Администраторы могут предоставлять указанным пользователям или ролям MySQL права на использование Storage Vault. Это позволяет управлять тем, какие пользователи могут ссылаться на Storage Vault при создании таблиц или просматривать сведения о нём.

Пользователь или роль с правом USAGE_PRIV для Storage Vault может выполнять следующие операции:

  • Просматривать сведения о Storage Vault с помощью SHOW STORAGE VAULTS
  • Указывать Storage Vault в PROPERTIES при создании таблицы

Предоставление прав​

Синтаксис

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?​

Шаг 1: Выполните SHOW STORAGE VAULTS, чтобы узнать storage_vault_id нужного Storage Vault.

Шаг 2: Выполните следующий SQL-запрос, чтобы найти таблицы, ссылающиеся на этот Storage 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_NAME у Storage Vault настройка storage_vault_name на уровне базы данных может стать недействительной, что приведёт к ошибкам при создании новых таблиц в этой базе данных. Необходимо использовать ALTER-DATABASE, чтобы заново задать для базы данных допустимое значение storage_vault_name.