Анализ/измельчение огромного сложного XML в базу данных SQL Server 2008 (более 30 таблиц)

StackOverflow https://stackoverflow.com/questions/1876925

Вопрос

Я это уже читал: Лучший способ разделить XML-данные на столбцы базы данных SQL Server и Ищем хороший пример массовой вставки XML-измельчения для SQL 2005..

Разница в том, почему я пишу, заключается в том, что я использую BizTalk 2009 и SQL 2008.

Я получаю огромную структуру XML от поставщика, использующего BizTalk.Клиент нормализовал структуру XML примерно до 30 таблиц в базе данных MS/SQL Server 2008.

Есть ли еще какое-нибудь волшебное решение?

Мне кажется, вот такие варианты:

1) Адаптер BizTalk SQL подходит только для простых плоских баз данных (не так много соединений и связей «один-ко-многим»).

2) Напишите программу WCF a) Используйте LINQ и выставьте объект LINQ B) Используйте традиционные XML DOM или SAX SARSING и Build ADO.NET для хранения в базе данных

3) Напишите сложную хранимую процедуру, использующую Open/XML.

4) Временно сохраните базу данных в столбце SQL/XML, а затем используйте другой инструмент для «уничтожения и нормализации» данных.Есть ли что-нибудь в SSIS, что могло бы это сделать?

5) Оставляйте данные в столбце XML, используйте индексы XML и никогда не нормализуйте их.Встраивайте уродливые операторы XQuery/Xpath в представление.Не уверен, что время ответа или запросы будут адекватными.Создание x-запросов и представлений может занять столько же времени, сколько и выполнение одного из других шагов, описанных выше.

Я предполагаю, что #2 или #3 займут как минимум один-два часа на каждый стол, то есть, если у нас 30 столов, то минимум 30 (если не 60 часов) различной утомительной, скучной и подверженной ошибкам работы.

Спасибо,

Нил Уолтерс

Обновление от 23 декабря:Некоторые примерные данные:

 <ns0:ValAgg xmlns:va="http://msbinfo.com/expresslync/rct/valuation" xmlns:ns0="http://TFBIC.RCT.BizTalk.Orchestrations.ValAgg">
- <MainStreetValuation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://msbinfo.com/expresslync/rct/valuation">
<ValuationIdentifier>
  <RecordId>1928876</RecordId> 
  <PolicyNumber>ESTIMATE-1928876</PolicyNumber> 
  <VersionId>6773220</VersionId> 
  </ValuationIdentifier>
  <RecordType>EST</RecordType> 
  <PolicyStatus>Complete</PolicyStatus> 
  <DataSource>WEB</DataSource> 
   <bunch more here/> 
<valuationAggregateFlat xmlns="http://tempuri.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <policyNumber>ESTIMATE-1928876</policyNumber> 
  <recordId>1928876</recordId> 
  <versionId>6773220</versionId> 
  <updateTimeStamp>2009-12-14T14:50:30.743</updateTimeStamp> 
  <replacementCost>166129</replacementCost> 
  <yearBuilt>1999</yearBuilt> 
  <totalLivingAreaSqFt>2000</totalLivingAreaSqFt> 
  <primaryRCTRoofTypeCode>15012</primaryRCTRoofTypeCode> 
  <TOPSRoofType>COPR</TOPSRoofType> 
  <StdFireRoofType>COPR</StdFireRoofType> 
  <primaryRTCConstructionTypeCode>10016</primaryRTCConstructionTypeCode> 
  <constructionType>BV</constructionType> 
  <hailProofIndicator>false</hailProofIndicator> 
  <anyWoodRoofIndicator>false</anyWoodRoofIndicator> 
  <allMetalRoofIndicator>true</allMetalRoofIndicator> 
  </valuationAggregateFlat>
</ns0:ValAgg>

Там, где вы видите «MainStreetValuation», также может быть несколько других сложных типов, например «HighValueValuation», где вся структура отличается для домов, в которых есть необычные вещи.

Это было полезно?

Решение

Краткое примечание:Тот факт, что вы используете BizTalk 2009, сам по себе не мешает вам использовать что-то вроде SSIS для уничтожения и другой обработки XML.


Следующее слишком длинно для комментария:

Существует проблема, о которой следует знать, связанная с источником XML.Рассмотрим структуру XML, например:

<root>
    <parent attr1="value1" attr2="value2">
        <child attrc1="valuec1" attrc2="valuec2"/>
        <child attrc1="valuec1" attrc2="valuec2"/>
    </parent>
    <parent> ... </parent>
    ...
</root>

Результатом обработки через источник XML будут два вывода:один с attr1 и attr2, а другой с attrc1 и attrc2.Все выходные данные обрабатываются асинхронно по отношению друг к другу.Вам нужно будет согласовать родительские и дочерние строки с помощью искусственного столбца, который представит SSIS.У каждого родителя будет столбец идентификатора, а у каждого дочернего элемента будет то же значение идентификатора, что и у «внешнего ключа».Возможно, вам придется немного поработать с базой данных, чтобы сопоставить эти два значения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top