![]() |
![]() |
![]() |
|||||
![]() |
Как я реплицировал данные с помощью postgres_fdw и dbt |
||||||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2023-08-01 13:47 Так вышло, что по работе я столкнулся с необходимостью репликации некоторого (достаточно большого) количества таблиц из различных баз К сожалению, от этого варианта пришлось отказаться — большое количество таблиц и операций вставки/обновления/удаления строк в каждой из баз данных недопустимо увеличивало бы размер WAL-журналов. Некоторые инструменты репликации, как, например, meltano, поддерживают, помимо log-based репликации, инкрементную репликацию на основе ключей и полную репликацию. Инкрементная репликация обычно использует значение определенного столбца, например, метку времени или увеличивающееся целое число. Да и в принципе наличие поля lastmodified позволяет “в лоб” реплицировать данные за определенный промежуток времени. Однако, я столкнулся с тем, что не во всех нужных мне таблицах было такое поле, а в некоторых данные могли обновляться “задним” числом. Так я пришел к мысли использовать postgres_fdw для связи с данными на других серверах Подготовим данные Предлагаю воспользоваться этим репозиторием. Он содержит csv-файл с небольшим набором данных транзакций. В принципе, для демонстрации этого достаточно. Отредактируем файл docker-compose.yaml
Запускаем наши контейнеры: Теперь у нас есть два работающих экземпляра Далее нам необходимо подключиться к базе данных контейнера Мой хост — 172.25.0.3. Настройка postgres_fdw Далее подключаемся к Теперь для обращения к удаленным данным нам достаточно выполнить операцию: Настройка dbt Для начала установим необходимые зависимости: DBT — это мощный инструмент для выполнения ELT процессов. Он позволяет разрабатывать, тестировать и запускать SQL скрипты, а также создавать модули и переиспользовать код, что помогает сократить время разработки и поддержки процессов ELT. Детальное описание Мы можем инициализировать проект Это создаст необходимую структуру папок, но для нашего игрушечного примера она немного избыточна, поэтому создадим директорию c такой структурой: В директории transactions.sql
Здесь мы сообщаем И добавляем простой запрос SELECT для репликации наших исходных данных. Каждый проект dbt_project.yml
Также нам потребуется файл profiles.yml, который будет содержать сведения о подключении к нашей платформе данных. profiles.yml
Мы готовы запустить наш маленький
![]() Мы реплицировали таблицу из сторонней базы данных Но я столкнулся с еще одной проблемой — поскольку я реплицировал данные с реплик, у меня было ограничение подключения в 30 секунд и некоторые таблицы не успевали материализоваться. Поэтому я решил перейти на материализованные представления. Идем в репозиторий и копируем папку transactions_view.sql
Добавляем файл packages.yml
А также создадим каталог *.sql
Проверим, что наша структура проекта соответствует следующей: Запустим нашу модель, предварительно установив пакет
![]() Отлично, наше представление материализовалось! Повторный запуск команды будет аналогичен выполнению команды ![]() Теперь мы можем интегрировать наш Решение не идеальное, но для меня пока работает) Буду рад советам) Источник: habr.com Комментарии: |
||||||