Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

SPSS ModelerのDBキャッシュの動き

SPSS Modelerのキャッシュは処理の途中結果を保存しておく機能です。
SQLプッシュバックとデータベース・キャッシングの機能を有効にしておくと、SQLプッシュバックが有効な処理はデータベースの一時テーブルをつくって、そこに保存することができます。

1. 設定

ストリームのオプション設定でSQL最適化とデータベース・キャッシングにチェックを入れます。

image.png

image.png

動きを確認するためにSQLをログに記録するオプションにもチェックを入れます。
image.png

2. DBキャッシュ

単純な条件抽出を行う処理を用意しました。これはSQLプッシュバックが可能です。

image.png

このノードのキャッシュを有効にします。
image.png

実行します。

image.png

以下のようになります。キャッシュのアイコンがディスクの絵になって緑になりました。

image.png

①一時表が作られています。

[2021-03-05 17:27:07] SQL を実行中: DECLARE GLOBAL TEMPORARY TABLE "SESSION".CLEMTMP151212791 ( "M_CD" VARCHAR(10),"UP_TIME" INTEGER,POWER INTEGER,TEMP INTEGER,PRES INTEGER,"ERR_CD" VARCHAR(10) ) ON COMMIT PRESERVE ROWS NOT LOGGED

②WHERE条件を含むSQLプッシュバックした内容を一時表に書き出しています。

[2021-03-05 17:27:09] SQL をプレビュー中: INSERT INTO "SESSION".CLEMTMP151212791 ("M_CD","UP_TIME",POWER,TEMP,PRES,"ERR_CD") 
SELECT T0."M_CD" AS C0,T0."UP_TIME" AS C1,T0.POWER AS C2,T0.TEMP AS C3,T0.PRES AS C4,T0."ERR_CD" AS C5 
FROM HWV53816."COND2N_E" T0 
WHERE (T0."M_CD" = '1000')

③一時表から読みだしています。この時にWHERE条件はなくなっています。

[2021-03-05 17:27:09] SQL を実行中: SELECT T0."M_CD" AS C0,T0."UP_TIME" AS C1,T0.POWER AS C2,T0.TEMP AS C3,T0.PRES AS C4,T0."ERR_CD" AS C5 
FROM "SESSION".CLEMTMP151212791 T0

キャッシュされた表がある状態で再度実行を行います。
image.png

すると先ほど作られた表からのみ読んでいて、もともとのテーブルへのアクセスがなくなっています。キャッシュする前までの処理をショートカットすることができました。

image.png

3. DBキャッシュが効かない場合

DBキャッシュが効くのはSQLプッシュバックが効く処理だけです。SQLプッシュバックが効かない場合は、Modeler内に一時ファイルをつくってデータをキャッシュします。

試しに@INDEXというSQLプッシュバックが効かない処理をいれて、キャッシュする設定をして実行してみます。
image.png

以下のようにキャッシュされたテーブルから読んでいますが、新たな一時表は作られておらず、キャッシュのアイコンも書類のようなアイコンが緑になっています。

image.png

これを再度実行しますと、今度はもう一時表へのSELECTが行われません。Modeler Serverを使っていればModeler Server、使っていなければModeler Clientに一時ファイルをつくって、キャッシュしていますので、DBアクセス自体が発生していません。

image.png

4. 注意事項

  • Db2の場合DBキャッシュは一時表で作られますので、Db2との接続が切れると自動的に削除されます。
  • DBによっては実表で作られることもあります。その場合はストリームを閉じた時点でDROP TABLEで削除されます。ですので、ストリームが異常終了した場合にはゴミ表が残ってしまうことがあります。
  • 一時表にはパーティションキーやINDEXはありませんので、処理によっては効率が悪くなることもあります。パーティションキーやINDEXなどでチューニングしたい場合にはDBエクスポートで実表で中間テーブルを作成してください。

5. 環境

Modeler18.2.2
Windows 10
Db2 on Cloud

6. 参考

ノードのキャッシュ・オプション
https://www.ibm.com/support/knowledgecenter/ja/SS3RA7_18.2.2/modeler_mainhelp_client_ddita/clementine/cache_options.html

Modelerデータ加工Tips#01-「キャッシュ」で後続処理の効率をアップ | IBM ソリューション ブログ https://www.ibm.com/blogs/solutions/jp-ja/modeler-tips-01/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?