Директории

База данных YDB поддерживает внутри иерархическую структуру директорий, в которых могут размещаться объекты БД.

YDB CLI поддерживает операции изменения структуры директорий, а также указание директории при обращении к объектам схемы.

Создание директории

Команда scheme mkdir создает директории:

ydb [connection options] scheme mkdir <path>

, где [connection options] - опции соединения с БД

В параметре path указывается относительный путь создаваемой директории от корня директорий базы данных. Будут созданы все директории на этом пути, которые не существовали до момента вызова команды.

Если конечная директория на пути уже существовала, то выполнение команды завершится успешно (код результата 0) с выдачей предупреждения о том, что никаких изменений не было произведено:

Status: SUCCESS
Issues: 
<main>: Error: dst path fail checks, path: /<database>/<path>: path exist, request accepts it, 
pathId: [OwnerId: <some>, LocalPathId: <some>], path type: EPathTypeDir, path state: EPathStateNoChanges

Также поддерживается синтаксис указания полного пути, начинающегося с символа /, который должен в этом случае содержать в начале путь базы данных, указанной в параметрах соединения, или с которой разрешаются операции через установленное соединение с кластером.

Примеры:

  • Создание директории в корне базы данных

    ydb --profile db1 scheme mkdir dir1
    
  • Создание директорий на указанном пути от корня базы данных

    ydb --profile db1 scheme mkdir dir1/dir2/dir3
    

Удаление директории

Команда scheme rmdir удаляет директорию:

ydb [connection options] scheme rmdir <path>

, где [connection options] - опции соединения с БД

В параметре path указывается путь до директории, которая должна быть удалена. Эта директория не должна содержать объектов (включая таблицы и поддиректории), иначе команда не будет выполнена с выдачей ошибки:

Status: SCHEME_ERROR
Issues: 
<main>: Error: path table fail checks, path: /<database>/<path>: path has children, request 
doesn't accept it, pathId: [OwnerId: <some>, LocalPathId: <some>], path type: 
EPathTypeDir, path state: EPathStateNoChanges, alive children: <count>

Использование директорий в других командах CLI

Во всех командах CLI, в которые передается параметром имя объекта, оно может быть указано с директорией, например в scheme describe:

ydb --profile db1 scheme describe dir1/table_a

Команда scheme ls поддерживает передачу пути к директории в качестве параметра:

ydb --profile db1 scheme ls dir1/dir2

Использование директорий в YQL

Имена объектов в запросах на языке YQL могут содержать путь к директории, где находится этот объект. Этот путь будет конкатенирован с базовым путем, задаваемым прагмой TablePathPrefix. Если прагма не указана, имя объекта разрешается относительно корня базы данных.

Неявное создание директорий при импорте

При выполнении команды импорта данных создается дерево директорий по образцу каталога, из которого выполняется импорт.