Синхронизация данных с помощью Kettle (Часть 1)

задняя часть база данных SQL Excel
Синхронизация данных с помощью Kettle (Часть 1)

Уведомление об авторских правах: Эта статья является оригинальной статьей блоггера и не может быть воспроизведена без разрешения блоггера. Обратите внимание на общедоступный номерОбмен технологиями (ID: jishuhui_2015)Связаться с автором можно.

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

Сначала использовалось программное обеспечение для управления БД Navicat Premium, достаточно мощное для удовлетворения повседневных рабочих потребностей разработчиков, включая упомянутые выше потребности в синхронизации данных.

По мере совершенствования бизнеса компании выдвигаются более строгие требования к безопасности данных.

На самом деле не допускается синхронизация данных любой среды с производственной средой, то есть данные производственной среды неверны. Navicat Premium имеет функцию переноса данных, которая может передавать и перезаписывать одну базу данных в другую базу данных без каких-либо ограничений.

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

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

Если это только для выполнения функциональных требований синхронизации данных, будет немного сложно отказаться от концепции ETL. Учитывая, что в будущем возникнут требования к обработке данных, необходимо обязательно изучить ETL-инструмент (на момент написания этой статьи существовало функциональное требование для экспорта в Excel).

Теоретически ежедневные внутренние требования ETL могут быть выполнены с помощью «кода + сценария». Однако, по мнению автора, это бессмысленное повторение колес, занимающее много времени и труда, и если вы сможете освоить ETL-инструмент, это, несомненно, значительно сократит объем работы.

Конечно, ETL-инструментов на рынке немало, а отечественные и иностранные компании имеют готовые продукты, но по принципу open source, бесплатные, мощные и простые в использовании, в конце концов, толькоkettle.

Перед использованием чайника вам все равно необходимо иметь некоторые базовые знания. Грубо говоря, если его использует PM, который не разбирается в технологиях, он будет заканчиваться на «mmp». Не обязательно всесторонне изучать чайник, но вы должны знать, какие у него функции и какую работу он вообще может выполнять, чтобы в дальнейшем использовать его в полной мере. Рекомендуемое чтениеэта статья. Процесс ETL представляет собой рабочий процесс, в котором необходимо реализовать следующий процесс синхронизации данных:

数据同步流程

Клиент заполняет информацию о настройках двух баз данных, такую ​​как: хост, пользователь, пароль, база данных и т. д. Эти данные о настройках будут существовать в чайнике в виде переменных.

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

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

Между Заданием и Преобразованием в этом проекте существует вложенная связь.Основываясь на принципе «проектирование сверху вниз, реализация снизу вверх», мы сначала настраиваем несколько подпроцессов, а затем выполняем связанные работы конкатенации.

Создайте новое преобразование и сохраните его как "Отправить данные.ktr".

Подготовьте два подключения к базе данных, главное дерево объектов -> щелкните правой кнопкой мыши подключение к базе данных -> новое.

DB-FROM

DB-TO

Как видите, переменные, связанные с БД, зарезервированы в виде ${variable}.

Специальное примечание:В этой форме также заполняется пароль, и чайник тоже может распознать, что это переменная.

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

共享DB连接

Создайте новую трансформацию и сохраните ее как «синхронизация данных.ktr".

提交数据流程
T1: очистить таблицу. Основной объект -> Сценарий -> Выполнить сценарий SQL. Имя очищаемой таблицы заменяется переменной, и устанавливается флажок «Замена переменной».
清空表
T2: Получить данные таблицы. Основные объекты -> Входные данные -> Входные данные таблицы. Получите все данные в таблице, выберите источник данных, замените имя таблицы переменной и установите флажок «Заменить замену оператора SQL».
获取表数据
T3: Отправить данные. Основной объект -> Ввод -> Вывод таблицы. Выберите подключение к базе данных, используйте переменную вместо целевой таблицы, а количество отправленных записей относится к объему данных одной фиксации, в зависимости от фактического объема данных, значение по умолчанию равно 1000, и рекомендуется установить флажок «Использовать пакетную вставку». ".
提交数据

Поскольку сначала необходимо убедиться, что операция очистки таблицы завершена, создается блок. То есть, если шаг Т1: очистка таблицы не завершен, шаг Т3: отправка данных выполняться не будет.

Основной объект -> Процесс -> Блокировать данные, пока все шаги не будут выполнены.

阻塞数据
Нажмите и удерживайте клавишу Shift еще раз, чтобы соединить различные шаги, и преобразование представленных данных завершено.

Далее следует Преобразование для получения имени таблицы:

获取表名
Создайте новую трансформацию и сохраните ее как «Получить полную шкалу name.ktr".

T1: Получите имя таблицы, Основной объект -> Ввод -> Получите имя таблицы, выберите подключение к базе данных и установите флажок «Включить таблицу». Поле имени можно настроить, и здесь задается имя_таблицы.

获取表名

T2: выберите Поле, Основной объект -> Преобразовать -> Выбор поля. В основном для указания обязательных полей.Очевидно, нам нужно поле table_name, и мы также можем настроить имя.Здесь оно переименовано в tablename.

选择字段
T3: Копировать записи в результаты, Основной объект->Задание->Копировать записи в результаты. В основном в качестве исходных данных для следующего шага.
复制结果

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

Далее следует промежуточный процесс преобразования, который заключается в извлечении имени таблицы и установке его в указанную переменную, чтобы можно было получить ${TABLENAME} при отправке данных.

Создайте новое преобразование и сохраните его как "получить переменную.ktr".

T1: Получите значение переменной имени таблицы, основной объект->задание->получите записи из результата, укажите, что имя поля, которое необходимо получить, — это имя таблицы, которое является именем таблицы, переименованным в указанное выше имя таблицы.

获取表名变量值
T2: Установите значение переменной, основной объект-> задание-> установите переменную, установите переменную TABLENAME и выберите область действия переменной «Действительно в корневом задании».
设置变量值
На этом все Преобразования завершены, и Преобразование нужно подключить через Задание.

Создайте новое задание и сохраните его как "Получить переменные - синхронизация данных.kjb"соответственно добавить к объекту ядра СТАРТ и два преобразования, причем два преобразования соответствуют подготовленному выше"получить переменную.ktr"и"синхронизация данных.ktr” для подключения.

获取变量-数据同步

Далее последняя работа, создайте новую работу, сохраните ее и назовите "entrypoint.kjb". Добавьте СТАРТ, переход, задание и успешный конечный узел.

entrypoint
Результат, возвращаемый при получении полного имени датчика, представляет собой список, поэтому "Получить переменную — синхронизация данных"Задание должно выполняться циклически. При настройке задания отметьте"выполнить каждую строку ввода".
执行每一个输入行

К этому моменту весь проект синхронизации данных построен, и можно запускать entrypoint.kjb. При запуске необходимо установить соответствующие параметры базы данных.

执行作业

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

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

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

关注我们