В лабораторной работе вы выполните миграцию таблиц между двумя источниками PostgreSQL с помощью Trino.
Постановка задачи
Создать таблицу-источник и целевую таблицу.
Перенести данные в целевую таблицу с помощью:
JDBC-клиента (DBeaver);
Python-скрипта.
Перед началом работы
-
Если вы уже зарегистрированы, войдите под своей учетной записью.
Создайте кластер Data Platform, в котором будет размещен инстанс.
Назовите кластер «dp-labs».
Скачайте и установите root-сертификат на устройство.
Установите JDBC-клиент DBeaver.
Все сущности должны располагаться в одной VPC и подсетях одного типа.
Подготовка инфраструктуры
Подготовьте базу данных и таблицы, которые будете переносить, а также каталоги и инстанс Trino.
Создайте Managed PostgreSQL®
Создайте две базы данных с названиями:
pg_1 — это исходная база данных, которая содержит таблицы для миграции;
pg_2 — это целевая база данных, куда нужно перенести таблицы из pg_1.
Сохраните пароль из карточки кластера в сервисе Secret Manager.
Создайте каталог Managed Trino
Перейдите в раздел Evolution и выберите сервис Managed Trino.
Откройте раздел Каталоги.
Нажмите Создать каталог.
Заполните поля следующими значениями:
Название:
pg_1 — для исходной базы данных pg_1;
pg_2 — для целевой базы данных pg_2.
Коннектор — PostgreSQL.
Хост — внутренний IP, указанный в карточке кластера Managed PostgreSQL®.
Порт — порт, указанный в карточке кластера Managed PostgreSQL®.
Название базы данных:
pg_1
pg_2
Логин — логин, указанный в карточке кластера Managed PostgreSQL®.
Пароль — выберите секрет с паролем кластера Managed PostgreSQL®.
Нажмите Создать.
Создайте инстанс Managed Trino
Перейдите в раздел Evolution и выберите сервис Managed Trino.
Откройте раздел Инстансы.
Нажмите Создать инстанс.
В блоке Общие параметры заполните поля:
Название — trino-instance-migration.
Кластер — db-labs.
Вычислительные ресурсы — vCPU 4, RAM 16.
Количество node — 3.
Нажмите Продолжить.
На шаге Каталоги выберите каталоги «pg_1» и «pg_2».
Нажмите Продолжить.
В блоке Сетевые настройки заполните поля:
Зона доступности — выберите зону доступности, для которой создан SNAT-шлюз.
Подсеть — выберите подсеть с DNS-сервером.
Подключить публичный хост — активируйте опцию.
Пользователь — задайте имя пользователя для доступа к Trino.
Пароль — создайте пароль в сервисе Secret Manager, нажав Создать секрет, и выберите его.
Нажмите Создать.
Создайте структуру данных
Выполните команды:
CREATE SCHEMA IF NOT EXISTS pg_1.lab_migration;CREATE TABLE IF NOT EXISTS pg_1.lab_migration.users (id_user INT, email VARCHAR(255));INSERT INTO pg_1.lab_migration.users values (1, 'one@example.com'), (2, 'two@example.com'), (3, 'three@example.com');
Миграция
Рассмотрим два способа миграции таблиц c помощью:
С помощью DBeaver
Чтобы подготовить данные, в DBeaver выполните SQL-запросы:
CREATE SCHEMA IF NOT EXISTS pg_1.lab_migration;CREATE TABLE IF NOT EXISTS pg_1.lab_migration.users (id_user INT, email VARCHAR(255));INSERT INTO pg_1.lab_migration.users values (1, 'xxx@example.com'), (2, 'yyy@example.com'), (3, 'zzz@example.com');Можете создать дополнительные таблицы с данными в схеме «lab_migration» в базе данных «pg_1».
Выполните:
CREATE TABLE pg_2.lab_migration.users ASSELECT * FROM pg_1.lab_migration.users;Автоматизируйте миграцию таблиц.
Чтобы сгенерировать SQL-запросы для каждой таблицы, выполните:
SELECT'CREATE TABLE pg_2.lab_migration.' || table_name ||' AS SELECT * FROM pg_1.lab_migration.' || table_name || ';'FROM pg_1.information_schema.tablesWHERE table_schema = 'lab_migration';Скопируйте полученные строки.
Выполните их по очереди.
С помощью скрипта
В командной строке выполните:
python3 -m venv venvsource venv/bin/activatepip install trinoСкопируйте скрипт, введите необходимые значения и сохраните файл с названием trino_pg_migration.py:
Скрипт PythonЗапустите скрипт:
python trino_pg_migration.py
Проверка результата
В DBeaver выполните следующие запросы:
Чтобы проверить, что таблицы созданы:
SHOW TABLES IN pg_2.lab_migration;Чтобы проверить количество строк в каждой таблице:
SELECT COUNT(*) FROM pg_2.lab_migration.users;SELECT COUNT(*) FROM pg_2.lab_migration.products;SELECT COUNT(*) FROM pg_2.lab_migration.orders;Чтобы проверить содержимое (первые 10 строк):
SELECT * FROM pg_2.lab_migration.users LIMIT 10;SELECT * FROM pg_2.lab_migration.products LIMIT 10;SELECT * FROM pg_2.lab_migration.orders LIMIT 10;
- Постановка задачи
- Перед началом работы
- Подготовка инфраструктуры
- Миграция
- Проверка результата