Как перенести данные из одной таблицы в другую таблицу

#mysql #jpa

#mysql #jpa

Вопрос:

У меня есть таблица, скажем, Table1 в mysql. У нас есть приложение, которое хранит данные в Table1, миллионы новых записей сохраняются ежедневно. У нас есть требование извлечь данные из этой таблицы, преобразовать их, а затем загрузить в новую таблицу, скажем, Table2 (своего рода процесс ETL), который должен выполняться в реальном времени с интервалом в несколько секунд. Как я могу выполнить это эффективно и без копирования повторяющихся записей из таблицы1.

Я думал о введении нового поля в Table1, скажем, Extracted, чтобы отслеживать извлечение. Итак, если определенная строка уже была извлечена, извлеченное поле будет иметь значение Y, указывающее на извлечение. Если нет, то извлеченное поле будет иметь значение N, что означает, что эту строку еще нужно извлечь. Означает, что задание ETL должно обновить это поле, извлеченное в Table1 после извлечения. Мне интересно, будет ли эффективно обновлять записи в такой огромной таблице, где ежедневно сохраняются миллионы новых данных?? Пожалуйста, предложите!!

Спасибо, ребята!!

Ответ №1:

Если вам нужно синхронизировать данные Table2 (и слегка изменять) с данными в Table1 , у вас есть несколько вариантов на уровне MySQL:

  1. Триггеры — создание после ВСТАВКИ, ОБНОВЛЕНИЯ, УДАЛЕНИЯ триггера, который Table2 немедленно передает данные и выполняет преобразование за вас.
  2. Представления — если данные доступны только для Table2 чтения, создайте представление, в котором определение выбора выполняет требуемое преобразование.

Преимущество обоих подходов заключается в том, что Table2 они всегда актуальны Table1 и никаких дополнительных полей не требуется.

Комментарии:

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

2. хорошо, тогда триггеры могут быть вашим вариантом — dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html … в принципе, вы можете выполнять любые операции с данными, и хорошо, что они также ограничены областью транзакции (поэтому, если ваша операция с таблицей 1 по какой-то причине завершается неудачей, она также не выполняется с таблицей 2)

3. перейдем по предоставленной вами ссылке, спасибо за помощь michal.jakubeczy!!

Ответ №2:

используйте это, чтобы игнорировать повторяющуюся запись

 INSERT IGNORE INTO Table2 (field1,field2) VALUES (x,y);
  

или используйте это для обновления записи, если в таблице есть дублирующаяся запись

 INSERT INTO Table2 (field1,field2) VALUES (x,y) ON DUPLICATE KEY UPDATE primarykey=primarykeyvalues;