2015-05-07 4 views
3

У меня есть данные электронной почты в формате XML, и я пытаюсь загрузить это в несколько таблиц SAS. Структура XML не является плоской и имеет несколько уровней в иерархии. Из этого XML-файла я хочу создать несколько таблиц SAS (например, Sender, Recipients, Attachments, Email Body и Metadata ...). Очевидно, что для одного сообщения электронной почты будет один отправитель, одно сообщение электронной почты, но любое количество получателей и вложений. Для этого в настоящее время я использую файл XML Map для перевода данных в нужные мне таблицы.Чтение из XML в несколько таблиц SAS

Проблема заключается в том, что с помощью движка xmlv2 с файлом MAP кажется, что SAS читает XML-файл один раз для каждой таблицы, которую я хочу создать. Это создает проблему, так как это плохо масштабируется! Например, если у меня есть 200 ГБ XML-файлов и вы хотите создать 10 таблиц, я прочитаю 2TB данных для этого. Есть ли лучший способ обработки XML-файлов, так что мне нужно сделать только один проход файла, чтобы прочитать все данные в наборах данных SAS?

Заранее спасибо.

+0

Как вы используете движок xmlv2 с файлом карты? IE, так что у вас есть 'libname xmlv2 myxmlf" blah.xml ";', теперь, что вы делаете, чтобы создать свои десять файлов? – Joe

+0

Есть ли способ, которым вы можете предварительно обработать XML-файлы, чтобы объединить все их в один гигантский XML-файл. Таким образом, файл будет считываться только один раз за стол. Все еще не идеальный, но, возможно, работоспособный? –

+0

Я использовал для импорта 4GB XML, и это заняло очень много времени. Вы можете рассмотреть предварительные данные перед импортом в SAS. – grotos

ответ

0

Выделите каталог как место агрегатного файла и используйте шаг данных для доступа к файлам, в свою очередь, на одном шаге данных. Поиск в файлеvar в sas help для примеров того, как это сделать. Файл карты xml предоставит вам подробные сведения о xmlpath, необходимые для поиска содержимого в XML-файле, который вы можете прочитать непосредственно с кодом шага данных.

Альтернатива, предложенная в более раннем сообщении, также будет работать. Предварительно обработайте файлы n * xml в формате datastep, как указано выше, но один раз напишите выбранный контент заголовка (открывающие теги), затем содержимое данных из каждого xml-файла (отбрасывая содержимое заголовка для каждого последующего файла), затем пишите закрывающие теги один раз. Этот процесс очень быстрый. Затем ваш исходный файл xml-карты будет обрабатывать большой xml-файл один раз. Вы можете проверить этот подход довольно быстро, вручную отредактировав два xml-файла, чтобы свернуть их в один. Это быстро скажет вам, какой контент является общим, который вам нужен один раз

Смежные вопросы