о DataX
,Вы можете перейти на официальный сайт для ознакомления:introduction
В нем упомянуто DataX
Его обзор, конструкция структуры, основная архитектура, система плагинов и основные преимущества разработаны Alibaba и широко используются в Alibaba. Его производительность и стабильность были тщательно проверены. Благодаря конструкции рамы
Нам легко добиться вторичного развития,Конечно главноеда Для новых плагиновизразвивать。DataX
Реализовано множество плагинов
тип | источник данных | Читатель (читать) | Писатель (писать) | документ |
---|---|---|---|---|
Реляционная база данных РСУБД | MySQL | √ | √ | читать, писать |
Oracle | √ | √ | читать, писать | |
OceanBase | √ | √ | читать, писать | |
SQLServer | √ | √ | читать, писать | |
PostgreSQL | √ | √ | читать, писать | |
DRDS | √ | √ | читать, писать | |
Kingbase | √ | √ | читать, писать | |
Универсальная СУБД (поддерживает все реляционные базы данных) | √ | √ | читать, писать | |
Облачное хранилище данных Alibaba Хранение данных | ODPS | √ | √ | читать, писать |
ADB | √ | Писать | ||
ADS | √ | Писать | ||
OSS | √ | √ | читать, писать | |
OCS | √ | Писать | ||
Hologres | √ | Писать | ||
AnalyticDB For PostgreSQL | √ | Писать | ||
Промежуточное ПО Alibaba Cloud | datahub | √ | √ | читать, писать |
SLS | √ | √ | читать, писать | |
графовая база данных | Облако ГББ Alibaba | √ | √ | читать, писать |
Neo4j | √ | Писать | ||
Хранение данных NoSQL | OTS | √ | √ | читать, писать |
Hbase0.94 | √ | √ | читать, писать | |
Hbase1.1 | √ | √ | читать, писать | |
Phoenix4.x | √ | √ | читать, писать | |
Phoenix5.x | √ | √ | читать, писать | |
MongoDB | √ | √ | читать, писать | |
Cassandra | √ | √ | читать, писать | |
Хранилище данных хранилища данных | StarRocks | √ | √ | читать, писать |
ApacheDoris | √ | Писать | ||
ClickHouse | √ | √ | читать, писать | |
Databend | √ | Писать | ||
Hive | √ | √ | читать, писать | |
kudu | √ | Писать | ||
selectdb | √ | Писать | ||
Неструктурированное хранилище данных | TxtFile | √ | √ | читать, писать |
FTP | √ | √ | читать, писать | |
HDFS | √ | √ | читать, писать | |
Elasticsearch | √ | Писать | ||
база данных временных рядов | OpenTSDB | √ | читать | |
TSDB | √ | √ | читать, писать | |
TDengine | √ | √ | читать, писать |
Включая большую часть источников данные, мы можем просто использовать их напрямую, если это такой же источник, как указано выше; данные не включены в то, что вам нужно данных, вы также можете реализовать плагин самостоятельно, см. Руководство по разработке плагина DataX Вот и все
Если вы просто используете DataX
, затем скачайте DataX набор инструментов Вот и все, после распаковки структура каталогов следующая
Я не буду описывать функции каждой папки. Вы можете просто зайти на официальный сайт и прочитать документ; bin
в каталоге datax.py
запускать DataX
。
существующий MySQL
база данных qsl_datax
,на нем стоит стол qsl_datax_source
CREATE TABLE `qsl_datax_source` (
`id` bigint(20) NOT NULL COMMENT «Автоинкремент первичного ключа»,
`username` varchar(255) NOT NULL COMMENT 'Имя',
`password` varchar(255) NOT NULL COMMENT 'пароль',
`birth_day` date NOT NULL COMMENT 'Дата рождения',
`remark` text,
PRIMARY KEY (`id`)
);
insert into `qsl_datax_source`(`id`, `username`, `password`, `birth_day`, `remark`) values
(1, «Чжан Сан», 'z123456', '1991-01-01', «Чжан Сан»)
(2, «Джон Доу», 'l123456', '1992-01-01', «Джон Доу»)
(3,'Ван Ву', 'w123456', '1993-01-01','Ван Ву'),
(4, 'Асако', 'm123456', '1994-01-01','Асако');
Данные в таблице необходимо синхронизировать с MySQL
база данных qsl_datax_sync
стол qsl_datax_target
CREATE TABLE `qsl_datax_target` (
`id` bigint(20) NOT NULL COMMENT «Автоинкремент первичного ключа»,
`username` varchar(255) NOT NULL COMMENT 'Имя',
`pw` varchar(255) NOT NULL COMMENT 'пароль',
`birth_day` date NOT NULL COMMENT 'Дата рождения',
`note` text,
PRIMARY KEY (`id`)
);
Как этого добиться?
Настройте job.json
Потому что это из MySQL
Синхронизировать с MySQL
, поэтому наш Reader
да MySQL
,Writer
такжеда MySQL
, тогда будет понятно, куда копировать файл конфигурации. от MysqlReader копировать Reader
конфигурация, из MysqlWriter копировать Writer
Конфигурация,Затем измените значение соответствующего параметра Конфигурация на свое собственное.,mysql2Mysql.json
Даже если настройка завершена
{
"job": {
"setting": {
"speed": {
"channel": 5
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "123456",
"column": [
"id",
"username",
"password",
"birth_day",
"remark"
],
"connection": [
{
"jdbcUrl": [
"jdbc:mysql://192.168.2.118:3307/qsl_datax?useUnicode=true&characterEncoding=utf-8"
],
"table": [
"qsl_datax_source"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "root",
"password": "123456",
"column": [
"id",
"username",
"pw",
"birth_day",
"note"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://192.168.2.118:3306/qsl_datax_sync?useUnicode=true&characterEncoding=utf-8",
"table": [
"qsl_datax_target"
]
}
]
}
}
}
]
}
}
mysql2Mysql.json
Вы можете хранить его где угодно. Рекомендуется положить его. DataX
из job
каталог для удобного управления. Конфигурация несложная и я думаю, что каждый сможет ее понять.
запускать DataX
Синхронизировать
приезжать DataX
из bin
Откройте окно командной строки запустить в каталоге, а затем выполните следующую команду
python datax.py ../job/mysql2Mysql.json
Когда мы смотрим на следующий вывод слова приезжать, это означает такой Первый шаг удался
Нужно объяснение изда
DataX не поддерживает шаги таблицы,Поддерживает толькоданныетакой же Шаг,тактакой При продолжении вам необходимо убедиться, что целевая таблица сохранена.
обратитесь киз Сразуда job.json
середина reader
и writer
Узел под из column
,Конфигурациянуждатьсятакой жестепиз коллекции имен столбцов; это может быть Конфигурация таблицы из имени столбца, Конфигурация констант, выражений или Конфигурация. *
, но настройка не рекомендуется *
,Потому что нам не удобно просматривать взаимосвязь между столбцами изкартографирования.
Reader
и Writer
между соответствии с заказом картографирование, не в соответствии Имени поля с предшествует картографированиеиз, перед которым стоит из mysql2Mysql.json
Например, взаимосвязь поля изкартографирования выглядит следующим образом:
Эквивалент дав соответствии смножествоизиндексированиекартографированиеиз,reader_column[n]
картографирование writer_column[n]
,Тогда возникает вопрос,Что произойдет, если количество столбцов не соответствует?
Reader
Соотношение столбцов Writer
много
удалять Writer
из Список pw
,Затем выполнитетакой же Step Mission, ты найдешь такой же Шаг аномальный, выводит следующую информацию
В столбце «Информация о конфигурации» ошибка. Поскольку ваша задача Конфигурация середина, sourceчитать принимает количество полей: 4. и Количество полей для ввода: 5 Не равны. Пожалуйста, проверьте вашу конфигурацию и внесите изменения.
Reader
Соотношение столбцов Writer
немного
такой же Такая встречатакой же Шаг аномальный, сообщение с подсказкой похоже на следующее
В столбце «Информация о конфигурации» ошибка. Поскольку ваша задача Конфигурация середина, sourceчитать принимает количество полей: 4. и Количество полей для ввода: 5 Не равны. Пожалуйста, проверьте вашу конфигурацию и внесите изменения.
Что произойдет, если количество столбцов одинаковое, но порядок столбцов неправильный?
Writer
серединаиз username
и birth_day
Поменяй эту позицию, а затем выполнить такую же Шаг,найдеттакой же Шаганомальный,аномальныйинформация Похоже на следующее Date ошибка преобразования типа
Writer
из username
и pw
осуществлятьтакой же Step Mission, ты найдешь такой Тот же шаг не показался аномальным, но вы взглянули на целевой источник данныхизданные
Видно, что он грязный, это считается таким же Шаг успеха и датой Шаг не удался?
Пример с грязными данными легко увидеть. Если есть два очень похожих столбца, ждать нас будет непросто. bug
Поездка по устранению неполадок
существовать Reader
Указывает откуда читанные,существовать Writer
Указывает, куда идти Писатьданные;Reader
и Writer
Все поддерживается Настроить несколько таблиц, но эти таблицы должны быть гарантированно датой или один schema
структура
Лично я не очень рекомендую job
Настроить несколько table
,И даодин job
один table
,еслинуждатьсятакой же Шаг много table
,Что Сразу Настроить несколько job
Хорошо
Эта конфигурация предназначена только для Reader
Reader
При выполнении извлечения данных, если вы укажете splitPk
,Так DataX
будет нажимать splitPk
Конфигурация поля для сегментирования данных, запуск параллельных задач для данныхтакой такой же шаг к улучшению же ступенчатая эффективность
Потом проблема возникает снова, разделить Онинемного фильма? Я дал всем Подвести Итог Хорошо
splitPk
,ноодин table
Переписка один task
splitPk
,table
если бы только 1 , затем делится на job.setting.speed.channel * reader.parameter.splitFactor
кусок,за ломтик Переписка один task
splitFactor
Без Конфигурации его значение по умолчанию — да. 5
splitPk
,и table
много Оставаться 1 , то для каждого table
разделен на job.setting.speed.channel
кусок,за ломтик Переписка один task
Не рекомендуется всем живущим. job
середина Настроить несколько таблиц, поэтому полезно понимать эту ситуацию
Жаль, изда, сейчас splitPk
Поддерживается только сегментация пластиковых данных, в противном случае будет сообщено об ошибке.
мы правы mysql2Mysql.json
Продолжать splitPk
Преобразуйте и настройте следующим образом 2 Предмет, другие не двигаются
При выполнении такой же пошаговой задачи вы можете увидеть следующий журнал прибытия.
смотри внимательно allQuerySql
,4 полоска SQL
представлять 4 Шардинг, я думаю, вы все это понимаете, но да where id IS NULL
этотполоска SQL
Что значит да? На самом деле, если мы внимательно подумаем об этом, мы поймем, что причина, по которой мы думаем, where id IS NULL
Нет необходимости сохранять существование по причине, которую мы знаем id
да первичный ключ, но DataX
Знаешь, оно не знает, поэтому ему нужно where id IS NULL
гарантироватьданныене пропустить。Но опять же,данныеколичествонемногоизкогда,Нефрагментация более эффективна, чем фрагментация.,Это возвращение к старому клише, проблеме перемещения.
Обязательно ли многопоточность более эффективна, чем однопоточность?
Также только для Reader
такой же SQL
серединаиз WHERE
один Образец,да отфильтровать полоски кусочков,Reader
в соответствии с column
、table
、where
Сращивание SQL
,тогда используй это Сращиваниехорошийиз SQL
Выполните извлечение данных. Перед демонстрацией примера не забываем mysql2Mysql.json
Восстановите его первоначальный вид, а затем добавьте его. where
полоскакуски
{
"job": {
"setting": {
"speed": {
"channel": 3
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "123456",
"column": [
"id",
"username",
"password",
"birth_day",
"remark"
],
"connection": [
{
"jdbcUrl": [
"jdbc:mysql://192.168.2.118:3307/qsl_datax?useUnicode=true&characterEncoding=utf-8"
],
"table": [
"qsl_datax_source"
]
}
],
"where": "id < 3"
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "root",
"password": "123456",
"column": [
"id",
"username",
"pw",
"birth_day",
"note"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://192.168.2.118:3306/qsl_datax_sync?useUnicode=true&characterEncoding=utf-8",
"table": [
"qsl_datax_target"
]
}
]
}
}
}
]
}
}
Выполните такой же шаг программы, и в журнале существования серединаприезжать вы увидите следующую информацию:
Если плюс splitPk
, ты думаешь приехать DataX
из Вы занимаетесь логикой? Позвольте мне показать вам лог.
Вы понимаете этот журнал?
Если не настроено where
или where
из значения Конфигурация пуста, то она эквивалентна полной сумме такой тот же шаг, если это нормально Конфигурация; where
эквивалентно приращению такой тот же шаг, и это приращение такое Тот же шаг реализовать реальный проект «середина» с помощью сравнения многих из них. Как только приращение задействовано, нам не нужно передавать значение столбца приращения в значение в форме переменной, но DataX
Эта функция только что реализована, и ее конфигурация аналогична следующей:
"where": "id > $startId"
Передайте значение переменной через команду запускать, как показано ниже.
python datax.py ../job/mysql2Mysql.json -p"-DstartId=1"
Следующий журнал появляется в такой же пошаговой задаче, что указывает на то, что переменная из значения передается нормально.
В сочетании с платформой планирования приращение времени такое Достигнуто всего за один шаг
Если вам интересно, можете зайти и посмотреть datax-web
Только для Reader
table
добавлять where
способный Конфигурацияизфильтрполоскакускивозвращатьсяда Относительно ограничено,join
Я тоже не могу быть удовлетворен, так что querySql
В нужное времяирожденный。querySql
Разрешить пользователям настраивать фильтры SQL
Когда пользователь настраивает
querySql
час,Reader
Просто игнорироватьtable
、column
、where
полоскакускииз Конфигурация,querySql
приоритет выше, чемtable
、column
、where
Параметрыtable
иquerySql
Толькоспособный Конфигурацияодин,Нетспособныйтакой жечас Конфигурация
querySql
такой же Образец Поддержка переменных,Похоже на следующее
{
"job": {
"setting": {
"speed": {
"channel": 3
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "123456",
"splitPk": "id"
"splitFactor": 2
"connection": [
{
"querySql": ["select id,username,password,birth_day, 'remark' AS remark from qsl_datax_source where id > $startId"]
"jdbcUrl": [
"jdbc:mysql://192.168.2.118:3307/qsl_datax?useUnicode=true&characterEncoding=utf-8"
],
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "root",
"password": "123456",
"column": [
"id",
"username",
"pw",
"birth_day",
"note"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://192.168.2.118:3306/qsl_datax_sync?useUnicode=true&characterEncoding=utf-8",
"table": [
"qsl_datax_target"
]
}
]
}
}
}
]
}
}
такой же журнал шагов середина отобразит следующую информацию
Вы можете посмотреть приезжать, если Конфигурация querySql
,Так splitPk
Конфигурация больше не вступит в силу.
Reader
, это правда, что да Reader
Конфигурация гораздо сложнее много, так как Writer
Конфигурация Хорошо,Я верю, что вы все можете понять,такжегород Конфигурация,я не буду тебя пилитьcolumn
Не рекомендуется Конфигурация *
,Рекомендуемые имена столбцов,Может более интуитивно реагировать на картографирование отношений.table
режим, одиночный job
Рекомендуется только с одним table
,Если датакой же Шаг много table
, рекомендовать Настроить несколько job
splitPk
Поддерживает только table
модель,Реализация сегментированного одновременного получения данных,Повышение эффективности запросов,Но это не даабсолютиз,Небольшой объем данных в каждом случае,Возможно, одна задача более эффективнаwhere
Поддерживает только table
режим добавления фильтрующих элементов полоски запроса в запрос, поддержку переменных и возможность достижения инкрементального такого же ШагquerySql
модель Вниз,table
модель Нетспособный Конфигурация,нетноаномальный,column
、where
、splitPk
Несмотря на то Конфигурация Понятнотакже Нетрожденный效;querySql
Возможна пользовательская настройка SQL
,Очень гибкий,join
Просто используйте запрос querySql
осознать