Analizar/triturar XML enorme y complejo en la base de datos SQL Server 2008 (más de 30 tablas)

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

Pregunta

Ya leí esto: La mejor manera de triturar datos XML en columnas de bases de datos de SQL Server y Buscando un buen ejemplo de destrucción XML de inserción masiva para SQL 2005.

La diferencia de por qué estoy publicando es que estoy usando BizTalk 2009 y SQL 2008.

Recibo una enorme estructura XML de un proveedor que utiliza BizTalk.El cliente ha normalizado la estructura XML en unas 30 tablas en una base de datos MS/SQL Server 2008.

¿Existe ya alguna solución mágica?

Me parece que estas son las opciones:

1) El adaptador BizTalk SQL solo es bueno para bases de datos planas simples (no muchas uniones ni relaciones de uno a muchos).

2) Escriba un programa WCF a) Use Linq y exponga el objeto LINQ b) Use el análisis XML DOM o SAX tradicional y construya ADO.net para almacenar en la base de datos

3) Escriba un proceso almacenado complejo que utilice Open/XML.

4) Almacene la base de datos temporalmente en una columna SQL/XML, luego use alguna otra herramienta para "triturar y normalizar" los datos.¿Hay algo en SSIS que pueda hacer esto?

5) Deje los datos en una columna XML, utilice índices XML y nunca los normalice.Incruste las feas declaraciones XQuery/Xpath en una vista.No estoy seguro si el tiempo de respuesta o las consultas serían adecuados.Generar las xqueries y las vistas puede llevar tanto tiempo como realizar uno de los otros pasos anteriores.

Supongo que los números 2 o 3 tomarían al menos una o dos horas por mesa, por lo tanto, si tenemos 30 mesas, al menos 30 (si no 60 horas) de varios trabajos tediosos, aburridos y propensos a errores.

Gracias,

Neal Walters

Actualización 23/12:Algunos datos de muestra:

 <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>

Donde ve "MainStreetValuation" también podría haber un par de otros tipos complejos, como "HighValueValuation", donde toda la estructura es diferente para casas que tienen cosas sofisticadas.

¿Fue útil?

Solución

Nota rápida:El hecho de que esté utilizando BizTalk 2009 no le impide, por sí solo, utilizar también algo como SSIS para triturar y procesar el XML.


Lo siguiente es demasiado largo para un comentario:

Hay un problema que se debe tener en cuenta con el origen XML.Considere una estructura XML como:

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

El resultado de procesar esto a través de la fuente XML serán dos resultados:uno con attr1 y attr2, y otro con attrc1 y attrc2.Todas las salidas se procesan de forma asíncrona entre sí.Deberá agrupar las filas principal y secundaria mediante una columna artificial que introducirá SSIS.Cada padre tendrá una columna de identificación y cada hijo tendrá el mismo valor de identificación que una "clave externa".Es posible que necesites trabajar un poco en tu base de datos para hacer coincidir los dos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top