Если вы загружаете данные в базу данных, и у вас есть поля, которые имеют отношение много-к-одному с другими полями, то вам нужно убедиться, что структура вашей базы данных находится на пустом месте.Т.е. одна таблица для книги и одна таблица для даты модификации.В противном случае это будет выглядеть так, как будто есть две книги, хотя на самом деле есть одна с двумя датами изменения.
Однако, если вы загружаете данные в базу данных, почему вы сначала конвертируете их в плоский файл?Вы сказали, что хотите избежать двух проходов один разбор.Похоже, у вас будет один проход для синтаксического анализа XML и вывода в виде плоского файла, а другой - для анализа плоского файла и его ввода в базу данных.Почему бы просто не проанализировать XMl и поместить данные непосредственно в базу данных?
Есть причины, по которым были изобретены форматы, такие как XML, и одна из них заключается в инкапсуляции сложных отношений данных в текстовых документах.Преобразовав в «плоский файл», вы потеряете эту сложность.Если вы собираетесь импортировать данные в среду, которая может справиться с этой сложностью и сохранить эти отношения ... почему бы не сохранить ее?
Есть ли в вашей базе данных API или она может импортировать только плоские файлы?
--- РЕДАКТИРОВАТЬ ---
Проще ответить как часть ответа, чем как серия комментариев.
Во-первых, спасибо за разъяснения.Во-вторых, нет, я не могу предоставить пример кода.В основном, потому что то, что вы хотите, звучит очень специфично.В-третьих, я думаю, у вас есть два варианта:
1) У вас уже загружен код C, уже написанный для анализа XML.Вы должны учитывать стоимость выбрасывания всего этого и повторного написания его на Perl и поддержки этого, в сравнении с затратами на его улучшение для импорта данных непосредственно в вашу базу данных Teradata и затратами на его последующее обслуживание.
2Для Perl существует множество парсеров XML, и, по моему опыту, они значительно упрощают обход XML-дерева / структуры данных, чем в C. Я не фанат Perl, но я написал код для работы с готовыми разобранными XML-деревьями.в Си, и я никогда не мог ненавидеть это.Напротив, делать это в Perl проще и, возможно, даже быстрее.
Существует огромное количество модулей Perl для анализа XML.Я предлагаю вам поискать в Интернете некоторые обзоры, чтобы решить, какой из них проще или лучше всего использовать.
Существует модуль Perl под названием Teradata :: SQL, который должен позволить вам импортировать данные в ваш файл.База данных Teradata.Могут быть и другие модули, которые проще / проще / лучше в использовании.У меня нет опыта ни в одном из них, поэтому я не могу дать рекомендации.Ищите http://www.cpan.org любых модулей, которые могут быть полезны.
И наконец, я НАСТОЯТЕЛЬНО рекомендую убедиться, что вы потратили некоторое время, чтобы убедиться, что структура вашей базы данных Teradata соответствует входящим в нее данным,Как я уже говорил выше, между датами изменения и книгами у вас явно есть взаимосвязь «многие к одному», поэтому вам нужно иметь таблицу дат изменения и таблицу для книг и корректировать отношения «один к одному» в дизайне таблицы.Поместить одну запись в строку, в результате чего для одной книги будет несколько строк с изменением только даты изменения, очень неправильно.Могут быть и другие отношения один к одному, например, автор.Представьте себе книгу Б, написанную авторами А1 и А2 с датами модификации М1 и М2.Если вы используете описанный выше подход, предусматривающий использование одной строки для каждой комбинации, у вас будет 4 записи для одной и той же книги, и похоже, что у вас есть 2 книги с одинаковым названием, но написанные разными авторами.
Потратьте некоторое время, чтобы убедиться, что вы понимаете структуру данных в файлах XML.Это должно быть четко определено DTD.