3

私はすでにこれを読みました: The Best Way to shred XML data into SQL Server database columns and Looking for a good Bulk Insert XML Shredding example for SQL 2005 .

投稿する理由の違いは、BizTalk 2009 と SQL 2008 を使用していることです。

BizTalk を使用しているベンダーから巨大な XML 構造を受け取っています。クライアントは、XML 構造を MS/SQL Server 2008 データベース上の約 30 のテーブルに正規化しました。

魔法の解決策はまだありますか?

私にはこれらがオプションのようです:

1) BizTalk SQL アダプターは単純なフラット データベースにのみ適しています (多くの結合や 1 対多の関係ではありません)。

2) WCF プログラムを作成する a) LINQ を使用して LINQ オブジェクトを公開する b) 従来の XML DOM または SAX 解析を使用して ADO.NET を構築し、データベースに格納する

3) Open/XML を使用する複雑なストアド プロシージャを記述します。

4) データベースを一時的に SQL/XML 列に保存し、他のツールを使用してデータを「細断処理および正規化」します。これを行うSSISには何かありますか?

5) データを XML 列に残し、XML インデックスを使用し、決して正規化しない。醜い XQuery/Xpath ステートメントをビューに埋め込みます。応答時間またはクエリが適切かどうかは不明です。上記の他の手順のいずれかを実行する場合と同じくらい、xquery とビューの生成に時間がかかる場合があります。

#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」など、他のいくつかの複雑なタイプである可能性もあります。これは、高級なものがある家では構造全体が異なります。

4

1 に答える 1

2

簡単な注意: 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 ソースを介してこれを処理した結果は、2 つの出力になります。1 つは attr1 と attr2 を使用し、もう 1 つは attr1 と attrc2 を使用します。出力はすべて、相互に非同期で処理されます。SSIS が導入する人工列を使用して、親行と子行を関連付ける必要があります。各親には id 列があり、各子には「外部キー」と同じ id 値があります。2 つを一致させるには、データベースで少し作業を行う必要がある場合があります。

于 2009-12-09T21:17:56.517 に答える