Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
  • Оглавление
  • Начало работы
    • Обзор
    • Создание базы данных
    • Аутентификация
    • Интерфейс командной строки YDB CLI
    • Язык запросов YQL
    • YDB SDK
    • Развертывание одноузлового кластера
      • Обзор
      • Docker
      • Бинарный файл
      • Minikube
    • Полезные ссылки
    • Document API, совместимый с Amazon DynamoDB
      • Настройка инструментов AWS
      • Работа с данными через HTTP-интерфейс
      • Работа с AWS CLI
        • Обзор
        • Создание таблицы
        • Добавление данных в таблицу
        • Чтение данных из таблицы
        • Обновление данных
        • Выборка данных
        • Удаление созданных ресурсов
      • Работа с AWS SDK
        • Обзор
        • Создание таблицы
        • Загрузка данных в таблицу
        • Управление записями в таблице
          • Создание записи
          • Чтение записи
          • Обновление записи
          • Удаление записи
        • Поиск и извлечение данных
        • Удаление таблицы
  • Практические руководства
    • Развертывание веб-приложения
    • Разработка Slack-бота
    • Подключение к YDB из функции Yandex Cloud Functions на Python
    • Подключение к базе данных YDB из функции Yandex Cloud Functions на Node.js
    • Конвертация видео в GIF на Python
    • Разработка навыка Алисы и сайта с авторизацией
  • Концепции
    • Обзор
    • Термины и определения
    • Соединение с БД и аутентификация
    • Модель данных и схема
    • Режимы работы Serverless и Dedicated
    • Транзакции
    • Вторичные индексы
    • Time to Live (TTL)
    • Скан запросы
    • Ограничения базы данных
    • Кластер YDB
      • Обзор
      • Общая схема YDB
      • Дисковая подсистема кластера
    • Квоты и лимиты
  • Пошаговые инструкции
    • Обзор
    • Переименование
    • Использование плана запроса и AST
    • Чтение и запись данных
    • Работа со вторичными индексами
  • Рекомендации
    • Обзор
    • Выбор первичного ключа для максимальной производительности
    • Вторичные индексы
    • Постраничный вывод
    • Загрузка больших объемов данных
    • Использование таймаутов
  • Управление базами данных
    • Обзор
    • Облачная консоль управления
      • Обзор
      • Создание, изменение, удаление баз данных
      • Таблицы и директории
      • Управление доступом
    • Интерфейс командной строки YC CLI
    • Резервное копирование и восстановление
    • Диагностика
      • Обзор
      • Системные таблицы
      • Мониторинг
  • Правила тарификации
    • Обзор
    • Бессерверный режим
      • Правила тарификации для бессерверного режима
      • Стоимость запроса для YQL
      • Стоимость запроса для Document API
      • Стоимость запроса для специальных API
    • Режим с выделенными инстансами
  • HTTP API, совместимый с Amazon DynamoDB
    • Все методы
    • Actions
      • BatchGetItem
      • BatchWriteItem
      • CreateTable
      • DeleteItem
      • DeleteTable
      • DescribeTable
      • DescribeTimeToLive
      • GetItem
      • ListTables
      • PutItem
      • Query
      • Scan
      • TransactGetItems
      • TransactWriteItems
      • UpdateItem
      • UpdateTimeToLive
    • Общие ошибки
  • YQL
    • Обзор
    • Типы данных
      • Обзор
      • Простые
      • Опциональные
      • Контейнеры
      • Специальные
      • Преобразования типов
      • Текстовое представление типов данных
      • JSON
    • Синтаксис
      • Обзор
      • Лексическая структура
      • Выражения
      • ACTION
      • ALTER TABLE
      • CREATE TABLE
      • DECLARE
      • DELETE
      • DISCARD
      • DROP TABLE
      • GROUP BY
      • FLATTEN
      • INSERT
      • INTO RESULT
      • JOIN
      • PRAGMA
      • REPLACE
      • SELECT
      • UPDATE
      • UPSERT
      • VALUES
      • WINDOW
      • Неподдерживаемые конструкции
    • Встроенные функции
      • Обзор
      • Базовые
      • Агрегатные
      • Оконные
      • Для работы со списками
      • Для работы со словарями
      • Для работы со структурами
      • Для работы с типами
      • Для работы с JSON
      • Библиотеки C++
        • Обзор
        • Hyperscan
        • Pcre
        • Pire
        • Re2
        • String
        • Unicode
        • DateTime
        • Url
        • Ip
        • Yson
        • Digest
        • Math
        • Histogram
    • Туториал YQL
      • Обзор
      • Создание таблицы
      • Добавление данных в таблицу
      • Выборка данных из всех колонок
      • Выборка данных из определенных колонок
      • Сортировка и фильтрация
      • Агрегирование данных
      • Дополнительные условия выборки
      • Объединение таблиц с помощью JOIN
      • Вставка и модификация данных с помощью REPLACE
      • Вставка и модификация данных с помощью UPSERT
      • Вставка данных с помощью INSERT
      • Обновление данных с помощью UPDATE
      • Удаление данных
      • Добавление и удаление колонок
      • Удаление таблицы
  • Работа с YDB CLI
    • Обзор
    • Установка
    • Структура команд YDB CLI
    • Сервисные команды
    • Соединение с БД и аутентификация
    • Глобальные параметры
    • Работа со схемой БД
      • Список объектов
      • Информация об объекте
      • Директории
      • Вторичные индексы
      • Переименование таблиц
    • Работа с данными
      • Выполнение запроса к данным
      • План исполнения запроса
      • Потоковое чтение таблицы
      • Скан запросы
    • Загрузка и выгрузка данных
      • Обзор
      • Файловая структура выгрузки
      • Выгрузка в файловую систему
      • Загрузка из файловой системы
      • Соединение и аутентификация с S3
      • Выгрузка в S3
      • Загрузка из S3
      • Импорт данных из файла в существующую таблицу
    • Управление профилями
      • Обзор
      • Создание профиля
      • Использование профиля в запросах
      • Получение информации о профиле
      • Удаление профиля
      • Активированный профиль
    • Информационные сервисы
      • Список эндпоинтов
      • Проверка аутентификации
    • Нагрузочное тестирование
      • Обзор
      • Stock нагрузка
  • Работа с YDB SDK
    • Обзор
    • Установка
    • Аутентификация
    • Тестовое приложение
      • Обзор
      • C++
      • C# (.NET)
      • Go
      • Java
      • Node.js
      • PHP
      • Python
      • Архив
        • Go v1
        • Go v2
    • Обработка ошибок в API
    • Рецепты кода
      • Обзор
      • Аутентификация
        • Обзор
        • С помощью токена
        • Анонимная
        • Файл сервисного аккаунта
        • Сервис метаданных
        • С помощью переменных окружения
        • С помощью логина и пароля
      • Балансировка
        • Обзор
        • Равномерный случайный выбор
        • Предпочитать ближайший дата-центр
        • Предпочитать зону доступности
      • Выполнение повторных запросов
      • Диагностика проблем
        • Обзор
        • Включить логирование
        • Подключить метрики в Prometheus
        • Подключить трассировку в Jaeger
      • Установить размер пула сессий
      • Вставка данных
      • Пакетная вставка данных
  • Управление кластером
    • Обзор
    • Развертывание
      • Обзор
      • Kubernetes
        • Обзор
        • Развертывание в Yandex Managed Service for Kubernetes
        • Развертывание в AWS Elastic Kubernetes Service
        • Эксплуатация
      • VM / Baremetal
      • Конфигурация
    • Обслуживание дисковой подсистемы кластера
      • Обзор
      • Способы предотвращения выхода за модель отказа
      • Балансировка нагрузки на диски
      • Способы освобождения места на физических устройствах
      • Расширение кластера
      • Добавление групп хранения
      • Безопасные рестарт и выключение узлов
      • Включение/выключение SelfHeal
      • Включение/выключение Scrubbing
      • Перевоз VDisk'ов
      • Изменение конфигураций через CMS
      • Изменение конфигурации акторсистемы
    • Встроенный UI
      • Обзор
      • YDB Monitoring
      • Hive web-viewer
      • Обзор соединений
      • Логи
      • Графики
    • Системные таблицы
  • Вопросы и ответы
    • Обзор
    • Общие вопросы
    • Ошибки
    • YQL
    • Serverless
    • Все вопросы на одной странице
  • Публичные материалы
  1. Пошаговые инструкции
  2. Переименование

Переименование таблицы

Статья создана
Yandex Cloud
  • Примеры использования
    • Переименовать таблицы
    • Переместить таблицу
    • Заменить таблицу
    • Ротировать таблицы вне пользовательского приложения

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

Операции выполняются изолированно, внешний процесс видит только два состояния таблицы: до и после выполнения операции. Это важно, например, при замене таблицы — данные заменяемой таблицы удаляются в той же транзакции, в которой заменяющая таблица переименовывается. Во время выполнения операции замены возможны ошибки запросов к заменяемой таблице с retryable-статусами.

Чтобы выполнить переименование нескольких таблиц, используйте соответствующие методы SDK или команду rename YDB CLI. Все действия, которые описаны в одной операции переименования, будут выполнены в одной транзакции.

Скорость выполнения переименования определяется типом дата-транзакций, которые выполняются в данный момент на таблице, и не зависит от количества данных в таблице.

Примеры использования

Примеры выполняются на базе данных со следующей схемой:

db ─┐ 
    ├─ cinema ───────────┐
    ├─ logs ─────────────┐
    |                    ├─ blank_logs
    |                    └─ current_logs
    ├─ new-project ──────┐
    |                    ├─ main_table
    |                    ├─ second_table
    |                    └─ third_table
    ├─ pre-prod-project ─┐
    |                    ├─ main_table
    |                    └─ other_table
    └─ prod-project ─────┐
                         ├─ main_table
                         └─ other_table

Переименовать таблицы

CLI
YQL

Чтобы переименовать таблицы main_table, second_table, third_table в episodes, seasons и series соответственно, выполните команды:

ydb tools rename \
  --item source=new-project/main_table,destination=new-project/episodes

ydb tools rename \
  --item source=new-project/second_table,destination=new-project/seasons

ydb tools rename \
  --item source=new-project/third_table,destination=new-project/series

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

ydb tools rename \
  --item source=new-project/main_table,destination=new-project/episodes \
  --item source=new-project/second_table,destination=new-project/seasons \
  --item source=new-project/third_table,destination=new-project/series

Все таблицы будут переименованы в одной транзакции. Внешний процесс увидит только два состояния: до и после переименования.

Чтобы переименовать таблицы main_table, second_table, third_table в episodes, seasons и series соответственно, выполните запрос:

ALTER TABLE `new-project/main_table` RENAME TO `new-project/episodes`;
ALTER TABLE `new-project/second_table` RENAME TO `new-project/seasons`;
ALTER TABLE `new-project/third_table` RENAME TO `new-project/series`;

Запрос будет выполнен в режиме автокоммита каждого утверждения — каждая таблица будет переименована в отдельной транзакции. С точки зрения внешнего процесса, таблицы будут переименованы последовательно одна за другой.

Чтобы переименовать несколько таблиц в одной транзакции, используйте способы вызова метода, которые обеспечивают транзакционное выполнение, например команду rename YDB CLI.

Переместить таблицу

CLI
YQL

Чтобы переименовать таблицы и переместить их в директорию cinema, выполните команды:

ydb tools rename \
  --item source=new-project/main_table,destination=cinema/episodes
                
ydb tools rename \
  --item source=new-project/second_table,destination=cinema/seasons
                
ydb tools rename \
  --item source=new-project/third_table,destination=cinema/series

Таблицы будут переименованы и перемещены последовательно в разных транзакциях. Чтобы выполнить переименование и перемещение нескольких таблиц в одной транзакции, выполните команду:

ydb tools rename \
  --item source=new-project/main_table,destination=cinema/episodes \
  --item source=new-project/second_table,destination=cinema/seasons \
  --item source=new-project/third_table,destination=cinema/series

Все таблицы будут переименованы и перемещены в одной транзакции. Внешний процесс увидит только два состояния: до и после переименования и перемещения всех таблиц.

Чтобы переименовать таблицы и переместить их в директорию cinema, выполните запрос:

ALTER TABLE `new-project/main_table` RENAME TO `cinema/episodes`;
ALTER TABLE `new-project/second_table` RENAME TO `cinema/seasons`;
ALTER TABLE `new-project/third_table` RENAME TO `cinema/series`;

Запрос будет выполнен в режиме автокоммита каждого утверждения — каждая таблица будет переименована и перемещена в отдельной транзакции. С точки зрения внешнего процесса, таблицы будут переименованы и перемещены последовательно одна за другой.

Чтобы переименовать и перенести несколько таблиц в одной транзакции, используйте способы вызова метода, которые обеспечивают транзакционное выполнение, например команду rename YDB CLI.

Заменить таблицу

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

Важно

При замене YDB не проверяет идентичность схем у заменяемой и заменяющей таблиц.

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

CLI
YQL

Чтобы заменить таблицу, выполните команду:

ydb tools rename \
  --item replace=True,Source=pre-prod-project/main_table,destination=prod-project/main_table

Для замены таблицы необходимо указать параметр replace=True.

Если нужно оставить заменяемую таблицу как резервную копию данных, выполните команду:

ydb tools rename \
  --item source=prod-project/main_table,destination=prod-project/main_table.backup \
  --item source=pre-prod-project/main_table,destination=prod-project/main_table 

Параметр replace=True не используется, потому что ни одна таблица не должна быть удалена. Операции выполняются в порядке указания аргументов --item в команде: сначала prod-project/main_table будет перемещена в prod-project/main_table.backup, затем pre-prod-project/main_table будет переименована в prod-project/main_table. Все операции будут выполнены в одной транзакции.

Чтобы заменить несколько таблиц, выполните команду:

ydb tools rename \
  --item source=prod-project/main_table,destination=prod-project/main_table.backup \
  --item source=pre-prod-project/main_table,destination=prod-project/main_table \
  --item source=prod-project/other_table,destination=prod-project/other_table.backup \
  --item source=pre-prod-project/other_table,destination=prod-project/other_table 

Чтобы заменить таблицу, выполните запрос:

DROP TABLE `prod-project/main_table`;
ALTER TABLE `pre-prod-project/main_table` RENAME TO `prod-project/main_table`;

Запрос будет выполнен в режиме автокоммита каждого утверждения — сначала удалятся заменяемая таблица, затем перемещается и переименовывается замещающая. С точки зрения внешнего процесса, таблица будет удалена, а затем появится вновь.

Чтобы заменить таблицу в одной транзакции, используйте способы вызова метода, которые обеспечивают транзакционное выполнение, например команду rename YDB CLI.

Ротировать таблицы вне пользовательского приложения

Пользовательское приложение сохраняет данные в таблицу logs/current_logs. Необходимо выполнить ротацию данных в этой таблице. Ротация должна быть реализована внешними по отношению к приложению средствами.

Перед выполнением ротации необходимо подготовить пустую таблицу logs/blank_logs со схемой, идентичной схеме таблицы logs/current_logs.

CLI

Чтобы ротировать данные, выполните команду:

ydb tools rename \
  --item source=logs/current_logs,destination=logs/old_logs \
  --item source=logs/blank_logs,destination=logs/current_logs 

Данные, которые до операции были доступны в таблице logs/current_logs, теперь находятся в logs/old_logs. Таблица logs/current_logs пуста потому, что по этому пути была перемещена таблица logs/blank. Чтобы повторить ротацию, необходимо создать заново таблицуlogs/blank.

Была ли статья полезна?

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Примеры использования
  • Переименовать таблицы
  • Переместить таблицу
  • Заменить таблицу
  • Ротировать таблицы вне пользовательского приложения