Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
© 2012 ISE Corporation 1
7. ビッグデータを含めた多用なデータへの対応
<第1.00版 2012年 9月>
本資料掲載事項は、ある特定の環境・使用状況においての正確性がIBMによって確認されていますが、すべての環境において同様の結果が得られる保証はありません。これらの技術を自身の環境に適用する際には、自己の責任において十分な検証と確認を実施いただくことをお奨めいたします。 © Copyright IBM Japan Systems Engineering Co., Ltd. 2012
© 2012 ISE Corporation 2
• DB2 V10.1 – 広がるDB2の世界
• Federation機能強化
• Hadoopへの対応
• RDFアプリケーション開発のサポート
• pureXML機能強化
• テキスト全文検索機能 – Text Search機能強化
• まとめ
内容
© 2012 ISE Corporation 3
DB2 V10.1 – 広がるDB2の世界
ニックネーム
Federation
DB2 V10.1
他のDBや非DBデータに透過的にアクセス
DB2ファミリー
他RDBMS
非RDB(参照のみ)
ファイル、表形式シートなど
DB2 pureXML
リレーショナルデータに加えXMLをネイティブサポート テキスト全文検索
“DB2”を含むレコードは?
HDFSとの連携強化
セマンティックWeb
RDF/SPARQLのサポート
データソースの多様化 – 他RDBMS, ビッグデータ(HDFS)
データ形式多様化 – 定型データから非定型データへ
© 2012 ISE Corporation 4
Federation機能強化
© 2012 ISE Corporation 5
• DB2 pureScaleとの統合
• Three Part Name
• Netezza サポートの強化
IBM InfoSphere Federation Server V10.1 新機能
© 2012 ISE Corporation 6
DB2 pureScaleとの統合
© 2012 ISE Corporation 7
DB2 pureScaleとの統合
• Federation Server を使用して、DB2 pureScale データベースを拡張できるようになりました
・全てのメンバーに、データソースのクライアント(クライアント・ライブラリー)の導入が必要。
・work load balance (WLB) や automatic client reroute (ACR) も利用可能で、Federationのための特別な設定は不要。(Federationを利用していないときと同様に、db2dsdriver.cfgに設定すればよい)
・GA時点では、フェデレーション XMLと F2PC はサポートされていません。
Clients
Fed
eratio
n S
erver
Oracle
SQL server
Sybase
Netezza
© 2012 ISE Corporation 8
Three Part Name
© 2012 ISE Corporation 9
Three Part Name(1)
• ニックネームを作成しないでリモートオブジェクトにアクセス可能になりました
• 以下の2通りの書き方が可能
• <サーバー>.<リモートスキーマ>.<リモートオブジェクト>
• <リモートスキーマ>.<リモートオブジェクト>@<サーバー> (*1)
(*1) DB2_COMPATIBILITY_VECTORレジストリ変数をビット0x20000か、ORAに設定が必要
これまでの手順 Three Part Nameを使った手順
①CREATE WRAPPER
②CREATE SERVER
③CREATE USER MAPPING
④CREATE NICKNAME N1 FOR ORA11.SCOTT.T1
⑤SELECT * FROM N1
④SELECT * FROM ORA11.SCOTT.T1
ここまでは同様の手順で、いずれの方法でも連合オブジェクトを作成する(Nickname以外)
リモートオブジェクトへのアクセスまでの手順が、以下の通り簡略化されます。
CREATE SERVERで作成したサーバー名 リモートスキーマ名
アクセスするリモート・オブジェクト名
© 2012 ISE Corporation 10
Three Part Name(2)
• メリット
• Oracle互換性
• OracleのDBLINKの構文の変更が不要
• ニックネーム管理・保守が不要
• ニックネームの作成が不要
• NNSTATや、Index、Column情報の更新不要
© 2012 ISE Corporation 11
Three Part Name
• サポート
• DPF、PureScale環境
• 全てのリレーショナル・データソース
• 操作
• SELECT
• INSERT,UPADTE,DELETE
• CREATE VIEW
• MERGE(リモート表をターゲットにすることは出来ない) • UNION,INTERSECT
• スキーマがサポートしていないデータソースでは2部構成(Server_name.Obeject_name)
• NICKNAMEを使用すべきケース
• 非リレーショナル
• 索引、制約の作成
• オブジェクトレベルで許可、特権の制御
• 統計情報の更新(nnstatの使用)
※データタイプのマッピングの変更は、3PartNameでも可能
• Viewを作成する
• キャスト関数をつかう
参考
© 2012 ISE Corporation 12
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.*.*
参考
© 2012 ISE Corporation 13
Three Part Name
• 以下の機能はサポートされない
• 静的SQL, 関数, トリガー, ストアドプロシージャ
• DDL (CREATE ALIAS, CREATE INDEX, ALTER TABLE等)
• NNSTATによる統計情報収集
• MQT
参考
© 2012 ISE Corporation 14
Netezza サポートの強化
© 2012 ISE Corporation 15
Netezzaサポートの機能強化
• ODBCラッパーでのNetezzaデータソースアクセスの最適化
• Netezzaデータソースに対して、ODBCラッパーでのアクセス構成を行う場合、ODBCラッパーは、NetezzaのODBCドライバーを検出して、自動的にパフォーマンスオプションを構成します。
• 追加設定を行わなくても、Pushdownが行われる設定となっています。
• 基本的な関数については関数マッピングも行われています。
• Bulk Insertが使用可能
• サーバーオプションENABLE_BULK_INSERTをYに設定することで、Netezzaのニックネームに対する複数行を処理するINSERTをBulk
Insertで行うことが出来るようになります。
ODBC Wrapper
ODBC Driver Manager Federated DB
ODBC Driver Netezza SQL
© 2012 ISE Corporation 16
Bulk Insert
• Bulk Insert
• Bulk Insertを使用することで、リモートのデータソースに対して大量行数を高速に処理することが出来ます。
• Bulk Insertの設定方法
• サーバーオプション:ENABLE_BULK_INSERTをYに設定
• create server文またはalter server文で設定可能
• 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
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‘)
© 2012 ISE Corporation 17
Netezzaデータソース設定例(Windows)
• WindowsのODBC データソース アドミニストレータからNetezzaのDSNは登録済み
C:¥work¥netezza>db2 list system odbc data sources System ODBC Data Sources Data source name Description -------------------------------- ---------------------------------------- NZDB NetezzaSQL ora11g Oracle in OraDb11g_home1 C:¥work¥netezza>db2 -tvf setupodbc.sql drop wrapper odbc DB20000I The SQL command completed successfully. create wrapper odbc DB20000I The SQL command completed successfully. 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() VERSION ---------------------------------------------------------------------------------------------------------------------- Release 6.0.2 [Build 17169] 1 record(s) selected. SET PASSTHRU RESET DB20000I The SQL command completed successfully.
DSNの登録を確認
デフォルトラッパー名のODBCを使用しているためLIBRARY
句の指定を省略
NODEにDSN名を指定
パススルーセッションでNetezzaサーバーのバージョンを確認
参考
© 2012 ISE Corporation 18
Netezzaデータソース Pushdownの例
• db2explnでPushdownされているSQLを確認 C:¥work¥netezza>db2 "select char(option,20) option,char(setting,20) setting from syscat.serveroptions" OPTION SETTING -------------------- -------------------- NODE NZDB ENABLE_BULK_INSERT Y 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 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
サーバーオプションはNODEとENABLE_BULK_INSERTのみ
COUNT関数、WHERE句、GROUP BY句がPushdownされている
参考
© 2012 ISE Corporation 19
パフォーマンスデータ
• Bulk insertが有効と無効のケースで、大量行数のInsertを実施し、処理時間を比較
• Data: 200000 rows(10mb data)
• Network latency:200 ms
• SQL statement:insert into nickname1 select * from nickname2
• Note: the performance improvement mostly rely on the network communication.
Normal Insert: Bulk Insert:
Several hours done all
inserts
Over 600 rows for one bulk
insert
Several minutes done all
inserts
参考
© 2012 ISE Corporation 20
Bulk 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. alter server NZDB options (set ENABLE_BULK_INSERT 'Y') DB20000I The SQL 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. get snapshot for remote_databases on feddb Remote Database Snapshot Remote datasource name = NZDB Database name = FEDDB Connects = 1 Disconnects = 0 Commits = 0 Rollbacks = 0 Queries = 0 Inserts = 2 Updates = 0 Deletes = 0 Create nicknames = 0 Passthrus = 0 Stored procedures = 0 Rows returned = 0 Rows updated = 0 Rows deleted = 0 Rows inserted = 1000 Rows returned by Stored procedures = 0 Failed statements = 0 Query time (ms) = 0 Insert time (ms) = 3196 Update time (ms) = 0 Delete time (ms) = 0 Create nickname time (ms) = 0 Passthru time (ms) = 0 Stored procedure time (ms) = 0
delete from tab1 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. insert into tab1 select * from local DB20000I The SQL command completed successfully. get snapshot for remote_databases on feddb Remote Database Snapshot Remote datasource name = NZDB Database name = FEDDB Connects = 1 Disconnects = 0 Commits = 0 Rollbacks = 0 Queries = 0 Inserts = 1000 Updates = 0 Deletes = 0 Create nicknames = 0 Passthrus = 0 Stored procedures = 0 Rows returned = 0 Rows updated = 0 Rows deleted = 0 Rows inserted = 1000 Rows returned by Stored procedures = 0 Failed statements = 0 Query time (ms) = 0 Insert time (ms) = 574641 Update time (ms) = 0 Delete time (ms) = 0 Create nickname time (ms) = 0 Passthru time (ms) = 0 Stored procedure time (ms) = 0
1000行のデータをローカル表にInsert
ローカル表からNetezza
のニックネームにInsert
Bulk Insertを使用
した場合には、Insertされた行数は1000行となって
いるがリモートデータソースに発行したInsert回数は2回となっている
Bulk Insertを使
用していない場合には、リモートデータソースに発行したInsert
回数も1000回となっている
参考
© 2012 ISE Corporation 21
Hadoopへの対応
© 2012 ISE Corporation 22
ビッグデータの分析力強化
• ビジネス分析のために収集されるデータの分量や種類は増大している
• 非常に大量で複雑なデータを新しいフレームワークで
処理することが可能に
• 新しいフレームワークに従来のBIシステムを効果的に統合するにはどうすればよいか?
非構造化データの使用量増大
© 2012 ISE Corporation 23
BigInsightsとDB2(RDB)連携
• DB2からのBigInsightsアクセス
• JaqlSubmit : SQLインターフェースからJaqlの実行が可能
• HdfsRead : HDFS上のデータをSQLにてよって表形式で取得可能
• BigInsights(Jaql)からのDB2(RDB)アクセス
• JaqlからDB2へのデータ読み書き可能
• DB2/InfoSphere Warehouseの他、Netezza、Informix、Oracle、Teradataとの連携サポート
Hadoop/Jaql
顧客 時間
場所
取引履歴
店舗
JaqlSubmit
HdfsRead
HDFS
.CSV
files
.log
data
レポーティング
ツール
(Cognosなど)
JaqlからDB2への読み書き
© 2012 ISE Corporation 24
BigInsightsとDB2連携のユースケース(1)
• 既存のSQLベースのツールからHadoopの分散処理基盤を活用
JaqlSubmit UDF HDFSRead UDF
SQL
DB2 Cubing services
Jaql client
Jaql server
Web log data on Hadoop HDFS
InfoSphere Warehouse
InfoSphere BigInsights
© 2012 ISE Corporation 25
BigInsightsとDB2連携のユースケース(2)
• 巨大データウェアハウスのデータをHadoop(HDFS)にオフロード
• 古いデータを分散ファイルシステムへ移行し、ストレージコスト削減
• DB2からHDFSへのデータコピー、DB2側の消しこみ処理をJaqlのジョブで実行
• 移動したデータはSQLから透過的に参照可能
• HDFS_READを使い、アーカイブ先のファイルを参照するビューを定義
Hadoop分散ファイルシステム(HDFS)
InfoSphere BigInsights DB2
2011/3Q
2011/2Q
2011/4Q
古いデータの アーカイブ
HDFS_READを利用した ビューを定義
2011/1Q
2011/1Q
© 2012 ISE Corporation 26
• UDFを使ったクエリーを介してHadoopの結果を取り込み使用する
• UDFはDB2の分析jobやSQLベースの分析用アプリケーションで使用可能
• 今までは、ビジネス要件の変更や様々なデータフォーマット毎に対応するために、いくつものUDFを使用してそれぞれ結果セットを生成していた
• V10の汎用表関数を使用することで分析処理をシンプルにすることが可能に!
DB2V10におけるビッグ・データの分析力強化
(3)
(2)
(1)
UDFs
© 2012 ISE Corporation 27
• V10より、新しく実行時に出力形式を指定することができる表関数が提供された
•今まで別々のソースからデータを読み込むためには各ソースに対応したUDFを作成する必要があった
• 汎用表関数を使用すれば、同じUDFを使って別々のソースから読み込むことが可能
汎用表関数
UDF実行時に出力形式や参照ファイルを指定することができる関数が登場した
DB2 10 新機能 !!
JAVA ジェネリック 表関数
file1
file3
file2
出力1
出力2
出力3
© 2012 ISE Corporation 28
Java 汎用表関数
• Javaで記述された外部ユーザー定義表関数
• 外部: DB2外でプログラミングされ実装されているプログラム
• 表関数: 結果セットとして返される機能(例えば. 複数行のセットがひとつの結果で戻される)
• なぜ ‘ジェネリック’ ?
• 実行時に様々なフォーマットを決定して出力することが可能
• 出力パラメーターはCREATE FUNCTION DDL ステートメントでは指定しない
• 関数からの出力はSQLのSELECTステートメントでアクセス可能
• SELECTステートメントで違う結果セットにフォーマットして戻すことが可能
JAVA ジェネリック 表関数
file1
file3
file2
出力1
出力2
出力3
© 2012 ISE Corporation 29
Hadoopとの連携
• Java Generic Table Function(実行時に出力フォーマットを決定可能)
• V9.7以前のユーザー定義表関数は、定義時に出力フォーマットを定義する必要があった。
CREATE FUNCTION HDFS_READ
( VARCHAR(3000) )
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
CREATE FUNCTION HADOOPCSVREAD(VARCHAR(255), INTEGER,
VARCHAR(255))
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 30
汎用表関数の作成方法
• CREATE FUNCTIONステートメント内での使い方
• 事前に外部プログラムの作成・コンパイルを行い、sqllib/function以下にクラスファイルのコピーを行う(通常外部プログラムを使ったUDFと同様)
• 以下の例では、‟csvRead‟というUDF名で登録 CREATE FUNCTION csvRead(fnme VARCHAR(255),coltype VARCHAR(255)) RETURNS GENERIC TABLE EXTERNAL NAME ‘UDFcsvReader.jar:UDFcsvReader!csvReadString’ LANGUAGE JAVA PARAMETER STYLE DB2GENERAL;
DB2マネージャーがUDFを実行するための外部コードを指定
表関数の出力を実行時に決定することを記述
RETURNS GENERIC TABLEを指定する場合、以下の指定が必須 LANGUAGE JAVA PARAMETER STYLE DB2GENERAL
© 2012 ISE Corporation 31
汎用表関数の使用方法
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句で表に含まれる列名とデータタイプを指定する
• 同じUDFを使ったselectステートメントで、別の表からもデータの取得が可能
Table Function
前頁で登録したUDFをコール
© 2012 ISE Corporation 32
汎用表関数の実行例
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 LAST AGE SALARY ID RAND_DOUBLE ----------------------- ---------- ------ ----------- -------------------- ------------------------ John Doe 26 46000 56255333387 +5.32340983000000E+004 Jack McGinnis 42 650 482525320 +2.34532320500000E+002 2 レコードが選択されました。 select * from table(csvRead('C:¥Program Files¥IBM¥SQLLIB_v10¥v10test/test1.csv')) as T(first
varchar(23), age smallint, last varchar(10)) FIRST AGE LAST ----------------------- ------ ---------- Chris 78 Weed Jonathan 11 Thompson "JJ ""Demo""" 66 Michel Steve 88 Arnold 0 Blankman 5 レコードが選択されました。
同じUDFを使用
異なるcsvファイルから データを読み込んでいる
参考
© 2012 ISE Corporation 33
RDFアプリケーション開発のサポート
© 2012 ISE Corporation 34
DB2 V10.1 RDFストアおよびSPARQLのサポート
• DB2 RDFストア
• RDFのグラフトリプルの格納にはDB2が最適
• RDFストアの作成=>トリプルおよびメタデータを保管する表のセットを作成
• クエリー言語SPARQL 1.0 +1.1の一部をサポート
• 高いパフォーマンス
• 低コスト
• スキーマレスアプローチで速い開発
• ニーズの変化に応じて容易に対応
• トリプル向けのシンプルなデータ管理
Curt Cotner 2012 Ferrari ownsCar
Curt Cotner 123 Maple Ave, Chicago ownsHouse
Curt Cotner 2001 Thunderjet ownsBoat
© 2012 ISE Corporation 35
RDF(Resource Description Framework)とは?
Subject:主語 Object:目的語 predicate
述語
W3Cによる規格化
RDF Primer
http://www.w3.org/TR/rdf-primer/
情報を3つの要素で記述する方法:(主語、述語、目的語) それぞれのトリプル(3つの要素)は2つのものの関係性を表す
e.g.: ( IBM , is-a, Company)
関係性はデータの一部、DB構造の一部ではない
使い道としては – スキーマやデータソースをまたがってクエリーやリンクする
– 構造化と非構造化データをリンクする
参考
© 2012 ISE Corporation 36
RDFトリプル • RDFは様々な情報をトリプルと呼ばれる形式に解体するための一般的な方法を提供する
• それぞれのトリプルは‟主語‟、‟述語‘、’目的語‘で構成される
• 主語と目的語は世の中の二つのものの名前を表している
• 述語はそれらの関係を表している
• 主語、述語、目的語はURI‟sとして与えられる
• 現実世界のものを表している
• 目的語はテキストとしても表すことができる
参考
© 2012 ISE Corporation 37
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を抜き出す
参考
© 2012 ISE Corporation 38
Relational vs. XML vs. RDF
Relational XML RDF
Tables Trees Graphs
二次元, 構造化データ 階層型データ linkedデータ
表の行 ツリー構造の要素 トリプル
スキーマは固定 スキーマなし、または柔軟
柔軟
SQL (ANSI/ISO) XPath/XQuery (W3C) SPARQL (W3C)
参考
© 2012 ISE Corporation 39
pureXML機能強化
© 2012 ISE Corporation 40
DB2 pureXMLの歩み – V10.1機能強化
V9.1
pureXMLサポート
XML基本機能
XML列/索引
XQuery
各種ユーティリティ
V9.5
機能強化
Inline格納
部分更新
XSLT
スキーマ拡張
Replication
Load
V10.1
パフォーマンス強化
バイナリXML転送
XML索引タイプの追加
関数索引の追加
V9.7
ウェアハウス対応
DPF
MDC
パーティション表
XDA圧縮
オンライン索引再編成/索引作成
UDF
Global Temporary Table
© 2012 ISE Corporation 41
バイナリXML転送によるJavaクライアントのパフォーマンス向上
• Extensible Dynamic Binary XML DB2 Binary XML Format (XDBX)
• XMLの送受信時にシリアライズしてテキストを用いるのではなく、
バイナリ形式を使用することにより、XML データの送受信速度向上する
• DriverManager, DataSourceインタフェースのxmlFormatプロパティで指定
• XML_FORMAT_BINARY(バイナリ形式による転送)
• XML_FORMAT_TEXTUAL(テキスト形式による転送:デフォルト)
• 利点
• SAX, DOMなどXML をバイナリでデータの送受信速度が速くなる
前提条件:Data Server Driver for JDBC and SQLJ のバージョン 4.9 以降を使用して、
DB2 V10.1 以降のサーバーに接続する必要がある
import com.ibm.db2.jcc.DB2SimpleDataSource;
…
DB2SimpleDataSource ds = new DB2SimpleDataSource();
ds.setXmlFormat(DB2BaseDataSource.XML_FORMAT_BINARY);
© 2012 ISE Corporation 42
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
© 2012 ISE Corporation 43
関数索引の追加
V10.1
• 大/小文字を区別しない検索における fn:upper-case で作成した索引の使用
• 例
従来
• あるパス内のストリング値を大文字小文字に関係なくすべての候補を検索するには、照会を使用して検索対象のデータを大文字または小文字のいずれか一方に変換する必要があった
• この照会では検索速度の向上に XML 索引を使用できなかった
• 利点
• オプティマイザーは、XMLPATTERN 節の XML パスとマッチングする述部を持ち、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"];
© 2012 ISE Corporation 44
関数索引の追加
• CREATE INDEX ステートメントの XMLPATTERN 節で fn:exists を組み込むことによって、対象の要素や属性が存在するかどうかを検査する XML 索引を作成
• 要素や属性は fn:exists のパラメーターとして指定し、索引のタイプは VARCHAR(1) とする
• 索引には単一文字 T または F が格納される
• 例
• 利点
• fn:existsを使用する照会で、索引を使用できることによりパフォーマンスが向上する
XQUERY db2-fn:xmlcolumn('COMPANY.COMPANYDOCS')
/company/emp/name[fn:exists(middle)];
CREATE INDEX empindex on company(companydocs)
GENERATE KEY USING XMLPATTERN
'/company/emp/name/fn:exists(middle)' AS SQL VARCHAR(1);
© 2012 ISE Corporation 45
テキスト全文検索機能
- TextSearch機能強化 -
© 2012 ISE Corporation 46
テキスト全文検索機能の必要性
• テキスト全文検索機能って何のためのもの?
問題例)
・LIKE検索では、件数、データ容量が増えてくると比例して遅くなる
・索引を作成しても前方一致以外の場合は、索引を全件参照するので遅い
・あいまい検索はできない 例えば、ise(小文字)など
・非定型のテキスト、半定型のXML文書内の語句を検索したいが、全体にリレーショナル索引を張ることはできない
データベース
1 A 001
2
3
4 フェレット 011
5 出目金 019
1 箱崎システム(株) 9876
2 株式会社幕張商事 2563 3 (株)ISEシステムズ 4521
4 レストラン幕張 1801
5 幕張観光 019
ISEという会社の情報を探したいけれど、(株)ISE?,
ISE(株)?, ISEシステム?
SELECT * FROM 会社表
where 会社名 LIKE „%ISE%‟
そこで、テキスト全文検索機能の出番!
© 2012 ISE Corporation 47
テキスト全文検索機能の特長
• 表に格納された文書データを、SQLでテキスト検索するためのオプション機能
• テキスト内のどこに検索語句が出現してもよい
• 大文字/小文字、全角/半角などを同じ文字列として検索可能
• あいまい検索により、中黒の有無など表記のゆれを吸収可能
• 同義語の登録により、同義語検索が可能
テキスト検索のパフォーマンスの向上/安定化
標準SQLでは対応の難しいあいまい検索などを簡単に実現可能
© 2012 ISE Corporation 48
DB2テキスト全文検索機能
• テキスト全文検索機能の2つの局面
• 索引作成:表のテキスト列の内容をparse(=tokenize)し、全文検索用テキスト索引を作成する
• 検索:SQL中からテキスト検索を行う
DB 表
PK ・・ Text
1 Text Search is an
extension for DB2.
2 Kagawa moves to
Manchester United.
3
PK キーワード(token)
1 Text search extension
DB2
2 Kagawa move
Manchester United
全文検索用テキスト索引
テキスト全文検索
索引
作成
テキスト検索 DB2
“Manches
ter”を含むレコードは?
select * from Table1 where contains(TEXT, '"Manchester"')=1
あらかじめ作成された全文検索索引を
使用することにより、高速な検索を提
供する
検索
© 2012 ISE Corporation 49
SQL vs テキスト全文検索
• SQLでの検索
• LIKE句
• 索引総スキャン
• LIKEでの後方一致、中間一致はパフォーマンス劣化の要因になる
• テキスト全文検索
• CONTAINS関数などSQLを拡張
• テキスト構文解析(Parse)された索引を使用するため検索パフォーマンスがよい
• スコア・ファジー検索などの高度な検索機能あり
• テキスト索引の運用が必要
• リアルタイムでの検索は不可
• 索引の更新タイミングは、通常DBレコードの更新と同期しない
© 2012 ISE Corporation 50
DB外の検索エンジン vs DB2テキスト全文検索
• DB外の検索エンジン(OmniFindなど)
• 多種多様のデータソース、文書タイプを検索可能
• CrawlerとIndexerがインデックスを作成
• 高品質な分かち書き処理(形態素)
• ハイパフォーマンス、大規模索引への対応
• セキュリティ強化
• ランキング、など高度な検索が可能
• DBと組み合わせるためにはDB外エンジンでの検索結果とDBのアクセス(SQL)を組み合わせる必要がある
• DB2テキスト全文検索
• 対象はDB2のみ
• DB2ネイティブの機能
• 限られた文書タイプのみを対象
• SQLで検索できる
© 2012 ISE Corporation 51
IBMのテキスト全文検索の歴史
1997 2000 2001 2002
TE(RDBエンジン+GTR)
NSE
TIE
NSE
全文検索エンジンは大和研究所開発の
GTR
検索結果をキャシュに載せる
APIはSP
APIはSQL
スカラー関数(containsなど)
旧NSE, TIEの機能を統合
V5
V7
V7.2
V8.1&V8.2&V9
×
TE:テキストエクステンダー
TIE:テキスト情報エクステンダー
NSE: Net Search Extender
2008 2012
Text Search V9.5FP1
V10で
非推奨
V10.1
© 2012 ISE Corporation 52
DB2 Text Searchの特徴
• DB2に統合された検索エンジン
• DB2本体のインストーラーでインストール可能
• 形態素/N-gramによるParsingの選択が可能
• 複数の文書フォーマットのサポート
• XML、TEXT、HTML
• DB2のクエリーとの統合
• SQLでの検索
• XQueryでの検索
• XPathライクの位置指定
• 属性の値比較
• DB2オプティマイザーによる最適化
• ストアード・プロシージャーによる管理
• テキスト索引の作成、更新、削除など
• JDBC Type4で管理可能
© 2012 ISE Corporation 53
Parser(構文解析)
• Parserとはトークンパーシングを意味する
• Tokenizeとも呼ばれる
• 英語など、分かち書き(単語の間がスペースで区切られている)の言語では、索引に登録するべき文字列(単語)を決めるのは容易
• 日本語や中国語のように、単語の区切れ目が機械的には分からない言語では、コンピューターが何らかの処理を施して単語の区切れ目を決める必要がある
• 著名な検索エンジンであっても、構文解析で日本語対応していなければ日本語のキーワード抽出は難しい
参考
© 2012 ISE Corporation 54
様々な構文解析の方式
方式 概要
文字成分表方式 文字成分表を使って絞り込み候補を絞って行う解析方式
形態素解析方式 意味を持つ最小構成の「形態素」に分解して解析を行う方式。表記ゆれや語尾変化などに対応
分かち書き方式 形態素解析の1形態。自立語と付属語を考慮して分解するため、より自然語処理に向く
N-Gram方式 先頭からN文字の文字列を1単位として扱い、それを1文字づつずらしてIndex登録を行う高速な方式
パトリシアツリー方式 文書のすべての文字から始まる文末までの文字列を半無限部分文字列としてIndex化する方式
概念検索方式 Webページの内容やコンテンツの話題について、類似している者を探し出す方式。レコメンドなどに採用
参考
© 2012 ISE Corporation 55
形態素解析
• 形態素解析とは、ある文章を単語に分割する処理を指す
• 例えばMeCabという形態素解析エンジンでは、「我輩は猫である。」という文は「我輩/は/ 猫/で/ある/。」に分割される。このように日本語として
自然に分割されるために、特定の単語を検索する用途には非常に向いている
• ただし、解析には 形態素解析エンジンの他に、品詞や活用などの情報を含
む日本語辞書が必要となる。したがってこの辞書に記述されていない単語(流行語など)の検出は困難となる。
• 形態素解析エンジンは下記のものが知られている
• MeCab 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 56
N-gram方式
• N-gram方式とは、対象の文章をある数Nごとに機械的に分割して文章を解析する手法
• 例えば「我輩は猫である。」をN=2で解析すると、「我輩、輩は、は猫…」のように分割される。この場合N=2で、Bi-
gram方式と呼ばれる
• この方式の場合、「東京都」を含む文章から「京都」で検索するとヒットしてしまったり、「都」で検索することが困難であるという問題がある
• 一方、辞書を必要とせず、処理が高速であるという長所もある
© 2012 ISE Corporation 57
Lucene
• 代表的なオープンソース全文検索エンジン
• Javaで書かれた全文検索APIで、Jakartaプロジェクトによって開発
• ラ イセンスはApache License2.0
• http://lucene.apache.org/
• インデックスは独自のファイル形式に保存する
• 海外で開発されているため、そのままでは日本語に対応していないが、日本語形態素解析エンジンと組み合わせて日本語対応可能
• Senというライブラリを追加利用することにより、日本語の形態素解析を利用した検索が可能となる。Senは、形態素解析エンジンMeCabのJavaポーティング。
• Javaの開発環境さえあれば、独自のアプリケーションに簡単に全文検索機能を追加することが可能。
参考
© 2012 ISE Corporation 58
DB2 Text Searchの構成(DB2統合構成)
DB2インスタンス
Text Search Server
DB
テキスト 索引
ユーザー表
TSカタログ表
create index コマンドで作成
1インスタンス に1つ構成
要TCP/IPポート
・クエリー ・管理コマンド
Enable databaseコマンドで作成
ファイルシステムに格納
© 2012 ISE Corporation 59
DB2 Text Searchの構成選択肢 1. 統合 DB2 Text Search サーバーのセットアップ
2. スタンドアロン DB2 Text Search サーバーのセットアップ
3. DPFでのスタンドアロン DB2 Text Search サーバー・セットアップ
© 2012 ISE Corporation 60
DB2 Text Search概要(使用の流れ)
db2start db2ts start for text
create db db2ts enable db for text
create table db2ts create index for text
データ挿入、クエリ
db2ts update index for text
staging表
インスタンス、Text Search Server開始 NSEとの同居可能
DB作成、DBでText Search有効化 NSEが有効なDBでTSの同時enable可 TSが有効なDBでNSEの同時enable不可
表作成、テキスト索引作成 要Primary Key
データ挿入(staging表に挿入される) *MQTを使用する方法もあり
クエリ(contains関数など)
テキスト索引更新(差分) staging表から非同期による更新
基本的にNSEと同様
db2icrt configTool
インスタンス作成、Text Search構成 Text Search(TS)構成にはdb2setupやconfigToolを使用
trigger
© 2012 ISE Corporation 61
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でサポートされないので注意!
参考
© 2012 ISE Corporation 62
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
© 2012 ISE Corporation 63
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
© 2012 ISE Corporation 64
シノニム辞書の使用
• 異音同義語の追加が可能
• 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>
© 2012 ISE Corporation 65
Net Search Extender(NSE)との比較
• DB2 Text Searchが優れている点
• 形態素解析あり
• XML検索時の属性の値比較が可能( ./@id >= 10 )
• ストアード・プロシージャーによる管理コマンド発行
• NSEのみでサポートされる機能
• Highlighting (HIGHLIGHT関数)
• ストアード・プロシージャー検索
• ドキュメントモデル
• View、Nicknameへの対応
• 事前ソート指定
© 2012 ISE Corporation 66
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の組み合わせ可
© 2012 ISE Corporation 67
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カタログにアクセスできる)
• 管理タスクスケジューラ
• 索引更新
© 2012 ISE Corporation 68
まとめ
© 2012 ISE Corporation 69
まとめ:ビッグデータを含めた多様なデータへの対応(1)
• Federation機能拡張
• pureScaleサポート
• Three Part NameによるOracle互換性および使い易さの向上
• Netezzaへのサポートの強化
• Hadoopへの対応
• Java ジェネリック 表関数によりHadoopとDB2を連携
• Javaジェネリック表関数では表関数の作成時ではなく、実行時に出力フォーマットが決定できるように機能を強化
• 様々な出力形式に対応するための労力の軽減
• エンドユーザーとアプリケーションが、様々なリソースからデータを取り込んで、複雑なレポートや分析を行う際の容易性が向上
© 2012 ISE Corporation 70
まとめ:ビッグデータを含めた多様なデータへの対応(2)
• RDFアプリケーション開発のサポート
• RDFトリプルのためのストアの提供
• SPARQLのサポート
• pureXML機能強化
• 以下によるパフォーマンス機能強化
• バイナリ形式によるデータの伝送
• 索引データタイプの追加
• 関数索引のサポート
• テキスト全文検索機能 –TextSearch
• 形態素解析による索引付けが可能
• 非定型のテキストデータでは全文検索機能は重要