Инструмент автономной синхронизации DataX-Ali с открытым исходным кодом реализует полную синхронизацию и инкрементную синхронизацию от Sqlserver до Mysql в Windows.

Сцены

Kettle — набор инструментов ETL с открытым исходным кодом — реализует синхронизацию данных из SqlServer в таблицы Mysql и развертывает его на серверах Windows:

Kettle — набор инструментов ETL с открытым исходным кодом — реализует синхронизацию данных из SqlServer в таблицу Mysql и развертывает ее в Windows

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

ДанныеX

DataX — это автономный инструмент синхронизации для разнородных источников данных, предназначенный для реализации реляционных баз данных (MySQL, Oracle и т. д.),

Стабильная и эффективная функция синхронизации данных между HDFS, Hive, ODPS, HBase, FTP и другими разнородными источниками данных.

GitHub — alibaba/DataX: DataX — это версия интеграции данных Alibaba Cloud DataWorks с открытым исходным кодом.

 

Концепция дизайна

Чтобы решить проблему синхронизации разнородных источников данных, DataX превращает сложный канал синхронизации сетки в канал передачи данных типа «звезда».

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

Просто подключите этот источник данных к DataX, чтобы обеспечить бесшовную синхронизацию данных с существующими источниками данных.

Текущее состояние

DataX широко используется в Alibaba Group, занимается автономной синхронизацией всех больших данных и стабильно работает уже 6 лет.

В настоящее время синхронная многоканальная операция 8 Вт выполняется каждый день, а ежедневный объем передачи данных превышает 300 ТБ.

Источники данных, поддерживаемые DataX

GitHub — alibaba/DataX: DataX — это версия интеграции данных Alibaba Cloud DataWorks с открытым исходным кодом.

Ниже записан конкретный пример — синхронизация данных из Sqlserver в Mysql, и структура таблицы такая же.

Примечание:

Блог:
властный мошеннический темперамент blog_CSDN Blog-C#, Architecture Road, Blogger in SpringBoot

выполнить

1. Установка DataX в Windows

См. краткий стартовый документ на официальном сайте:

DataX/userGuid.md на мастере · alibaba/DataX · GitHub

Установите и настройте необходимые зависимости среды.

 

Нет необходимости компилировать его самостоятельно, поэтому настраиваются только переменные среды jdk1.8 и Python3.

В соответствии с адресом загрузки документа загрузите набор инструментов DataX.

https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202210/datax.tar.gz

После загрузки разархивируйте его.

2. Запустите и протестируйте преобразование данных stream2stream

После распаковки перейдите в каталог bin и создайте новый файл конфигурации задания файл stream2stream.json.

Измените содержимое json на

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "streamreader",
          "parameter": {
            "sliceRecordCount": 10,
            "column": [
              {
                "type": "long",
                "value": "10"
              },
              {
                "type": "string",
                "value": "hello,你好,世界-DataX"
              }
            ]
          }
        },
        "writer": {
          "name": "streamwriter",
          "parameter": {
            "encoding": "UTF-8",
            "print": true
          }
        }
      }
    ],
    "setting": {
      "speed": {
        "channel": 5
       }
    }
  }
}

Это пример json-файла официального шаблона, который используется для самостоятельной проверки того, успешно ли настроен и запущен DataX.

Затем откройте cmd в каталоге bin и выполните

python datax.py  ./stream2stream.json

Ожидание завершения выполнения без сообщения об ошибке, но обнаружены искаженные китайские символы

 

Китайские искаженные символы в поле команды DataX необходимо установить формат кодировки, сначала введите его в cmd

chcp 65001

Затем выполните приведенную выше команду

Китайский вывод во время выполнения больше не искажается

 

Результат выполнения больше не искажается

 

3. Получите шаблон json, преобразованный из разных источников данных.

Выше приведено преобразование источника данных из потока в поток, как получить шаблон json из других источников данных.

DataX предоставляет инструкции по получению шаблонов json, преобразованных из разных источников данных.

Посмотреть шаблон конфигурации можно командой:

python datax.py -r {ВАШ_ЧИТАТЕЛЬ} -w {ВАШ_ПИСАТЕЛЬ}

Как получить имя источника данных, например, прочитать из sqlserver и записать в mysql, после чего получить команду шаблона json:

python datax.py -r sqlserverreader -w mysqlwriter

В это время будет возвращен шаблон json из sqlserver в mysql.

Это потому, что именно так каталог называется в его исходном коде.

 

Говорят, что вы можете напрямую щелкнуть внутри каталога doc, чтобы просмотреть содержимое файла json примера.

 

И параметры каждого элемента конфигурации также имеют соответствующие описания

 

описание параметра sqlserverreader

DataX/sqlserverreader.md на мастере · alibaba/DataX · GitHub

описание параметра mysqlwriter

DataX/mysqlwriter.md на мастере · alibaba/DataX · GitHub

Итак, вот новый полностью обновленный файл json sqlserver2mysqlALL.json.

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "sqlserverreader",
                    "parameter": {
                        "connection": [
                            {
                                "jdbcUrl": [
								"jdbc:sqlserver://localhost:1433;DatabaseName=数据库名"
								],
                                "table": [
								"表名"
								]
                            }
                        ],
                        "password": "改成自己的密码",
                        "username": "用户名",
						"column": [
						"checkid",
						"cardID",
						"hphm",
						"startTime",
						"endTime",
						"linenumber",
						"cwgt",
						"cwgtUL",
						"cwgtJudge",
						"cwkc",
						"cwkcResult",
						"cwkcUL",
						"cwkcJudge",
						"cwkk",
						"cwkkResult",
						"cwkkUL",
						"cwkkJudge",
						"cwkg",
						"cwkgResult",
						"cwkgUL",
						"cwkgJudge",
						"wkccJudge",
						]
                    }
                },
                "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                        "column": [
					    "checkid",
						"cardID",
						"hphm",
						"startTime",
						"endTime",
						"linenumber",
						"cwgt",
						"cwgtUL",
						"cwgtJudge",
						"cwkc",
						"cwkcResult",
						"cwkcUL",
						"cwkcJudge",
						"cwkk",
						"cwkkResult",
						"cwkkUL",
						"cwkkJudge",
						"cwkg",
						"cwkgResult",
						"cwkgUL",
						"cwkgJudge",
						"wkccJudge",
						],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://127.0.0.1:3306/数据库名?useUnicode=true&characterEncoding=gbk",
                                "table": [
								"表名"
								]
                            }
                        ],
                        "password": "密码",
                        "preSql": [
						"delete from vehicleresult"
						],
                        "session": [],
                        "username": "用户名",
                        "writeMode": "insert"
                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": "5"
            }
        }
    }
}

Обратите внимание, что процесс здесь заключается в чтении данных указанного столбца из sqlserver, а столбец здесь — настроенный столбец.

Тогда при записи в mysql нужно заранее выполнить оператор удаления, который настраивается в preSql

удалить из автомобилярезультат

VehicleResult — это имя таблицы. Тогда режим записи является встроенным

Затем выполните команду вышеуказанного шаблона json

python datax.py  ./sqlserver2mysqlALL.json

Полное обновление может быть достигнуто.

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

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

Приведенные выше результаты полного обновления

 

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

Создайте новый bat-файл и измените содержимое на

#设置编码
chcp 65001
@echo off
title "同步数据"
set INTERVAL=15
timeout %INTERVAL%
 
:Again

python datax.py  ./sqlserver2mysqlALL.json

echo %date% %time:~0,8%
 
timeout %INTERVAL%
 
goto Again

Приведенный выше контент представляет выполнение каждые 15 секунд.

python datax.py  ./sqlserver2mysqlALL.json

Поместите этот bat в каталог bin на том же уровне, что и файл json, и дважды щелкните, чтобы выполнить его.

5. Выше приведено полное обновление, как добиться добавочного обновления.

Обратите внимание, что инкрементальное обновление здесь имеет условные ограничения, во-первых, данные здесь не будут удаляться, а будут только добавляться и обновляться, а обновление будет обновлять только данные текущего дня.

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

Запрос и замена текущих данных.

Кроме того, необходимо обеспечить наличие поля даты и времени, поэтому при чтении и записи данных можно использовать условие where для запроса текущих данных.

Кроме того, первичный ключ здесь не является автоинкрементными данными int, в противном случае он также может инкрементно обновляться в соответствии с автоинкрементным идентификатором первичного ключа.

sqlserver здесь предоставляется сторонней системой и не может быть изменен на требуемый тип

 

Измените приведенный выше sqlserverreader, чтобы добавить условие where для запроса данных дня.

Запрос данных дня в Sqlserver

where datediff(day,startTime,getdate())=0

Где startTime — поле времени.

Запросите данные дня в Mysql

WHERE DATE(startTime) = CURDATE()

Поэтому измените вышеуказанный файл json как

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "sqlserverreader",
                    "parameter": {
                        "connection": [
                            {
                                "jdbcUrl": [
								"jdbc:sqlserver://localhost:1433;DatabaseName=数据库名"
								],
                                "table": [
								"表名"
								]
                            }
                        ],
                        "password": "改成自己的密码",
                        "username": "用户名",
						"where": "datediff(day,startTime,getdate())=0",
						"column": [
						"checkid",
						"cardID",
						"hphm",
						"startTime",
						"endTime",
						"linenumber",
						"cwgt",
						"cwgtUL",
						"cwgtJudge",
						"cwkc",
						"cwkcResult",
						"cwkcUL",
						"cwkcJudge",
						"cwkk",
						"cwkkResult",
						"cwkkUL",
						"cwkkJudge",
						"cwkg",
						"cwkgResult",
						"cwkgUL",
						"cwkgJudge",
						"wkccJudge",
						]
                    }
                },
                "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                        "column": [
					    "checkid",
						"cardID",
						"hphm",
						"startTime",
						"endTime",
						"linenumber",
						"cwgt",
						"cwgtUL",
						"cwgtJudge",
						"cwkc",
						"cwkcResult",
						"cwkcUL",
						"cwkcJudge",
						"cwkk",
						"cwkkResult",
						"cwkkUL",
						"cwkkJudge",
						"cwkg",
						"cwkgResult",
						"cwkgUL",
						"cwkgJudge",
						"wkccJudge",
						],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://127.0.0.1:3306/数据库名?useUnicode=true&characterEncoding=gbk",
                                "table": [
								"表名"
								]
                            }
                        ],
                        "password": "密码",
                        "preSql": [
						"delete from 表名 WHERE DATE(startTime) = CURDATE();"
						],
                        "session": [],
                        "username": "root",
                        "writeMode": "insert"
                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": "5"
            }
        }
    }
}

В настоящее время вы можете использовать скрипт bat для его регулярного выполнения и самостоятельно изменять 15 вышеуказанных параметров в нужное время.

Затем добавьте еще один фрагмент сегодняшних данных, чтобы проверить эффект синхронизации.

Назовите инкрементально обновленный json выше как sqlserver2mysqlAdd.json.

 

Supongo que te gusta

Origin blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130330353
Recomendado
Clasificación