XMLSPLIT - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - XMLデータ型

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/kxe1590704060061.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1140
Product Category
Software
Teradata Vantage

XMLSPLITテーブル関数は、入力として1つのXML文書を受け取り、複数の行を返します。それぞれの行にはソース文書から分割された小さな文書が含まれています。XSLTベースのシュレッディングまたはスキーマ ベースのシュレッディングを、これらの小さいXML文書に適用できます。

この関数は、XML文書をメモリで処理する必要があり(XSLTベースのシュレッディング、XML問合わせ、XSLT処理など)、XMLMemoryLimit dbscontrolの設定による制約があるためメモリにロードするには大きすぎる場合に役立ちます。XMLSPLITでは、XML文書をCLOBデータ型のパラメータとして渡す必要があります。これは、XML型インスタンスを作成してさらに処理を行なう前に、XML文書を小さい文書に分割する前処理ステップとしてXMLSPLITを使用することが想定されるためです。XMLSPLITは、分割された文書をCLOBデータ型として返します。

XMLSPLIT関数は、ソースXML文書を複数の文書に分割し、文書階層の指定部分を保持します。この関数の意味はXML文書が大きいという事実に基づいています。文書が大きくなる理由は、一般的には何らかの繰り返し構造を含んでいることにあります。例えば、多数の"Customer"要素が顧客アーカイブXML文書に含まれるために、その文書が大きくなる場合が考えられます。

出力文書には、ソース文書と同じ、splitPathで指定される要素まで(その要素を含む)の基本的な文書構造が含まれています。splitPathにより識別される要素は一体として複製されます。その処理がsplitSizeを超えても、splitPathによって識別される要素のどこかの子孫で文書を分割することは行なわれません。

splitPathと一致する最後の要素の終わり以降に残された要素は、最後の文書として返されます。文書順で早い段階に現われる他のパスは、それらのパスがreplicationListパラメータによって指定される場合に限り、いずれも結果として得られるすべての文書に複製されます。

splitPathにより識別される要素のすべての親要素(とその属性)は、常に複製されます。さらに、分割された要素の先行要素(とその子孫)のどれを複製するかを選択できます。選択の際は、それらをreplicationListパラメータで指定します。このパラメータは、パスのカンマ区切りリスト、ワイルド カード文字「*」、またはNULLを取ります。ワイルド カード文字は、分割要素の親要素以外の、文書の早い段階で現われたすべての内容が、すべての出力文書に含まれることを示します。



以下のルールの例を、上記の構造を持つソース文書の分割に適用できます。
  • splitPathが/A/B3の場合(B3が複数回現われると仮定します)、要素Aとその属性が結果として得られるすべての文書に表示されます。また、replicationListパラメータを/A/B1として指定することにより、前の兄弟要素B1を複製することができます。
  • replicationListパラメータで"*"を指定することにより、文書順でB3(要素A、B1とそのすべての子孫、およびB2とそのすべての子孫を含む)の前に現われるすべての要素を、それぞれの出力文書に複製することができます。
  • 前の兄弟の特定の子孫へのパスを指定すると、それを複製することができます。上述の文書構造で、要素B1に子C1とC2があるとします。レプリケーション リストを/A/B1/C1として指定すると、要素C1を複製しC2を複製しないようにすることができます。このように識別される要素とそのすべての子孫が複製されます。

上図では、splitPathが/A/B2/Cとして識別される場合、それぞれの出力文書にパス/A/B2が現われ、それぞれの出力文書には、出力文書のサイズがsplitSizeの指定を満たすのに十分な数のC要素が含まれます。出力文書にはC要素の全数が含まれ、1つの文書でC要素のどこかの子孫で処理が停止することはなく、次の出力文書でも処理が続行します。

下図に、splitPathが/A/B2/Cの場合に結果として得られる文書を示します。



splitPathが/A/B2/CでreplicationListが/A/B3の場合、出力文書には次が含まれます。



splitPathが/A/B2/CでreplicationListが"/A/B1, /A/B3"の場合、出力文書には次が含まれます。