SPSS ModelerでSORT+LIMITをSQLプッシュバックさせる


SPSS Modelerでソートノードの後にサンプリングノードで初めのn件のサンプリングをするとサンプリングノードがデフォルトではプッシュバックできません。これはデータ量が多い場合には大量データを取得することになりとても効率が悪いことがあります。
これを可能にする設定を紹介します。

■テスト環境
- Modeler 18.2.2
- Db2 Warehouse on Cloud

サンプルストリームと設定ファイルは以下です。

以下のように「ソート」をした後に、「初めのn件のサンプリング」を行うと、後半のサンプリングがSQLプッシュバックしません。

プッシュバックされたSQL文は以下で、SORTは行われていますが、LIMIT(やFETCH FIRST N ROWS ONLY)は行われていません。

[2021-04-19 15:32:59] SQL をプレビュー中: 
SELECT T0."M_CD" AS C0,T0."UP_TIME" AS C1,T0.POWER AS C2,T0.TEMP AS C3,T0."ERR_CD" AS C4 
FROM "COND4N_E" T0 
ORDER BY 1 ASC,2 ASC

これはデフォルトではSORTをネストしたSQL文を有効にする設定を行います。

odbc-<RDB名>-custom-properties.cfgというファイルをつくり、sqlmx_sort_by, Yを書きます。

<RDB名>はdb2やbigquery、oracleなどRDBごとに決まっています。以下のマニュアルから探してください。

odbc-db2-custom-properties.cfg
sqlmx_sort_by, Y

ModelerクライアントとModeler Serverの導入ディレクトリのconfigフォルダーに置きます(例:C:\Program Files\IBM\SPSS\Modeler\18.2.2\config\odbc-db2-custom-properties.cfg)。
配置には管理者権限が必要です。置き換えたらModelerクライアントやModeler Serverを再起動してください。

再度実行するとSQLプッシュバックされるようになりました。

SORT+LIMIT
[2021-04-19 15:48:14] SQL をプレビュー中: 
SELECT T0.C0 AS C0,T0.C1 AS C1,T0.C2 AS C2,T0.C3 AS C3,T0.C4 AS C4 
FROM (SELECT T0."M_CD" AS C0,T0."UP_TIME" AS C1,T0.POWER AS C2,T0.TEMP AS C3,T0."ERR_CD" AS C4 
FROM "COND4N_E" T0 
ORDER BY 1 ASC,2 ASC 
FETCH FIRST 10 ROWS ONLY) T0