...

7. ビッグデータを含めた多用なデータへの対応

by user

on
Category: Documents
68

views

Report

Comments

Transcript

7. ビッグデータを含めた多用なデータへの対応
<第1.00版 2012年 9月>
7. ビッグデータを含めた多用なデータへの対応
本資料掲載事項は、ある特定の環境・使用状況においての正確性がIBMによって確認されていますが、すべての環境において同様の結果が得られる保証は
ありません。これらの技術を自身の環境に適用する際には、自己の責任において十分な検証と確認を実施いただくことをお奨めいたします。
© Copyright IBM Japan Systems Engineering Co., Ltd. 2012
1
© 2012 ISE Corporation
内容
• DB2 V10.1 – 広がるDB2の世界
• Federation機能強化
• Hadoopへの対応
• RDFアプリケーション開発のサポート
• pureXML機能強化
• テキスト全文検索機能 – Text Search機能強化
• まとめ
2
© 2012 ISE Corporation
DB2 V10.1 – 広がるDB2の世界
データ形式多様化 – 定型データから非定型データへ
Federation
他のDBや非DBデータに透過的にアクセス
DB2ファミリー
DB2 V10.1
他RDBMS
HDFSとの連携強化
ニックネーム
非RDB(参照のみ)
ファイル、表形式シートなど
テキスト全文検索
DB2 pureXML
リレーショナルデータに加えXMLをネイティブサポート
セマンティックWeb
“DB2”を含む
レコードは?
RDF/SPARQLのサポート
データソースの多様化 – 他RDBMS, ビッグデータ(HDFS)
3
© 2012 ISE Corporation
Federation機能強化
4
© 2012 ISE Corporation
IBM InfoSphere Federation Server V10.1 新機能
• DB2 pureScaleとの統合
• Three Part Name
• Netezza サポートの強化
5
© 2012 ISE Corporation
DB2 pureScaleとの統合
6
© 2012 ISE Corporation
DB2 pureScaleとの統合
• Federation Server を使用して、DB2 pureScale データ
ベースを拡張できるようになりました
Federation Server
Clients
Oracle
SQL server
Sybase
・全てのメンバーに、データソースのクライアント(クライアント・ライブラリー)の
導入が必要。
・work load balance (WLB) や automatic client reroute (ACR) も利用可能
で、Federationのための特別な設定は不要。(Federationを利用していないと
きと同様に、db2dsdriver.cfgに設定すればよい)
Netezza
・GA時点では、フェデレーション XMLと F2PC はサポートされていません。
7
© 2012 ISE Corporation
Three Part Name
8
© 2012 ISE Corporation
Three Part Name(1)
• ニックネームを作成しないでリモートオブジェクトにアクセス可能
になりました
• 以下の2通りの書き方が可能
• <サーバー>.<リモートスキーマ>.<リモートオブジェクト>
• <リモートスキーマ>.<リモートオブジェクト>@<サーバー> (*1)
(*1) DB2_COMPATIBILITY_VECTORレジストリ変数をビット0x20000か、ORAに設定が必要
リモートオブジェクトへのアクセスまでの手順が、以下の通り簡略化されます。
これまでの手順
Three Part Nameを使った手順
ここまでは同様の手順で、いず
れの方法でも連合オブジェクトを
作成する(Nickname以外)
①CREATE WRAPPER
②CREATE SERVER
③CREATE USER MAPPING
④CREATE NICKNAME N1 FOR ORA11.SCOTT.T1
④SELECT * FROM ORA11.SCOTT.T1
⑤SELECT * FROM N1
CREATE SERVERで作
成したサーバー名
9
リモートスキーマ名
アクセスするリモート・オ
ブジェクト名
© 2012 ISE Corporation
Three Part Name(2)
• メリット
• Oracle互換性
• OracleのDBLINKの構文の変更が不要
• ニックネーム管理・保守が不要
• ニックネームの作成が不要
• NNSTATや、Index、Column情報の更新不要
10
© 2012 ISE Corporation
Three Part Name
参考
• サポート
• DPF、PureScale環境
• 全てのリレーショナル・データソース
• 操作
•
•
•
•
•
SELECT
INSERT,UPADTE,DELETE
CREATE VIEW
MERGE(リモート表をターゲットにすることは出来ない)
UNION,INTERSECT
• スキーマがサポートしていないデータソースでは2部構成(Server_name.Obeject_name)
• NICKNAMEを使用すべきケース
• 非リレーショナル
• 索引、制約の作成
• オブジェクトレベルで許可、特権の制御
• 統計情報の更新(nnstatの使用)
※データタイプのマッピングの変更は、3PartNameでも可能
•
•
11
Viewを作成する
キャスト関数をつかう
© 2012 ISE Corporation
Three Part Name
参考
• 3PartNameの為のフェデレーテッド・キャッシュ
• メタデータと統計情報がキャッシュされる
• 最初のアクセス時にキャッシュされる
• 有効期限を設定
• 環境変数 FEDCACHE_EXPIRE_INTERVALで指定
• デフォルト値:ゼロ(明示的に無効化するまで有効)
• 推奨:db2dj.iniファイルに設定してください
• FLUSH FEDERATED CACHEコマンドで明示的にメタデータを無効化することも
できる
• FLUSH FEDERATED CACHE ORA11G.SCOTT.TAB1
• FLUSH FEDERATED CACHE ORA11G.SCOTT.*
• FLUSH FEDERATED CACHE ORA11G.*.*
12
© 2012 ISE Corporation
参考
Three Part Name
• 以下の機能はサポートされない
• 静的SQL, 関数, トリガー, ストアドプロシージャ
• DDL (CREATE ALIAS, CREATE INDEX, ALTER TABLE等)
• NNSTATによる統計情報収集
• MQT
13
© 2012 ISE Corporation
Netezza サポートの強化
14
© 2012 ISE Corporation
Netezzaサポートの機能強化
• ODBCラッパーでのNetezzaデータソースアクセスの最適化
• Netezzaデータソースに対して、ODBCラッパーでのアクセス構成を行う
場合、ODBCラッパーは、NetezzaのODBCドライバーを検出して、自動
的にパフォーマンスオプションを構成します。
• 追加設定を行わなくても、Pushdownが行われる設定となっています。
• 基本的な関数については関数マッピングも行われています。
• Bulk Insertが使用可能
• サーバーオプションENABLE_BULK_INSERTをYに設定することで、
Netezzaのニックネームに対する複数行を処理するINSERTをBulk
Insertで行うことが出来るようになります。
Federated DB
SQL
15
ODBC
Wrapper
ODBC Driver Manager
ODBC Driver
Netezza
© 2012 ISE Corporation
Bulk Insert
•
Bulk Insert
•
•
Bulk Insertを使用することで、リモートのデータソースに対して大量行数を高速に処理することが出
来ます。
Bulk Insertの設定方法
•
•
サーバーオプション:ENABLE_BULK_INSERTをYに設定
create server文またはalter server文で設定可能
create server <Server_Name> type odbc version 3 wrapper ODBC_Wrapper options (node
‘nodename’, ENABLE_BULK_INSERT 'Y' )
alter server <Server_Name> options ( set ENABLE_BULK_INSERT 'Y‘)
•
Bulk Insertが行われる処理
a). ローカル表からニックネームへのInsert
例) insert into n11(i) select i from t1
b). 他のサーバーのニックネームからニックネームへのInsert
例) insert into n11(i) select i from n1
c). 複数の値をinsertする場合
例) insert into n11 values(111),(112),(113),(114),(115),(116),(117),(118),(119),(120)
d). 同じサーバーのニックネームからのInsertであるがPushdownが行われない場合
例) insert into n11(i) select i from n1
16
© 2012 ISE Corporation
参考
Netezzaデータソース設定例(Windows)
• WindowsのODBC データソース アドミニストレータからNetezzaのDSNは登録済み
C:¥work¥netezza>db2 list system odbc data sources
System ODBC Data Sources
Data source name
-------------------------------NZDB
ora11g
Description
DSNの登録を確認
---------------------------------------NetezzaSQL
Oracle in OraDb11g_home1
C:¥work¥netezza>db2 -tvf setupodbc.sql
drop wrapper odbc
DB20000I The SQL command completed successfully.
デフォルトラッパー名のODBCを使用しているためLIBRARY
句の指定を省略
create wrapper odbc
DB20000I The SQL command completed successfully.
NODEにDSN名を指定
CREATE SERVER NZDB TYPE odbc VERSION 3.0 WRAPPER odbc OPTIONS (NODE 'NZDB')
DB20000I The SQL command completed successfully.
CREATE USER MAPPING FOR USER SERVER NZDB OPTIONS (REMOTE_AUTHID 'tsota', REMOTE_PASSWORD ‘password')
DB20000I The SQL command completed successfully.
SET PASSTHRU NZDB
DB20000I The SQL command completed successfully.
SELECT VERSION()
パススルーセッションでNetezzaサーバーのバージョンを確認
VERSION
---------------------------------------------------------------------------------------------------------------------Release 6.0.2 [Build 17169]
1 record(s) selected.
SET PASSTHRU RESET
DB20000I The SQL command completed successfully.
17
© 2012 ISE Corporation
参考
Netezzaデータソース Pushdownの例
• db2explnでPushdownされているSQLを確認
C:¥work¥netezza>db2 "select char(option,20) option,char(setting,20) setting from syscat.serveroptions"
OPTION
-------------------NODE
ENABLE_BULK_INSERT
SETTING
-------------------NZDB
Y
サーバーオプションはNODEと
ENABLE_BULK_INSERTのみ
2 record(s) selected.
C:¥work¥netezza>db2expln -d feddb -t -q
"select c1,count(*) from tab1 where c2 = 'XXXXX' group by c1"
・・・省略・・・
Statement:
select c1, count(*) from tab1 where c2 ='XXXXX' group by c1
Section Code Page = 1208
Estimated Cost = 626.093689
Estimated Cardinality = 4.000000
Ship Federated Subquery #1
| #Columns = 2
Return Data to Application
| #Columns = 2
COUNT関数、WHERE句、GROUP BY句が
Pushdownされている
Federated Substatement #1:
Server: NZDB (ODBC 3.0)
SQL Statement:
SELECT A0."C1" , COUNT(*) FROM "TSOTA" ."TAB1" A0 WHERE (A0."C2" =N'XXXXX' ) GROUP BY A0."C1"
Nicknames Referenced:
1: SOTA.TAB1 ID = 65533,32768
Base = TSOTA.TAB1
18
© 2012 ISE Corporation
参考
パフォーマンスデータ
• Bulk insertが有効と無効のケースで、大量行数のInsertを実施し、処理時
間を比較
• Data: 200000 rows(10mb data)
• Network latency:200 ms
• SQL statement:insert into nickname1 select * from nickname2
Normal Insert:
Bulk Insert:
Several hours done all
inserts
Over 600 rows for one bulk
insert
Several minutes done all
inserts
19
© 2012 ISE Corporation
参考
Bulk Insert検証
1000行のデータをローカル表にInsert
C:¥work¥netezza>db2 -tvf nz_test.sql
insert into local with temp(c1) as (values 1 union all select c1+1
from temp where c1<1000) select
lpad(c1,10,0),lpad(c1,10,0),lpad(c1,10,0),lpad(c1,10,0),lpad(c1,10,0)
from temp
DB20000I The SQL command completed successfully.
delete from tab1
DB20000I The SQL command completed successfully.
alter server NZDB options (set ENABLE_BULK_INSERT 'Y')
DB20000I The SQL command completed successfully.
alter server NZDB options (set ENABLE_BULK_INSERT 'N')
DB20000I The SQL command completed successfully.
reset monitor all
DB20000I The RESET MONITOR command completed successfully.
reset monitor all
DB20000I The RESET MONITOR command completed successfully.
insert into tab1 select * from local
DB20000I The SQL command completed successfully.
insert into tab1 select * from local
DB20000I The SQL command completed successfully.
ローカル表からNetezza
のニックネームにInsert
get snapshot for remote_databases on feddb
Remote Database Snapshot
Remote Database Snapshot
Remote datasource name
Database name
Connects
Disconnects
Commits
Rollbacks
Queries
Inserts
Updates
Deletes
Create nicknames
Passthrus
Stored procedures
Rows returned
Rows updated
Rows deleted
Rows inserted
Rows returned by Stored procedures
Failed statements
Query time (ms)
Insert time (ms)
Update time (ms)
Delete time (ms)
Create nickname time (ms)
Passthru time (ms)
Stored procedure time (ms)
20
get snapshot for remote_databases on feddb
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
NZDB
FEDDB
1
0
0
0
0
2
0
0
0
0
0
0
0
0
1000
0
0
0
3196
0
0
0
0
0
Bulk Insertを使用
した場合には、
Insertされた行数
は1000行となって
いるがリモートデー
タソースに発行し
たInsert回数は2回
となっている
Remote datasource name
Database name
Connects
Disconnects
Commits
Rollbacks
Queries
Inserts
Updates
Deletes
Create nicknames
Passthrus
Stored procedures
Rows returned
Rows updated
Rows deleted
Rows inserted
Rows returned by Stored procedures
Failed statements
Query time (ms)
Insert time (ms)
Update time (ms)
Delete time (ms)
Create nickname time (ms)
Passthru time (ms)
Stored procedure time (ms)
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
NZDB
FEDDB
1
0
0
0
0
1000
0
0
0
0
0
0
0
0
1000
0
0
0
574641
0
0
0
0
0
Bulk Insertを使
用していない場
合には、リモート
データソースに
発行したInsert
回数も1000回と
なっている
© 2012 ISE Corporation
Hadoopへの対応
21
© 2012 ISE Corporation
ビッグデータの分析力強化
•
ビジネス分析のために収集されるデータの分量や種類は増大
している
• 非常に大量で複雑なデータを新しいフレームワークで
非構造化データ
の使用量増大
処理することが可能に
•
新しいフレームワークに従来のBIシステムを効果的に統合する
にはどうすればよいか?
22
© 2012 ISE Corporation
BigInsightsとDB2(RDB)連携
• DB2からのBigInsightsアクセス
• JaqlSubmit : SQLインターフェースからJaqlの実行が可能
• HdfsRead : HDFS上のデータをSQLにてよって表形式で取得可能
• BigInsights(Jaql)からのDB2(RDB)アクセス
• JaqlからDB2へのデータ読み書き可能
• DB2/InfoSphere Warehouseの他、Netezza、Informix、Oracle、Teradata
との連携サポート
JaqlSubmit
JaqlからDB2への
読み書き
レポーティング
ツール
(Cognosなど)
顧客
Hadoop/Jaql
時間
HDFS
取引履歴
場所
23
店舗
HdfsRead
.CSV
files
.log
data
© 2012 ISE Corporation
BigInsightsとDB2連携のユースケース(1)
•
既存のSQLベースのツールからHadoopの分散処理基盤を活用
InfoSphere Warehouse
SQL
Cubing services
Jaql client
JaqlSubmit UDF
DB2
HDFSRead UDF
InfoSphere BigInsights
Jaql server
Web log data on Hadoop HDFS
24
© 2012 ISE Corporation
BigInsightsとDB2連携のユースケース(2)
• 巨大データウェアハウスのデータをHadoop(HDFS)にオフロード
• 古いデータを分散ファイルシステムへ移行し、ストレージコスト削減
• DB2からHDFSへのデータコピー、DB2側の消しこみ処理をJaqlのジョブで
実行
• 移動したデータはSQLから透過的に参照可能
• HDFS_READを使い、アーカイブ先のファイルを参照するビューを定義
DB2
2011/1Q
古いデータの
アーカイブ
InfoSphere BigInsights
2011/2Q
2011/3Q
HDFS_READを利用した
ビューを定義
2011/4Q
2011/1Q
25
Hadoop分散ファイルシステム
(HDFS)
© 2012 ISE Corporation
DB2V10におけるビッグ・データの分析力強化
•
UDFを使ったクエリーを介してHadoopの結果を取り込み使用する
• UDFはDB2の分析jobやSQLベースの分析用アプリケーションで使用可能
• 今までは、ビジネス要件の変更や様々なデータフォーマット毎に対応するために、
いくつものUDFを使用してそれぞれ結果セットを生成していた
•
V10の汎用表関数を使用することで分析処理をシンプルにすることが可能に!
(1)
(2)
(3)
UDFs
26
© 2012 ISE Corporation
汎用表関数
• V10より、新しく実行時に出力形式を指定することが
できる表関数が提供された
• 今まで別々のソースからデータを読み込むために
は各ソースに対応したUDFを作成する必要があっ
た
• 汎用表関数を使用すれば、同じUDFを使って別々の
ソースから読み込むことが可能
DB2 10 新機能 !!
UDF実行時に出力形式
や参照ファイルを指定す
ることができる関数が登
場した
出力1
file1
JAVA ジェネリック
表関数
file2
出力2
file3
出力3
27
© 2012 ISE Corporation
Java 汎用表関数
• Javaで記述された外部ユーザー定義表関数
• 外部: DB2外でプログラミングされ実装されているプログラム
• 表関数: 結果セットとして返される機能(例えば. 複数行のセットがひとつの結果で戻される)
• なぜ ‘ジェネリック’ ?
• 実行時に様々なフォーマットを決定して出力することが可能
• 出力パラメーターはCREATE FUNCTION DDL ステートメントでは指定しない
• 関数からの出力はSQLのSELECTステートメントでアクセス可能
• SELECTステートメントで違う結果セットにフォーマットして戻すことが可能
出力1
file1
JAVA ジェネリック
表関数
file2
出力2
file3
出力3
28
© 2012 ISE Corporation
参考
Hadoopとの連携
• Java Generic Table Function(実行時に出力フォーマットを決定可
能)
• V9.7以前のユーザー定義表関数は、定義時に出力フォーマットを定
CREATE FUNCTION HDFS_READ
CREATE FUNCTION HADOOPCSVREAD(VARCHAR(255), INTEGER,
義する必要があった。
( VARCHAR(3000) )
VARCHAR(255))
RETURNS TABLE (
C1 VARCHAR(255),
C2 VARCHAR(255),
C3 VARCHAR(255),
C4 VARCHAR(255),
C5 VARCHAR(255),
C6 VARCHAR(255),
C7 VARCHAR(255),
C8 VARCHAR(255),
C9 VARCHAR(255),
C10 VARCHAR(255),
C11 VARCHAR(255),
C12 VARCHAR(255) )
EXTERNAL NAME 'com.ibm.db2jaql.HDFSRead!hdfsRead'
LANGUAGE JAVA
SPECIFIC hdfsread
PARAMETER STYLE DB2GENERAL
DETERMINISTIC
FENCED THREADSAFE
NOT NULL CALL
NO SQL
NO EXTERNAL ACTION
NO SCRATCHPAD
NO FINAL CALL
DISALLOW PARALLEL
NO DBINFO
29
RETURNS GENERIC TABLE
EXTERNAL NAME 'UDFcsvReader!hadoopCsvReadString'
LANGUAGE JAVA
SPECIFIC hadoopCsvReadString
PARAMETER STYLE DB2GENERAL
VARIANT
FENCED THREADSAFE
NOT NULL CALL
NO SQL
NO EXTERNAL ACTION
NO SCRATCHPAD
NO FINAL CALL
DISALLOW PARALLEL
NO DBINFO;
© 2012 ISE Corporation
汎用表関数の作成方法
• CREATE FUNCTIONステートメント内での使い方
• 事前に外部プログラムの作成・コンパイルを行い、sqllib/function以
下にクラスファイルのコピーを行う(通常外部プログラムを使った
UDFと同様)
CREATE FUNCTION csvRead(fnme VARCHAR(255),coltype VARCHAR(255))
RETURNS
GENERIC TABLE
• 以下の例では、‟csvRead‟というUDF名で登録
EXTERNAL NAME ‘UDFcsvReader.jar:UDFcsvReader!csvReadString’
LANGUAGE JAVA
PARAMETER STYLE DB2GENERAL;
DB2マネージャーがUDFを実行するための
外部コードを指定
表関数の出力を実行時に決定することを記述
RETURNS GENERIC TABLEを指定する場合、以下の指定が必須
LANGUAGE JAVA
PARAMETER STYLE DB2GENERAL
30
© 2012 ISE Corporation
汎用表関数の使用方法
前頁で登録したUDFをコール
select * from
table(csvRead('C:¥Program Files¥IBM¥SQLLIB_v10¥test¥test2.csv'))
as T(first varchar(23), last varchar(10),
age smallint, salary integer, id bigint, rand_double double)
where T.first like 'J%';
• selectステートメントのfrom句の中で汎用表関
数が呼ばれる
• as句で表に含まれる列名とデータタイプを指定
する
Table Function
• 同じUDFを使ったselectステートメントで、別の
表からもデータの取得が可能
31
© 2012 ISE Corporation
参考
汎用表関数の実行例
select * from table(csvRead('C:¥Program Files¥IBM¥SQLLIB_v10¥v10test/test2.csv')) as TX(first
varchar(23),
last varchar(10), age smallint, salary integer, id bigint,rand_double double) where TX.first like 'J%'
FIRST
----------------------John
Jack
LAST
AGE
SALARY
ID
RAND_DOUBLE
---------- ------ ----------- -------------------- -----------------------Doe
26
46000
56255333387
+5.32340983000000E+004
McGinnis
42
650
482525320
+2.34532320500000E+002
2 レコードが選択されました。
異なるcsvファイルから
データを読み込んでいる
select * from table(csvRead('C:¥Program Files¥IBM¥SQLLIB_v10¥v10test/test1.csv')) as T(first
varchar(23),
age smallint, last varchar(10))
同じUDFを使用
FIRST
AGE
LAST
----------------------- ------ ---------Chris
78 Weed
Jonathan
11 Thompson
"JJ ""Demo"""
66 Michel
Steve
88 Arnold
0 Blankman
5 レコードが選択されました。
32
© 2012 ISE Corporation
RDFアプリケーション開発のサポート
33
© 2012 ISE Corporation
DB2 V10.1 RDFストアおよびSPARQLのサポート
• DB2 RDFストア
• RDFのグラフトリプルの格納にはDB2が最適
• RDFストアの作成=>トリプルおよびメタデータを保管する表のセットを作成
Curt Cotner
ownsCar
2012 Ferrari
Curt Cotner
ownsHouse
123 Maple Ave, Chicago
Curt Cotner
ownsBoat
2001 Thunderjet
• クエリー言語SPARQL 1.0 +1.1の一部をサポート
• 高いパフォーマンス
• 低コスト
• スキーマレスアプローチで速い開発
• ニーズの変化に応じて容易に対応
• トリプル向けのシンプルなデータ管理
34
© 2012 ISE Corporation
参考
RDF(Resource Description Framework)とは?
Subject:主語
predicate
述語
Object:目的語
 W3Cによる規格化
 RDF Primer
http://www.w3.org/TR/rdf-primer/
 情報を3つの要素で記述する方法:(主語、述語、目的語)
 それぞれのトリプル(3つの要素)は2つのものの関係性を表す
e.g.: ( IBM , is-a, Company)
 関係性はデータの一部、DB構造の一部ではない
 使い道としては
– スキーマやデータソースをまたがってクエリーやリンクする
– 構造化と非構造化データをリンクする
35
© 2012 ISE Corporation
RDFトリプル
参考
• RDFは様々な情報をトリプルと呼ばれる形式に解体するための一般的な方法
を提供する
• それぞれのトリプルは‟主語‟、‟述語‘、’目的語‘で構成される
• 主語と目的語は世の中の二つのものの名前を表している
• 述語はそれらの関係を表している
• 主語、述語、目的語はURI‟sとして与えられる
• 現実世界のものを表している
• 目的語はテキストとしても表すことができる
36
© 2012 ISE Corporation
参考
SPARQLとは?
• RDFで記述されたデータ群をクエリするための言語一式
• クエリ言語
• 結果セット記述
• プロトコル (SOAP, HTTP)
• W3C規格
• SPARQL Query Language for RDF
W3C Recommendation 15 January 2008
http://www.w3.org/TR/rdf-sparql-query/
• SPARQL 1.1 Query Language
W3C Working Draft 24 July 2012
http://www.w3.org/TR/sparql11-query/
• SQLライクな記述
• 操作対象がリレーショナルなエンティティではなくて、トリプルで記述されたグラフ構
造データ
• SELECT ?title
WHERE {<http://example.org/book/book1>
<http://purl.org/dc/elements/1.1/title> ?title . }
• RDFのデータ群からtitleを抜き出す
37
© 2012 ISE Corporation
参考
Relational vs. XML vs. RDF
Relational
XML
RDF
Tables
Trees
Graphs
二次元, 構造化データ
階層型データ
linkedデータ
表の行
ツリー構造の要素
トリプル
スキーマは固定
スキーマなし、または柔
軟
柔軟
SQL (ANSI/ISO)
XPath/XQuery (W3C)
SPARQL (W3C)
38
© 2012 ISE Corporation
pureXML機能強化
39
© 2012 ISE Corporation
DB2 pureXMLの歩み – V10.1機能強化
V10.1
V9.7
V9.5
機能強化
Inline格納
V9.1
pureXMLサポート
XML基本機能
XML列/索引
XQuery
部分更新
XSLT
スキーマ拡張
Replication
ウェアハウス対応
DPF
パフォーマンス強化
バイナリXML転送
XML索引タイプの追加
関数索引の追加
MDC
パーティション表
XDA圧縮
オンライン索引再編成/索引作成
UDF
Global Temporary Table
Load
各種ユーティリティ
40
© 2012 ISE Corporation
バイナリXML転送によるJavaクライアントのパフォーマンス向上
•
Extensible Dynamic Binary XML DB2 Binary XML Format (XDBX)
• XMLの送受信時にシリアライズしてテキストを用いるのではなく、
バイナリ形式を使用することにより、XML データの送受信速度向上する
• DriverManager, DataSourceインタフェースのxmlFormatプロパティ
で指定
• XML_FORMAT_BINARY(バイナリ形式による転送)
• XML_FORMAT_TEXTUAL(テキスト形式による転送:デフォルト)
import com.ibm.db2.jcc.DB2SimpleDataSource;
…
DB2SimpleDataSource ds = new DB2SimpleDataSource();
ds.setXmlFormat(DB2BaseDataSource.XML_FORMAT_BINARY);
• 利点
• SAX, DOMなどXML をバイナリでデータの送受信速度が速くなる
前提条件:Data Server Driver for JDBC and SQLJ のバージョン 4.9 以降を使用して、
DB2 V10.1 以降のサーバーに接続する必要がある
41
© 2012 ISE Corporation
XML索引タイプの追加
V9.7
•
数値型の索引はDOUBLEのみ
V10.1
•
INTEGERとDECIMAL型XML索引が追加
• 例
CREATE INDEX EMPINDEX ON COMPANY(COMPANYDOCS)
GENERATE KEY USING XMLPATTERN „/company/emp/@id‟
AS
SQL INTEGER
• 利点
• 数値データのタイプに合わせた索引データタイプを選択可能
42
© 2012 ISE Corporation
関数索引の追加
V10.1
•
大/小文字を区別しない検索における fn:upper-case で作成した索引の使用
• 例
CREATE INDEX clients_state_idx ON clients(contactinfo)
GENERATE KEYS USING XMLPATTERN '/Client/address/state/fn:upper-case(.)'
AS SQL VARCHAR(50);
XQUERY db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')
[Client/address/state/fn:upper-case(.)="NEW YORK"];
従来
•
あるパス内のストリング値を大文字小文字に関係なくすべての候補を検索するには、照会を使
用して検索対象のデータを大文字または小文字のいずれか一方に変換する必要があった
•
この照会では検索速度の向上に XML 索引を使用できなかった
• 利点
• オプティマイザーは、XMLPATTERN 節の XML パスとマッチングする述部を持ち、
fn:upper-case 関数も指定された照会で使用することを選択可能になる
43
© 2012 ISE Corporation
関数索引の追加
•
CREATE INDEX ステートメントの XMLPATTERN 節で fn:exists を組み
込むことによって、対象の要素や属性が存在するかどうかを検査する XML
索引を作成
•
要素や属性は fn:exists のパラメーターとして指定し、索引のタイプは
VARCHAR(1) とする
• 索引には単一文字 T または F が格納される
• 例
CREATE INDEX empindex on company(companydocs)
GENERATE KEY USING XMLPATTERN
'/company/emp/name/fn:exists(middle)' AS SQL VARCHAR(1);
XQUERY db2-fn:xmlcolumn('COMPANY.COMPANYDOCS')
/company/emp/name[fn:exists(middle)];
• 利点
• fn:existsを使用する照会で、索引を使用できることによりパフォーマンスが
向上する
44
© 2012 ISE Corporation
テキスト全文検索機能
- TextSearch機能強化 -
45
© 2012 ISE Corporation
テキスト全文検索機能の必要性
• テキスト全文検索機能って何のためのもの?
ISEという会社の情報を探し
たいけれど、(株)ISE?,
ISE(株)?, ISEシステム?
データベース
問題例)
1
2
3
4
5
1
2
3
4
5
A
箱崎システム(株)
株式会社幕張商事
(株)ISEシステムズ
フェレット
レストラン幕張
出目金
幕張観光
001
9876
2563
4521
011
1801
019
019
SELECT * FROM 会社表
where 会社名 LIKE „%ISE%‟
・LIKE検索では、件数、データ容量が増えてくると比例して遅くなる
・索引を作成しても前方一致以外の場合は、索引を全件参照するので遅い
・あいまい検索はできない 例えば、ise(小文字)など
・非定型のテキスト、半定型のXML文書内の語句を検索したいが、全体にリレーショナル索引を
張ることはできない
そこで、テキスト全文検索機能の出番!
46
© 2012 ISE Corporation
テキスト全文検索機能の特長
• 表に格納された文書データを、SQLでテキスト検索するた
めのオプション機能
• テキスト内のどこに検索語句が出現してもよい
• 大文字/小文字、全角/半角などを同じ文字列として検索
可能
• あいまい検索により、中黒の有無など表記のゆれを吸
収可能
• 同義語の登録により、同義語検索が可能
テキスト検索のパフォーマンスの向上/安定化
標準SQLでは対応の難しいあいまい検索などを簡単に実現可能
47
© 2012 ISE Corporation
DB2テキスト全文検索機能
あらかじめ作成された全文検索索引を
使用することにより、高速な検索を提
• テキスト全文検索機能の2つの局面
供する
• 索引作成:表のテキスト列の内容をparse(=tokenize)し、全文検索用テキスト
索引を作成する
検索
• 検索:SQL中からテキスト検索を行う
“Manches
ter”を含む
レコード
は?
DB2
テキスト検索
テキスト全文検索
表
索引
作成
DB
PK
Text
1
Text Search is an
extension for DB2.
2
Kagawa moves to
Manchester United.
3
48
・・
全文検索用テキスト索引
PK
キーワード(token)
1
Text search extension
DB2
2
Kagawa move
Manchester United
select * from Table1 where contains(TEXT, '"Manchester"')=1
© 2012 ISE Corporation
SQL vs テキスト全文検索
• SQLでの検索
• LIKE句
• 索引総スキャン
• LIKEでの後方一致、中間一致はパフォーマンス劣化の要因になる
• テキスト全文検索
• CONTAINS関数などSQLを拡張
• テキスト構文解析(Parse)された索引を使用するため検索パフォー
マンスがよい
• スコア・ファジー検索などの高度な検索機能あり
• テキスト索引の運用が必要
• リアルタイムでの検索は不可
• 索引の更新タイミングは、通常DBレコードの更新と同期しない
49
© 2012 ISE Corporation
DB外の検索エンジン vs DB2テキスト全文検索
• DB外の検索エンジン(OmniFindなど)
• 多種多様のデータソース、文書タイプを検索可能
• CrawlerとIndexerがインデックスを作成
• 高品質な分かち書き処理(形態素)
• ハイパフォーマンス、大規模索引への対応
• セキュリティ強化
• ランキング、など高度な検索が可能
• DBと組み合わせるためにはDB外エンジンでの検索結果とDBのアクセス
(SQL)を組み合わせる必要がある
• DB2テキスト全文検索
• 対象はDB2のみ
• DB2ネイティブの機能
• 限られた文書タイプのみを対象
• SQLで検索できる
50
© 2012 ISE Corporation
IBMのテキスト全文検索の歴史
1997
V5
2000
2001
2002
TE(RDBエンジン+GTR)
全文検索エンジンは
大和研究所開発の
GTR
検索結果をキャシュに
載せる
APIはSP
V7.2
×
2012
旧NSE, TIEの機能を
統合
V8.1&V8.2&V9
NSE
NSE
V7
2008
V10で
非推奨
TIE
APIはSQL
スカラー関数
(containsなど)
V9.5FP1
Text Search
V10.1
TE:テキストエクステンダー
TIE:テキスト情報エクステンダー
NSE: Net Search Extender
51
© 2012 ISE Corporation
DB2 Text Searchの特徴
• DB2に統合された検索エンジン
• DB2本体のインストーラーでインストール可能
• 形態素/N-gramによるParsingの選択が可能
• 複数の文書フォーマットのサポート
• XML、TEXT、HTML
• DB2のクエリーとの統合
• SQLでの検索
• XQueryでの検索
• XPathライクの位置指定
• 属性の値比較
• DB2オプティマイザーによる最適化
• ストアード・プロシージャーによる管理
• テキスト索引の作成、更新、削除など
• JDBC Type4で管理可能
52
© 2012 ISE Corporation
参考
Parser(構文解析)
• Parserとはトークンパーシングを意味する
• Tokenizeとも呼ばれる
• 英語など、分かち書き(単語の間がスペースで区切られてい
る)の言語では、索引に登録するべき文字列(単語)を決める
のは容易
• 日本語や中国語のように、単語の区切れ目が機械的には分
からない言語では、コンピューターが何らかの処理を施して単
語の区切れ目を決める必要がある
• 著名な検索エンジンであっても、構文解析で日本語対応して
いなければ日本語のキーワード抽出は難しい
53
© 2012 ISE Corporation
様々な構文解析の方式
参考
方式
概要
文字成分表方式
文字成分表を使って絞り込み候補を絞って行う解析
方式
意味を持つ最小構成の「形態素」に分解して解析を
行う方式。表記ゆれや語尾変化などに対応
形態素解析の1形態。自立語と付属語を考慮して分
解するため、より自然語処理に向く
先頭からN文字の文字列を1単位として扱い、それを
1文字づつずらしてIndex登録を行う高速な方式
文書のすべての文字から始まる文末までの文字列
を半無限部分文字列としてIndex化する方式
Webページの内容やコンテンツの話題について、類
似している者を探し出す方式。レコメンドなどに採用
形態素解析方式
分かち書き方式
N-Gram方式
パトリシアツリー方式
概念検索方式
54
© 2012 ISE Corporation
形態素解析
•
形態素解析とは、ある文章を単語に分割する処理を指す
•
例えばMeCabという形態素解析エンジンでは、「我輩は猫である。」という文
は「我輩/は/ 猫/で/ある/。」に分割される。このように日本語として
自然に分割されるために、特定の単語を検索する用途には非常に向いてい
る
•
ただし、解析には 形態素解析エンジンの他に、品詞や活用などの情報を含
む日本語辞書が必要となる。したがってこの辞書に記述されていない単語
(流行語など)の検出は困難となる。
•
形態素解析エンジンは下記のものが知られている
• MeCab
55
http://mecab.sourceforge.jp/
• ChaSen
http://chasen.naist.jp/hiki/ChaSen/
• JUMAN
http://nlp.kuee.kyoto-u.ac.jp/nl-resource/juman.html
• KAKASI
http://kakasi.namazu.org/
© 2012 ISE Corporation
N-gram方式
• N-gram方式とは、対象の文章をある数Nごとに機械的に分
割して文章を解析する手法
• 例えば「我輩は猫である。」をN=2で解析すると、「我輩、輩
は、は猫…」のように分割される。この場合N=2で、Bigram方式と呼ばれる
• この方式の場合、「東京都」を含む文章から「京都」で検索す
るとヒットしてしまったり、「都」で検索することが困難であると
いう問題がある
• 一方、辞書を必要とせず、処理が高速であるという長所もある
56
© 2012 ISE Corporation
参考
Lucene
• 代表的なオープンソース全文検索エンジン
• Javaで書かれた全文検索APIで、Jakartaプロジェクトによって開発
• ラ イセンスはApache License2.0
• http://lucene.apache.org/
• インデックスは独自のファイル形式に保存する
• 海外で開発されているため、そのままでは日本語に対応していない
が、日本語形態素解析エンジンと組み合わせて日本語対応可能
• Senというライブラリを追加利用することにより、日本語の形態素
解析を利用した検索が可能となる。Senは、形態素解析エンジン
MeCabのJavaポーティング。
• Javaの開発環境さえあれば、独自のアプリケーションに簡単に全文
検索機能を追加することが可能。
57
© 2012 ISE Corporation
DB2 Text Searchの構成(DB2統合構成)
DB2インスタンス
Enable database
コマンドで作成
DB
TSカタログ表
ユーザー表
・クエリー
・管理コマンド
Text Search Server
create index
コマンドで作成
テキスト
索引
1インスタンス
に1つ構成
要TCP/IPポート
ファイルシステ
ムに格納
58
© 2012 ISE Corporation
DB2 Text Searchの構成選択肢
1. 統合 DB2 Text Search サーバーのセットアップ
2. スタンドアロン DB2 Text Search サーバーのセットアップ
3. DPFでのスタンドアロン DB2 Text Search サーバー・セットアップ
59
© 2012 ISE Corporation
DB2 Text Search概要(使用の流れ)
基本的にNSEと同様
db2icrt
configTool
インスタンス作成、Text Search構成
db2start
db2ts start for text
インスタンス、Text Search Server開始
Text Search(TS)構成にはdb2setupやconfigToolを使用
NSEとの同居可能
create db
db2ts enable db for text
DB作成、DBでText Search有効化
NSEが有効なDBでTSの同時enable可
TSが有効なDBでNSEの同時enable不可
create table
db2ts create index for text
データ挿入、クエリ
表作成、テキスト索引作成
要Primary Key
trigger
staging表
db2ts update index for text
60
データ挿入(staging表に挿入される)
*MQTを使用する方法もあり
クエリ(contains関数など)
テキスト索引更新(差分)
staging表から非同期による更新
© 2012 ISE Corporation
参考
Text Searchの構成方法
1. 導入時に自動的に構成する
2. 導入後にインスタンスに対して構成する
•
Windowsでは、db2icrt, db2iupdtで/j “TEXT_SEARCH”
パラメータを指定してText Searchの構成が可能
•
Linux, UNIXでは、db2isetupでText Searchの構成が可能
• Linux, UNIXでは、db2icrt, db2iupdtでのText Search構成は
できない
3. configToolコマンドを使って構成する
* Text SearchはzLinuxでサポートされないので注意!
61
© 2012 ISE Corporation
DB2 Text Searchの管理コマンド(代表例)
• Text Search Serverの開始/停止
• db2ts start for text
• db2ts stop for text
• DBのEnable/Disable
• db2ts enable database for text
• db2ts disable database for text
• 索引の作成/変更/更新/削除
• db2ts create index indname for text on tabname(col)
• db2ts alter index indname for text update frequency none
• db2ts update index indname for text
• db2ts drop index indname for text
• コマンド・ロックの消去(管理コマンドの不正終了で残ってしまったロックを消去)
• db2ts clear command locks for index indname for text
• イベントの消去
• db2ts clear events for index indname for text
• 表削除やDB削除により残ってしまったテキスト索引の消去
• db2ts cleanup for text
62
© 2012 ISE Corporation
DB2 Text Searchによる検索
• CONTAINS関数
•
SELECT author, story FROM books
WHERE CONTAINS (story, „“cat”, RESULTLIMIT=10‟) = 1
• SOCRE関数
• with temptable (col1,score) as (select col1,score (col2,'"XML"') from tabj)
select * from temptable where score > 0 order by score desc ;
•
テキスト検索索引を検索し、列内の他の文書と比較した場合の関連性スコアを戻す
• CONTAINS関数(XML文書内)
•
SELECT chapter FROM books
WHERE CONTAINS(chapter,'@xpath:''/chapter/title[. contains ("DB2")]''') = 1
•
属性に対して、値の比較が可能(<、>、=、>=、<=の使用)
•
".."(一つ上の階層)や"*"(アスタリスク)は使用できない。"//"は使用可
• db2-fn:xmlcolumn-contains関数(XQuery)
•
@xpathの部分はCONTAINS関数と同じ
•
xquery
for $i in db2-fn:xmlcolumn-contains('BOOKS.CHAPTER','@xpath:''/chapter[./title contains("DB2")
and ./@number <= 10]''')
return $i
63
© 2012 ISE Corporation
シノニム辞書の使用
• 異音同義語の追加が可能
• XMLにより辞書を作成
• ツールを使用して辞書を登録
• synonymTool importSynonym -synonymFile d:¥Shared¥syn1.xml -collectionName
TSINST_SAMPLE_TS574301_0000 -replace true -configPath "C:¥Documents and Settings¥All
Users¥Application Data¥IBM¥DB2¥DB2COPY2¥TSINST¥db2tss¥config"
• クエリー時にシノニム辞書使用を指定
• select id from db2inst1.testtable where contains(item,'@xpath:''/root/aaa[.contains("スイーツ
")]''','SYNONYM=ON')>0;
<?xml version="1.0" encoding="UTF-8"?>
<synonymgroups version="1.0">
<synonymgroup>
<synonym>ball</synonym>
<synonym>globe</synonym>
<synonym>sphere</synonym>
<synonym>orb</synonym>
</synonymgroup>
<synonymgroup>
<synonym>スイーツ</synonym>
<synonym>スウィーツ</synonym>
</synonymgroup>
</synonymgroups>
64
© 2012 ISE Corporation
Net Search Extender(NSE)との比較
• DB2 Text Searchが優れている点
• 形態素解析あり
• XML検索時の属性の値比較が可能( ./@id >= 10 )
• ストアード・プロシージャーによる管理コマンド発行
• NSEのみでサポートされる機能
• Highlighting (HIGHLIGHT関数)
• ストアード・プロシージャー検索
• ドキュメントモデル
• View、Nicknameへの対応
• 事前ソート指定
65
© 2012 ISE Corporation
DB2 V10.1におけるText Searchの新機能(1)
• 検索オプションの追加
• Fuzzy
• proximity(近接検索)
• A proximity search retrieves documents containing search words which are located within a
specified distance from each other.
同じ文または同じ段落内でのワードに対する近接検索(NSE)
• queryExpansionLimit構成パラメータ
• ワイルドカード検索の展開上限値の設定
• 形態素解析のサポート
•
Chinese, Japanese, Korean
• サポートされる構成の拡張
• DPF
• 索引はパーティション毎に分割される
• パーティション表
• 索引は一つのパーティション表全体で単一の索引となる
• MDC
• DPF, パーティション表, MDCの組み合わせ可
66
© 2012 ISE Corporation
DB2 V10.1におけるText Searchの新機能(2)
• 新しい導入形態
• スタンドアローンText Searchサーバー
• Text Search専用のサーバーを持つことにより
•
•
•
•
より高負荷な状況での使用が可能
Text Search独自での資源の管理とチューニングの実施
ログ、トレースの管理
DPF環境では、負荷分散のためにスタンドアローン構成が適切な場合がある
• Text Search用新管理者
• Instance ownerに依存しない
• Fence userがprimaryグループである必要はない
• Text Search Administrator (SYSTS_ADM) – データベースレベルの権限
• Text Search Manager (SYSTS_MGR) – 索引の権限
• Text Search User (SYSTS_USR) – ユーザー権限(Text Searchカタログにアク
セスできる)
• 管理タスクスケジューラ
• 索引更新
67
© 2012 ISE Corporation
まとめ
68
© 2012 ISE Corporation
まとめ:ビッグデータを含めた多様なデータへの対応(1)
• Federation機能拡張
• pureScaleサポート
• Three Part NameによるOracle互換性および使い易さの向上
• Netezzaへのサポートの強化
• Hadoopへの対応
• Java ジェネリック 表関数によりHadoopとDB2を連携
• Javaジェネリック表関数では表関数の作成時ではなく、実行時に
出力フォーマットが決定できるように機能を強化
• 様々な出力形式に対応するための労力の軽減
• エンドユーザーとアプリケーションが、様々なリソースからデータを取
り込んで、複雑なレポートや分析を行う際の容易性が向上
69
© 2012 ISE Corporation
まとめ:ビッグデータを含めた多様なデータへの対応(2)
• RDFアプリケーション開発のサポート
• RDFトリプルのためのストアの提供
• SPARQLのサポート
• pureXML機能強化
• 以下によるパフォーマンス機能強化
• バイナリ形式によるデータの伝送
• 索引データタイプの追加
• 関数索引のサポート
• テキスト全文検索機能 –TextSearch
• 形態素解析による索引付けが可能
• 非定型のテキストデータでは全文検索機能は重要
70
© 2012 ISE Corporation
Fly UP