Comments
Description
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