Как вы сравниваете значения в базе данных и плоский файл в Java? - PullRequest
0 голосов
/ 06 июля 2011

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

Примером может быть, если в базе данных существуют записи, которых не существует в плоском файле на всю строкубудет напечатан во 2-ом плоском файле (в плоском файле никогда не будет записи, которой нет в базе данных).Другой пример: если строки похожи, но в поле есть разница, то запись базы данных будет напечатана в плоском файле.

Лучший способ сделать это - создать 2 двухстороннихразмерные массивы, содержащие данные из плоского файла и базы данных, если первичный ключ не существует в массиве плоских файлов, распечатывает результаты из оператора выбора.Если первичный ключ существует, но другие поля не существуют, распечатайте результаты из оператора выбора.Это лучшее, что я могу придумать, но это кажется неэффективным.

Есть ли лучший способ сделать это?Я использую Java для этого.

Ответы [ 4 ]

1 голос
/ 06 июля 2011

Поскольку вы уже сравниваете с базой данных, почему бы просто не сделать все это в SQL? Загрузите содержимое файла в базу данных, найдите два дополнения (A минус B и B минус A) и экспортируйте в другой файл. Что-то вроде:

SPOOL diff.txt
SELECT * FROM flatfile_table
MINUS
SELECT * FROM db_table
UNION
SELECT * FROM db_table
MINUS
SELECT * FROM flatfile_table
ORDER BY SortCriteria;
SPOOL OFF
1 голос
/ 06 июля 2011

в Oracle вы можете создать внешнюю таблицу из файла учебник для внешних таблиц

, затем создать простой выбор, который создаст разницу между вашими данными, а затем просто экспортировать

0 голосов
/ 06 июля 2011

Я бы сделал что-то вроде этого:

  • Загрузите результаты из базы данных в структуру карты, где ключом является столбец первичного ключа, а значением является сама строка
  • Выполните итерацию коллекции плоских файлов, выполните поиск в структуре карты на основе первичного ключа и добавьте различия в список, который будет вашим выводом.
  • запишите в выходные данные различия, которые вы ранее сохранили в списке.
0 голосов
/ 06 июля 2011

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

Убедитесь, что оба файла упорядочены по одному и тому же полю, например, первичный ключ ваших записей - это может быть достигнуто с помощью awk, например, в случае такого входного файла (ключ сортировки - последнее число):

val1|2
val7|1

Вы можете сортировать записи по sort -n --field-separator=\| -k 2 1 (см. Справочную страницу sort для объяснения задействованных опций).

Затем используйте утилиту diff (или аналогичную, если вы не используете Unix / Linux) для создания файла с другими записями.

...