구문 분석/파쇄 거대한 복잡한 XML에서 SQL Server 2008 데이터베이스 (30+ 테이블)
-
18-09-2019 - |
문제
나는 이미 이것을 읽었다 : XML 데이터를 SQL Server 데이터베이스 열로 파쇄하는 가장 좋은 방법 그리고 SQL 2005 용 좋은 벌크 삽입 XML 파쇄 예제를 찾고 있습니다..
내가 게시하는 이유의 차이점은 Biztalk 2009와 SQL 2008을 사용하고 있다는 것입니다.
Biztalk를 사용하여 공급 업체로부터 거대한 XML 구조를 받고 있습니다. 클라이언트는 MS/SQL Server 2008 데이터베이스에서 XML 구조를 약 30 개의 테이블로 정규화했습니다.
아직 마법 솔루션이 있습니까?
나에게 이것들은 옵션입니다.
1) Biztalk SQL 어댑터는 간단한 플랫 데이터베이스에만 적합합니다 (많은 조인 및 일대일 관계가 아님).
2) WCF 프로그램 작성 a) LINQ를 사용하고 LINQ 객체를 노출하십시오.
3) Open/XML을 사용하는 복잡한 저장 Proc를 작성하십시오.
4) 데이터베이스를 SQL/XML 열에 임시로 저장 한 다음 다른 도구를 사용하여 데이터를 "파쇄하고 정규화"하십시오. SSI에 이것을 할 것이 있습니까?
5) 데이터를 XML 열에두고 XML 지수를 사용하고 정상화하지 마십시오. 견해에 못생긴 xquery/xpath 문장을 포함시킵니다. 응답 시간이나 쿼리가 적절한 지 확실하지 않습니다. Xqueries와보기를 생성하는 데 시간이 오래 걸릴 수 있습니다.
나는 #2 또는 #3에 테이블 당 최소 1 ~ 2 시간이 걸릴 것이라고 생각합니다. 따라서 30 개의 테이블이있는 경우 다양한 지루한 지루하고 오류가 발생하기 쉬운 작업의 30 개 (60 시간이 아닌 경우).
감사,
닐 월터스
업데이트 12/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를 사용하고 있다는 사실은 그 자체로는 XML을 파쇄하거나 처리하는 데 SSI와 같은 것을 사용하지 못하게합니다.
다음은 댓글을 달기에는 너무 길다.
XML 소스에 대해 알아야 할 문제가 있습니다. 다음과 같은 XML 구조를 고려하십시오.
<root>
<parent attr1="value1" attr2="value2">
<child attrc1="valuec1" attrc2="valuec2"/>
<child attrc1="valuec1" attrc2="valuec2"/>
</parent>
<parent> ... </parent>
...
</root>
XML 소스를 통해이를 처리 한 결과는 하나의 출력이 될 것입니다 : 하나는 ATT1과 ATTR2, 다른 하나는 ATTC1 및 ATTC2를 사용합니다. 출력은 모두 서로에 대해 비동기 적으로 처리됩니다. SSIS가 소개 할 인공 칼럼을 통해 부모와 어린이 행을 검열해야합니다. 각 부모는 ID 열이 있으며 각 어린이는 "외국 키"와 동일한 ID 값을 갖습니다. 이 둘과 일치하려면 데이터베이스에서 약간의 작업을 수행해야 할 수도 있습니다.