XML機能強化 (1.02MB)

DB2 V9.7新機能ワークショップ
<第1.00版 2009年 7月>
XML機能強化
本書に含まれている情報は、正式なIBMのテストを受けていません。また、明記にしろ、暗黙的にしろ、なんらの保証もなしに配布されるものです。
この情報の使用またはこれらの技術の実施は、いずれも、使用先の責任において行われるべきものであり、それらを評価し、実際に使用する環境に統合する
使用先の判断に依存しています。それぞれの項目は、ある特定の状態において正確であることがIBMによって調べられていますが、他のところで同じまたは同
様の結果が得られる保証はありません。これらの技術を自身の環境に適用することを試みる使用先は、自己の責任において行う必要があります。
© Copyright IBM Japan Systems Engineering Co., Ltd. 2009
内容
• DB2 pureXML機能概要
• XMLのウェアハウス機能強化
•
•
•
•
DPF
MDC
パーティション表
XDA圧縮
• その他の機能拡張
•
•
•
•
•
2
オンライン索引再編成/索引作成
UDF
Global Temporary Table
複数文書のdecomposition
SQL/XQuery間の述部プッシュダウン照会最適化
© 2009 ISE Corporation
DB2 pureXML機能概要
pureXML機能概要
DB2
3
© 2009 ISE Corporation
DB2 pureXMLの歩み
V9.7
V9.7
XMLウェアハウスへ
XMLウェアハウスへ
V9.5
DPF
DPF
MDC
MDC
V9.1
Inline格納
パーティション表
パーティション表
XDA圧縮
XDA圧縮
pureXMLサポート
部分更新
オンライン索引再編成/索引作成
オンライン索引再編成/索引作成
XSLT
UDF
UDF
Global
GlobalTemporary
TemporaryTable
Table
pureXML機能強化
XML基本機能
XML列/索引
XQuery
スキーマエボリューション
Replication
Load
複数文書のdecompositoin
複数文書のdecompositoin
parse/validationの詳細エラー
parse/validationの詳細エラー
各種ユーティリティ
4
© 2009 ISE Corporation
DB2におけるXMLデータの格納
• DB2のpureXML機能では、XMLデータを保持するための「XMLデータ型」を提供する
• XMLデータ型はリレーショナル表の中に定義し、レコードの中の1カラムとして取り扱う
• XMLデータは分解(Parse)されDOMに似た階層型のフォーマット(XDM)で格納される
•
照会時にはParseしない
• XML格納方法は2通り - inline格納
inline格納/XDA(XML
格納/XDA(XML Data Area)格納
Area)格納
insert into dept values (1,……, ’<dept><emp>夏目漱石</emp></dept>’)
dept表
表の論理構造
inline格納
格納する
格納する表
する表の定義
deptID
…
deptdoc
1
…
<dept> …
create table dept (deptID int,…,
deptdoc xml inline length 10000 )
<emp>夏目漱石</emp>
</dept>
…
リレーショナル
deptID
…
…
XML
deptdoc
1
inline格納時のdept表の物理構造
5
XDA格納
格納する
格納する表
する表の定義
create table dept
(deptID int,…, deptdoc xml)
…
LOBと類似だが
bufferpoolを使用
リレーショナル
deptID
XML
XDA(XML Data Area)
deptdoc
XML記述子
記述子
regions
index
XMLデータ
データ
XDA格納時のdept表の物理構造
© 2009 ISE Corporation
XMLカラムの使用法
V9.1 XMLサポート
サポートは
データベースのみ
サポートはunicodeデータベース
データベースのみ
V9.5から
からunicode以外
以外の
も可能だが
列内
から
以外のDBも
可能だが、
だが、XML列内
容はUTF-8で
で格納される
格納される
• データベースの
データベースの作成
create database XMLTEST using codeset utf-8 territory jp;
• XMLカラム
カラムを
カラムを持つ表の作成
create table dept(deptID int, deptdoc xml);
• データの
データの操作
通常の
通常
のSQLで
で操作可能
insert into dept values (1, ?);
select deptID, deptdoc from dept;
delete from dept where deptID=1;
update dept set deptdoc = ?
XML列内の部分変更については、Update文とXQuery transform式を組み合わせて実行する
• XMLアクセス
アクセス
• SQL/XML: ANSI/ISO SQL標準の拡張
SQLにXML処理関数を埋め込む
SQLからXQueryの実行可能
• XQuery: W3C(World Wide Web Consortium勧告)
XQueryからSQLの呼び出し可能
XMLを変更するtransform式をサポート
6
© 2009 ISE Corporation
XML索引
• XMLカラム
カラムに
カラムに対してユーザー
してユーザーが
ユーザーが索引を
索引を作成
•
索引対象は、要素、属性
•
XML索引は、CREATE INDEXステートメント中xmlpattern(XPath)を記述して指定
•
XMLのデータ型はSQLデータ型にマップされる。
CREATE INDEX empindex ON company(docs)
GENERATE KEY USING XMLPATTERN '/company/emp/@id' AS SQL DOUBLE
•
COMPANY表
COMPANY表
1row
1row
7
XML索引を使って検索を実行
• ANDing/ORing
COMPANYDOC (XMLデータタイプ列)
<company name="Company1">
<emp id="31201" salary="60000" gender="Female">
<name><first>Laura </first><last>Brown</last></name>
<dept id="M25">Finance</dept>
</emp>
</company>
<company name="Company2">
<emp id="31664" salary="60000" gender="Male">
<name><first>Chris</first><last>Murphy</last></name>
<dept id="M55">Marketing</dept>
</emp>
<emp id="42366" salary="50000" gender="Female">
<name><first>Nicole</first><last>Murphy</last></name>
略
EMPINDEX索引
EMPINDEX索引
COMPANYDOC
(DOUBLE)
31201
31664
42366
DOUBLE型の索引が作成される
© 2009 ISE Corporation
システム作成のXML索引
•
XML索引
XML索引の
索引の種別
•
Regions Index
•
•
•
XML列を含む表を作成したときに、表に対して1つ自動的に作成される
DB2が内部的に使用する索引。XMLインスタンスがどのページに格納されているかを管理
する。
Paths Index
•
• XML列を含む表を作成したときに、XML列ごとに1つ自動的に作成される
• DB2が内部的に使用する索引。
• 各XML列に属するすべてのXMLインスタンスで、ユニークなパスを保存する。
XML Index
•
•
•
ユーザーがXML列に対して作成する索引
従来の索引と同様、表スペース内にページがとられる
一つのXML列に対して複数の索引を作成可能
CREATE TABLE t1 (docID int, XMLDoc1 xml, XMLDoc2 xml);
XML Regions
Index
8
XML Column
Path Index on
XMLDoc1
XML Column
Path Index on
XMLDoc2
© 2009 ISE Corporation
Logical Index、Physical Index
• XML列
列に対して作成
して作成される
作成されるINDEX
される
select substr(indname,1,20) as indname,IID,substr(TABNAME,1,10) as TABNAME, INDEXTYPE
from syscat.INDEXES where TABNAME='COMPANY‘
INDNAME
IID
TABNAME
INDEXTYPE
-------------------- ------ ---------- --------SQL060518113414530
1 COMPANY
XRGN
←Region Index
SQL060518113414950
2 COMPANY
XPTH
←Path Index
EMPINDEX
3 COMPANY
XVIL
←XML Logical Index
SQL060518113548400
4 COMPANY
XVIP
←XML Physical Index
Table作成時に、DB2が自動
的に内部的に作成する索引
ユーザーがXML Indexを作成を
すると、それはLogical Indexとな
り、内部的にPhysical Indexが自
動的に作成される
カタログ情報
カタログ情報
SYSCAT.INDEXES
SYSSTAT.INDEXES
LOGICAL INDEX
PHYSICAL INDEX
REGION INDEX
PATH INDEX
PHYSICAL INDEX
REGION INDEX
PATH INDEX
9
SYSCAT.XMLPATTERNS
LOGICAL INDEX
© 2009 ISE Corporation
ブランク・
ブランク・ページ
10
© 2009 ISE Corporation
DB2 pureXML機能概要
pureXML機能概要
DB2
11
© 2009 ISE Corporation
pureXML in DB2 V9.7
DPF
DB2 XML Support
MDC
2008年
2008年
9月,
東京,
東京,
2008年
2008
DB2年
9月, 大
阪,
Webs
phere
XML
XML
データ
データ
2008年
2008年
2008年
2008年 8月, 東
9月,
京,
2008年
2008年
東京,
東京, DB2
8月, 大
2008年
2008
DB2年
9月, 大 阪,
阪, Webs
Websp phere
here
ウェアハウス
ウェアハウス
文書系XMLデータ
データの
文書系
データの
パーティション表
パーティション表
J
a
n
F
e
b
M
ar
管理/加工
管理 加工/検索
加工 検索
A
pr
大量のXMLデータ
文書サイズが大きいXMLデータ
圧縮
•マニュアル
•報告書/申請書
•条例/省令
•カルテ
12
など
© 2009 ISE Corporation
XML表の作成 – DPFサポート
•• DPF環境
環境でも
列
環境
でも
作成
DPF環境
環境でも
でもXML列
列を
を含
含む
む表
表の
の作成が
作成が
が可能
可能
環境でもXML列
でも
作成が
•• DPF環境の既存の表にALTER
DPF環境の既存の表にALTERTABLEでXML列の追加が可能
TABLEでXML列の追加が可能
•• どのパーティションからでもXSRオブジェクト(XMLスキーマなど)の登録/
どのパーティションからでもXSRオブジェクト(XMLスキーマなど)の登録/
検索が可能
検索が可能
•• SQL/XML,
SQL/XML,XQueryのパラレル実行可能
XQueryのパラレル実行可能
•• パラレルのLOADが可能
パラレルのLOADが可能
• 制約
CREATE TABLE table1 (
col1 int,
col2 xml,
DISTRIBUTE BY HASH(col1))
• XML列をdistribution keyにすることはできない
• distribution keyを持つXML表に対しuniqueなXML索引を持てない
• V9.1/V9.5のXMLフォーマットを持つ表はDPF環境に分散できない
=> 表の再作成またはADMIN_MOVE_TABLEによる移行が必要
13
© 2009 ISE Corporation
XML表の作成 – MDCサポート
•• XML列
列
表
作成
XML列
列を
を含
含む
むMDC表
MDC表
表の
の作成が
作成が
が可能
可能
作成が
•• MDC表にALTER
MDC表にALTERTABLEでXML列の追加が可能
TABLEでXML列の追加が可能
•• MDCブロック索引と、XML索引を合わせて使用することが可能
MDCブロック索引と、XML索引を合わせて使用することが可能
CREATE TABLE MDC1 (
製品 VARCHAR(10),
製品明細 XML)
ORGANIZE BY DIMENSIONS (製品)
• 制約
• XML列を次元(ORGANIZE BY節)に指定することはできない
14
© 2009 ISE Corporation
XML表の作成 – パーティション表サポート
•• XML列
列
パーティション
にすることが
XML列
列を
を含
含む
む表
表を
をパーティション表
パーティション表
表にすることが可能
にすることが可能
可能
パーティション表
にすることが可能
•• パーティション表に対してALTER
パーティション表に対してALTERTABLEでXML列の追加が可能
TABLEでXML列の追加が可能
•• XDA用の表スペースは、パーティション表の表スペースに置くことも、
XDA用の表スペースは、パーティション表の表スペースに置くことも、
別表スペースに置くことも可能
別表スペースに置くことも可能
CREATE TABLE t1(c1 INT, c2 INT, c3 XML)
IN tbsp1, tbsp2, tbsp3
LONG IN tbsp6, tbsp7, tbsp8
PARTITION BY RANGE(c1)
(STARTING FROM 1 ENDING 90 EVERY 30)
• 制約
• XML列をpartition keyに
することはできない
tbsp1
tbsp2
tbsp3
t1.p1
t1.p2
t1.p3
XDA1
XDA2
XDA3
tbsp6
tbsp7
tbsp8
• XML索引はpartitioned index
(ローカル索引)にすることはできない
15
© 2009 ISE Corporation
Net Search Extenderの機能拡張
• XMLの
の全文検索実行には
Search Extenderなどの
などのテキ
全文検索実行には,Net
には
などのテキ
スト全文検索機能
スト全文検索機能を
全文検索機能を使用する
使用する
•• XML表の機能拡張と合わせてNSEも以下の表をサポート
XML表の機能拡張と合わせてNSEも以下の表をサポート
•• MDC
MDC
•• パーティション
パーティション表
パーティション表
表
パーティション表
•• DPF(V9.5では
ではAIXのみ
では
のみ
サポート
DPF(V9.5では
ではAIXのみ
のみサポート
サポート)
では のみサポート
のみサポート)
サポート
文書管理表
文書
ID
DOC
1
<book>
SELECT * FROM 文書管理表
WHERE CONTAINS(doc, ‘SECTIONS(“/book/text”) “pureXML”’)=1
<title>InfortaionCenter</title>
<Chapter>1</Chapter>
XML文書内
文書内を
文書内を全文検索
<text>これは、DB2のマニュアルです。
pureXML機能はDB2でXMLを扱う機能です。 </text>
</book>
…
16
© 2009 ISE Corporation
XMLデータの圧縮
• • DB2
V9.5
、、基礎表に
基礎表
保持
では
されたものが
V9.5
での
DB2 V9.5では
V9.5では
では、
基礎表に
に保持されたものが
保持されたものが
されたものがV9.5
V9.5での
での圧縮対象
圧縮対象
V9.5では、
では
基礎表に
保持されたものがV9.5
されたものがV9.5での
V9.5での圧縮対象
での圧縮対象
• • V9.7
V9.7では
オブジェクトに
では
XDA
オブジェクト
保持
された
XML
データ
V9.7では
ではXDA
XDAオブジェクト
オブジェクトに
に保持された
保持された
されたXML
XMLデータ
データも
も圧縮対象
圧縮対象
V9.7ではXDA
ではXDAオブジェクト
XDA
オブジェクトに
保持されたXML
されたXMLデータ
XMLデータも
データも
create table dept (deptID char(8),...,doc XML inline length 10000)
データ・
データ・オブジェクト
圧縮可(
圧縮可(V9.5)
V9.5)
17
ID
…
PR27
…
PR28
…
ACC
…
索引オブジェクト
索引オブジェクト
DOC (XML)
XML記述子
記述子
Regions
Index
圧縮可(
圧縮可(V9.7)
V9.7)
XDAオブジェクト
オブジェクト(XML
Data)
オブジェクト
© 2009 ISE Corporation
XMLデータの圧縮方法
create table dept (deptID char(8),...,doc XML) compress yes
• 圧縮辞書の
圧縮辞書の作成
• REORG TABLE (RESETDICTIONARYオプション)
• すでに表にデータがある場合(ALTER TABLE COMPRESS YESで表属性を変更し
REORG)
• Automatic Dictionary Creation (ADC)
• V9.5から
• 表に一定量のデータが挿入されると自動的に辞書が作成され、データが圧縮される
• LOAD REPLACE
• V9.5から
• 新規のテーブル作成/データを一時ExportしてLoadしなおす場合
• 自動的な辞書の作成または既存辞書の再利用が可能
• XDA圧縮辞書
圧縮辞書が
が返される)
圧縮辞書が作成されない
作成されないケース
されないケース (SQL2220Wが
される)
• REORG、LOAD REPLACEを実行したが、XDAオブジェクトが空の場合
• XMLデータがV9.1、V9.5からのマイグレーションによるものの場合
• V9.7版のXDAフォーマットにするため、表の再作成が必要
• ADMIN_MOVE_TABLEプロシージャー(V9.7新機能)を使用可能
18
© 2009 ISE Corporation
XML索引の圧縮
•• ユーザー定義
索引の
ユーザー
定義
索引
ユーザー定義
定義XML索引
索引の
の圧縮可能
圧縮可能
ユーザー定義XML索引
定義
索引の
•• 索引圧縮はV9.7新機能
索引圧縮はV9.7新機能
•• COMPRESS
COMPRESSYESと指定された表に対する索引は自動的に圧縮
YESと指定された表に対する索引は自動的に圧縮
•• CREATE
CREATEINDEXで明示的に圧縮モードを指定
INDEXで明示的に圧縮モードを指定
(COMPRESS
(COMPRESS[YES|NO])
[YES|NO])
19
© 2009 ISE Corporation
XML索引圧縮の制約事項
• 圧縮の
Index
圧縮の対象となる
対象となるXML
となる
XML
XMLRegion
RegionIndex
Index
XML
XMLPath
PathIndex
Index
XML
XMLIndex
Index
OK
OK
• 圧縮対象
•
•
表作成時にCOMPRESS YESの設定要
ALTER INDEXでの切替不可
• 圧縮の
圧縮の対象外
OK
OK
• 圧縮対象
•
•
索引作成時に指定要
ALTER INDEXでの切替不可
• XML索引
索引は
によるCOMPRESS
YES/NOの
の切替ができない
切替ができない(GA)
索引はALTER INDEXによる
による
ができない
• XML索引の実体を表すPhysical IndexをALTERする必要があるが、Physical Indexに
対してはALTER INDEXが発行不可
FP1で
で
FP1で
で修正
修正
予定
予定
20
© 2009 ISE Corporation
日本語を含むXMLデータでの圧縮例
• 長いテキストデータを
データでの
テキストデータを多く含むXMLデータ
データでの例
での例
• 圧縮効率が
内に保持されている
圧縮効率が高く、生データよりも
データよりも小
よりも小さなサイズ
さなサイズで
サイズでDB内
保持されている
10GBのXMLデータを投入した際の比較
25.0
ー
約
の
約45%の
45%の
の圧縮効果
圧縮効果
デ
20.0
タ
量 15.0
10.0
19.1
[
G
B
5.0
9.8
8.8
8.4
圧縮
圧縮(+REORG)
]
0.0
生データ
非圧縮
• 公開特許公報の
データを
公開特許公報のXMLデータ
データを使用(
使用(日本語による
日本語による特許記述
による特許記述の
特許記述の文章を
文章を含む)
• XMLファイル
ファイル数約
ファイル数約27万件
数約 万件、
万件、平均サイズ
平均サイズ38KB
サイズ
• ファイルの
、DB中
中ではUTF-8で
で格納される
ファイルのコードページは
コードページはEUC、
では
格納される
21
生
データ
とほぼ
生データとほぼ
データとほぼ
とほぼ同等
同等
データとほぼ同等
とほぼ同等
の
ストレージサイズ
のストレージサイズ
で
で格納可能
格納可能
データは
列
データ
データは
はXML列
XML列
列に
に格
格
データは
納
する際
際
の
構造化に
に
する
構造化
納する際
する際の構造化に
構造化に
より生
生
(テキスト
テキスト)データ
より
テキスト
より生
テキスト)データ
データ
より生(テキスト
テキストデータ
に
して
に対
対して2-3倍
して2-3倍
倍に
に膨張
膨張
して 倍
圧縮によって
圧縮
によって
圧縮によって
によって、
生デー
デー
圧縮によって、
によって、、生
タタとと同等ないし
同等
ないし、
、
それ
同等ないし
ないし、
同等ないし
ないし、それ
以下に
以下
以下に
に
以下に
© 2009 ISE Corporation
日本語を含むXMLデータでの圧縮効果
• XML索引の圧縮
• 数値型、テキスト型で索引の圧縮率に大きな差はない
• 共に、20-30%程度の圧縮率
索引ごとの圧縮比
2,500
ー
2,000
デ
圧縮あり
圧縮無し
タ 1,500
量
[
M
B
1,000
500
]
0
Regions
Index
22
Paths
Index
XIX_D1
XIX_D2
XIX_D3
XIX_VC1 XIX_VC2 XIX_VC3 XIX_VC4 XIX_VC5 XIX_VC7 XIX_VC8
© 2009 ISE Corporation
日本語を含むXMLデータでの圧縮効果
• XML索引の圧縮
索引名
容量[MB]
圧縮
率
データ型
備考
圧縮あり
圧縮無し
35
55
36%
N/A
Paths Index
0
0
0%
N/A
XIX_D1
0
0
0%
Double
XIX_D2
396
574
31%
Double
YYYYMMDD型の日付データ
XIX_D3
68
99
31%
Double
1~3桁程度の数値ID
XIX_VC1
0
0
0%
VARCHAR
日本語による長いString
XIX_VC2
78
105
25%
VARCHAR
日本語による長いString
XIX_VC3
742
905
18%
VARCHAR
日本語による長いString
XIX_VC4
357
428
17%
VARCHAR
日本語による長いString
XIX_VC5
353
401
12%
VARCHAR
HASED
日本語による長いString
XIX_VC7
78
149
48%
VARCHAR
日本語による長いString
XIX_VC8
1,903
2,254
16%
VARCHAR
日本語による長いString
Regions Index
23
© 2009 ISE Corporation
inline格納効率化のための分析用関数
•• ADMIN_IS_INLINED
ADMIN_IS_INLINED
•• 文書がinline格納されているか判定(XML,
文書がinline格納されているか判定(XML,LOB)
LOB)
•• ADMIN_EST_INLINE_LENGTH
ADMIN_EST_INLINE_LENGTH
•• inline格納するために必要なinline
inline格納するために必要なinlinelengthの表示(XML,
lengthの表示(XML,LOB)
LOB)
-- inline length 1000 byteのXML表を作成
CREATE TABLE customer(id int, xmlcol XML INLINE LENGTH 1000);
--- データを投入
INSERT INTO customer VALUES (?,?);
-- inline分析用関数を実行
SELECT id, ADMIN_IS_INLINED(info) AS inlined,
ADMIN_EST_INLINE_LENGTH(info) AS inline_length FROM customer;
ID INLINED INLINE_LENGTH
inline化されているかどうか(1:inline, 2:inline化されていない)
------- -------- ------------inline化されているものは実際に使用している長さ
1000
1
770
1001
0
2345
1000を超えるものはinline化に必要な長さ(推定)
1002
1
796
-1はページサイズが小さすぎてinline化できない
1003
0
1489
-2 XMLフォーマットがV9.1/V9.5のもの
1004
0
-1
24
© 2009 ISE Corporation
その他の機能拡張
その他の機能拡張
25
© 2009 ISE Corporation
XML索引のオンライン作成/再編成
•• XML索引作成時
索引作成時の
索引作成時
XML索引作成時
索引作成時の
の更新処理可能
更新処理可能
索引作成時の
•• CREATE
CREATEINDEX
INDEXALLOW
ALLOWWRITE
WRITEACCESS
ACCESS
•• XML索引再編成時
索引再編成時の
索引再編成時
XML索引再編成時
索引再編成時の
の更新処理可能
更新処理可能
索引再編成時の
•• REORG
REORGINDEXES
INDEXESALL
ALLFOR
FORTABLE
TABLEALLOW
ALLOWWRITE
WRITEACCESS
ACCESS
• REORG INDEXES ALL FOR TABLE CLEANUP ONLYは
は、従来から
従来から
ALLOW WRITE ACCESS可能
可能
26
© 2009 ISE Corporation
オンラインXML索引作成のシナリオ
• XML表内
表内に
文書を
表内に、新しいスキーマ
しいスキーマの
スキーマのXML文書
文書を追加
• DB2 pureXMLは、では、同一XMLカラム内に異なるスキーマの文書を格納できる
• スキーマエボリューション機能で、validationするXML Schemaを互換性のある新し
いスキーマに置き換えることも可能
• オンラインで
オンラインで新しいスキーマ
しいスキーマに
スキーマに対応した
対応した索引
した索引を
索引を追加
• V9.7では、新しい索引を作成する間にも表への追加/更新が可能
pureXMLの
の
スキーマ
柔軟性
かした
pureXMLの
のスキーマ柔軟性
スキーマ柔軟性
柔軟性を
を生
生かした運用
かした運用
運用
スキーマ柔軟性を
柔軟性を
かした運用
CUSTOMER表
表
Cust
ID
…
1
… <CUSTOMER version=1.0> …
DOC
<NAME>夏目漱石</NAME>
</CUSTOMER>
… <CUSTOMER version=2.0> …
…
新サービスを
要素追加
サービスを開始し
開始しXML要素追加
スキーマエボリューションによる
スキーマエボリューションによる
スキーマの
スキーマの置き換え
<NAME>夏目漱石</NAME>
<ServiceName>A</ServiceName>
</CUSTOMER>
新スキーマによる
スキーマによる文書追加
による文書追加
新要素を
新要素を使用する
使用する索引
する索引を
索引を追加
CREATE INDEX custidx2 ON CUSTOMER(DOC)
GENERATE KEY USING XMLPATTERN '/CUSTOMER/ServiceName' …
27
© 2009 ISE Corporation
宣言済みグローバル一時表(DGTT)のXMLサポート
• 宣言済み
Global Temporary Table)
宣言済みグローバル一時表
グローバル一時表(Declared
一時表
• 現行セッションでのみ有効な一時表
• 作成したアプリケーションによって発行された SQLステートメントでのみアクセス
可能
• セッション中に繰り返し使用するデータを一時表にキャッシュしておくことにより、
都度実表にアクセスする必要がない
• 実表にアクセスする場合に必要なロックやログを削減できる
• create global temporary tableでは、XML列は使用不可
• create global temporary tableはV9.7の新機能
declare global temporary table session.temp_cust(cid bigint, info xml) on commit preserve rows
insert into session.temp_cust (cid, info) select cid, info from customer
select * from session.temp_cust
-- 実行
CID
INFO
1000
<customerinfo Cid="1000"><name>Kathy Smith</name><addr
country="Canada"><street>5 Rosewood</street><city>Toronto</city><prov-state>Ontario</provstate><pcode-zip>M6W 1E6</pcode-zip></addr><phone type="work">416-5551358</phone></customerinfo>
28
© 2009 ISE Corporation
ユーザー定義関数(UDF)でのXMLの使用
in/outパラメータ
パラメータとして
タイプを
パラメータ
として
タイプ
in/outパラメータ
パラメータとして
としてXMLタイプ
タイプを
を使用
使用
パラメータとしてXMLタイプ
として
タイプを
SQLで
で
かれた
内
での
実行および
変数の
実行
および
変数
SQLで
で書
書かれたUDF内
かれたUDF内
内でのSQL/XML実行
でのSQL/XML実行
実行および
およびXML変数
変数の
の使用
使用
かれた
での
実行およびXML変数
および
変数の
••
••
CREATE FUNCTION getname(doc XML)
RETURNS VARCHAR(25)
BEGIN ATOMIC
RETURN XMLCAST(XMLQUERY('$d/customerinfo/name' PASSING doc AS "d") AS VARCHAR(25));
END
-- 実行
$ db2 "select getname(info) as name from customer"
NAME
-------------------------
CID
INFO
1001
<customerinfo Cid=“1001”>
<name>Kathy Smith</name>
<addr country=“Canada”>
<street>25Creek</street>
<city>Markham</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N9C 3T6</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
</customerinfo>
Kathy Smith
Kathy Smith
Jim Noodle
Robert Shoemaker
Matt Foreman
Larry Menard
6 record(s) selected.
29
CUSTOMER表
…
© 2009 ISE Corporation
UDF作成例(表値関数)
CREATE FUNCTION getphone(doc XML)
RETURNS TABLE(type VARCHAR(10), number VARCHAR(20))
BEGIN ATOMIC
RETURN
SELECT type, number FROM XMLTABLE('$d/customerinfo/phone' PASSING doc AS "d"
COLUMNS type
VARCHAR(10) PATH '@type',
number VARCHAR(20) PATH '.') ;
END
-- 実行
$ db2 "select cid, t.type, t.number from customer, table(getphone(info)) as t"
CID
TYPE
NUMBER
-------------------- ---------- -------------------1000 work
416-555-1358
1001 work
905-555-7258
1002 work
905-555-7258
1003 work
905-555-7258
1003 home
416-555-2937
1003 cell
905-555-8743
1003 cottage
613-555-3278
:
30
© 2009 ISE Corporation
XML文書の分解(shredding/decompose)
decompositionの
の手順
•
1. decomposeするデータを格納するための表をあらかじめ作成する
2. decomposition annotationを含むXMLスキーマをXML Schema
Repository (XSR)に登録
•
REGISTER XMLSCHEMAコマンドのENABLE DECOMPOSITIONオ
プションを指定
REGISTER XMLSCHEMA Product_decomp.xsd from Product_decomp.xsd as
DECOMP.ProductDECOMP complete enable decomposition
3. XML文書のシュレッディング
•
•
•
•
31
DECOMPOSE XML DOCUMENT コマンド
xdbDecompXML ストアド・プロシージャ
V9.7
V9.7
DECOMPSE XML DOCUMENTSコマンド
コマンド
XDB_DECOMP_XML_FROM_QUERYストアド
ストアド・
ストアド・プロシージャ
• クエリ結果
できる
クエリ結果から
結果から一度
から一度に
一度に複数の
複数の文書を
文書をdecomposeできる
© 2009 ISE Corporation
SQL/XQuery間の述部プッシュダウン照会最適化(1)
• 上位の
上位の照会ブロック
照会ブロック(SQL)で
で指定された
指定された条件指定述部
下位ブロック
ブロック
された条件指定述部を
条件指定述部を下位ブロック
(XQuery)の
の照会の
照会の条件として
条件として,照会
クエリをrewriteする
する
として 照会コンパイラ
照会コンパイラが
コンパイラがクエリを
• 下位ブロックで定義されたXML索引を使用できるようになる
• 特にXMLTABLE, XMLTABLEを使用したViewで有効
CUSTVIEW ビュー
SELECT * FROM CustomerView
CREATE VIEW CustView as
WHERE CNUMBER=1
SELECT XC.CNumber, XC.CName
FROM Customer as C,
SELECT * FROM CustomerView
XMLTABLE ('$c/Customer‘ PASSING C.doc as "c“
WHERE CNAME=‘幕張商店’
COLUMNS "CNUMBER" INTEGER
PATH 'Customer_Number',
"CNAME" VARCHAR(50) PATH 'Customer_Name' ) as XC
CUSTOMER表
表
文書ID
DOC
1
<Customer>
<Customer_Number>001</Customer_Number>
索引
CREATE INDEX xCNUMBER ON customer(doc)
GENERATE KEY USING XMLPATTERN
'/Customer/Customer_Number' AS SQL DOUBLE
<Customer_Name>幕張商店</Customer_Name>
<Address>千葉市中瀬1-1</Address>
</Cistomer>
…
32
CREATE INDEX xCNAME ON customer(doc)
GENERATE KEY USING XMLPATTERN
'/Customer/Customer_Name' AS SQL VARCHAR(50)
© 2009 ISE Corporation
SQL/XQuery間の述部プッシュダウン照会最適化(2)
SELECT * FROM CustomerView WHERE CNUMBER=1
V9.5
最適化ステートメント
SELECT $INTERNAL_XMLTOSQL$(Q1.$C1) AS “CNUMBER”,
$INTERNAL_XMLTOSQL$(Q1.$C2) AS “CNAME”
FROM $INTERNAL_FOR$ ((TABLE
($INTERNAL_XPATH$ (‘($INTERNAL_XMLTOXML_NIEO$(Q2.“DOC”))/
(cust:Customer)(:-->$C0:)/{(Customer_Number)(:-->$C1:),
(Customer_Name)(:-->$C2:)}'))) AS Q1), ITLMC.CUSTOMER AS Q2
WHERE ($INTERNAL_XMLTOSQL$(Q1.$C1) = 1)
RETURN
(
1)
|
46.8
NLJOIN
(
2)
8554.74
1131
/--+--¥
1104
0.0423913
TBSCAN
XSCAN
(
3)
(
4)
204.661
7.56348
27
1
|
1104
TABLE: ITLMC
CUSTOMER
Q2
33
V9.7
最適化ステートメント
SELECT $INTERNAL_XMLTOSQL$(Q1.$C2) AS “CNUMBER”,
$INTERNAL_XMLTOSQL$(Q1.$C1) AS "CNAME"
FROM $INTERNAL_FOR$ ((TABLE
($INTERNAL_XPATH$ ('($INTERNAL_XMLTOXML_NIEO$(Q2."DOC"))/
(cust:Customer)(:-->$C0:)/{(Customer_Name)(:-->$C1:),
Customer_Number/(.[((. >=
$INTERNAL_SQLTOXML$($INTERNAL_FUNC$()))
and
RETURN
(. < $INTERNAL_SQLTOXML$($INTERNAL_FUNC$()
)))])
(
1)
(:-->$C2:)}'))) AS Q1),
ITLMC.CUSTOMER
| AS Q2
0.000161502
NLJOIN
(
2)
5517.73
757.175
/---+---¥
720.175 2.24254e-007
FETCH
XSCAN
(
3)
(
7)
70.4099
7.56388
37
1
/---+----¥
720.175
6004
RIDSCN
TABLE: ITLMC
(
4)
CUSTOMER
38.2635
Q2
5
|
SORT/XISCAN略
|
6004
XMLIN: ITLMC
XCNUMBER_IX
Q2
© 2009 ISE Corporation
SQL/XQuery間の述部プッシュダウン照会最適化(3)
SELECT * FROM CustomerView WHERE CNAME=‘幕張商店’
V9.5
最適化ステートメント
SELECT $INTERNAL_XMLTOSQL$(Q1.$C1) AS "CNUMBER",
$INTERNAL_XMLTOSQL$(Q1.$C2)
AS "CNAME"
FROM $INTERNAL_FOR$ ((TABLE
($INTERNAL_XPATH$ ('($INTERNAL_XMLTOXML_NIEO$(Q2."D
OC"))/(cust:Customer)(:-->$C0:)/{(Customer_Number)(:-->$C1:),
(Customer_Name)(:-->$C2:)}'))) AS Q1), ITLMC.CUSTOMER AS Q2
WHERE ($INTERNAL_XMLTOSQL$(Q1.$C2) = ' 」 、 X')
Rows
RETURN
(
1)
Cost
I/O
|
46.8
NLJOIN
(
2)
8554.74
1131
/--+--¥
1104
0.0423913
TBSCAN
XSCAN
(
3)
(
4)
204.661
7.56348
27
1
|
1104
TABLE: ITLMC
CUSTOMER
Q2
34
V9.7
最適化ステートメント
SELECT $INTERNAL_XMLTOSQL$(Q1.$C1) AS "CNUMBER",
$INTERNAL_XMLTOSQL$(Q1.$C2)
AS "CNAME"
FROM $INTERNAL_FOR$ ((TABLE
($INTERNAL_XPATH$ ('($INTERNAL_XMLTOXML_NIEO$(Q2."D
Rows
OC"))/(cust:Customer)(:-->$C0:)/{(Customer_Number)(:-->$C1:),
RETURN
Customer_Name/(.[((. >= $INTERNAL_SQLTOXML$(RTRIM('
」、
(
1)
X'))) and (.
Cost AS Q1),
<= $INTERNAL_FUNC$()))])(:-->$C2:)}')))
I/O
ITLMC.CUSTOMER AS Q2
|
0.000332284
NLJOIN
(
2)
5707.71
782.275
/---+---¥
742.275 4.47656e-007
FETCH
XSCAN
(
3)
(
7)
93.2265
7.56388
40
1
/---+----¥
742.275
6004
RIDSCN
TABLE: ITLMC
(
4)
CUSTOMER
61.0749
Q2
8
|
SORT/IXSCAN略
|
6004
XMLIN: ITLMC
XCNAME_IX
Q2
© 2009 ISE Corporation
その他の機能拡張
• XML parse/validationの
の詳細エラーメッセージ
詳細エラーメッセージ表示
エラーメッセージ表示
V9.5
から
V9.5FP3から
FP3から
から
• XSR_GET_PARSING_DIAGNOSTICSプロシージャ
• Optimization Profileでの
でのXML索引
索引、
などの指定
での
索引、XISCAN, XANDORなどの
などの指定
が可能
35
© 2009 ISE Corporation
DB2 9 pureXMLサポートの機能制約
• XMLサポート
サポートは
のデータベースのみ
サポートはコードページUTF-8の
コードページ
データベースのみ
V9.5でUnicode以外も可
• 以下の
以下の機能の
機能のサポートはなし
サポートはなし
• Federation
• レプリケーション (Q-Replicarion)
•
V9.5でサポート
Load
• REORG allow write access(indexのみ)
• DPF
• 以下の
カラムを
以下の表はXMLカラム
カラムを持てない
• MDC (Multidimensional Clustering)
V9.7でサポート
• パーティション表
• Global Temporary Table
• RCT (Range-Cluster Table)
• Object-Relational Features (i.e. Structured Types, Distinct Types, Methods)で
でXMLタイプ
タイプ
のサポートなし
サポートなし
• Check Constraint, Triggerで
でXMLカラム
カラムを
カラムを参照できない
参照できない
V9.5でValidationをサポート
• V9では
では、
は不可
では、サブドキュメントの
サブドキュメントのupdateは
V9.5でサポート
V9.7により
により、
は
のほとんど全
により
のほとんど
ての
機能
利用可能
V9.7により
により、
XMLは
はDB2のほとんど
DB2のほとんど
のほとんど全
全ての機能
ての機能
機能が
が利用可能に
利用可能に
に
により、、XMLは
のほとんど全
ての機能が
機能が
利用可能に
36
© 2009 ISE Corporation
参照資料
• Enhance business insight and scalability of XML data with
new DB2 9.7 pureXML features
• http://www.ibm.com/developerworks/data/library/techarticle/dm0904db297purexml/index.html?S_TACT=105AGX11&S_CMP=
FP
• Best Practices: Managing XML Data
• http://www.ibm.com/developerworks/data/bestpractices/managi
ngxmldata/?S_TACT=105AGX11&S_CMP=LP
37
© 2009 ISE Corporation