C++ または LUA で作成された PureData® System for
Analytics ユーザー定義関数 (UDF)、ユーザー定義集約 (UDA)、
またはユーザー定義共有ライブラリーをマイグレーションするには、それらを Db2® Warehouse 環境で再コンパイルして再登録する必要があります。
このタスクについて
PureData System for
Analytics では、Netezza シェルで直接実行される nzudxcompile コマンドを使用して、UDX ライブラリーをコンパイルして登録します。
コンパイルおよび登録が正常に完了すると、スニペット処理装置 (SPU) およびホストのライブラリーが生成され、SPU にコピーされます。
その後、関数が登録されます。
Db2 Warehouse で、Command line processor plus (CLPPlus) は、1 つ以上のソース・ファイルとその他のオプションのコンテンツを含むパッケージを取得してそれをサーバー上のプロジェクト・ディレクトリーにアップロードし、それらの指定されたプロジェクト用にフォルダーを作成してそこでパッケージをアンパックしてから、ファイルのコンパイルとリンクや関数の登録などの必要な手順を実行します。
以下の例は、Db2 Warehouse システムで再コンパイルおよびデプロイすることにより PureData System for
Analytics で実行される C++の UDX を示しています。
手順
-
同じセットの UDX を Db2 Warehouse でコンパイルしてから、それぞれ別のプロジェクトに登録するためには、以下の手順を実行します。
- udf_basic_example.cpp ファイルに次の行を追加します (存在しない場合)。
#include <limits.h>
このヘッダー・ファイルは、udxinc.h の依存関係によって PureData System for
Analytics 上に暗黙的に組み込まれていましたが、Db2 Warehouse 上の更新バージョンでは組み込まれていません。
- 次のコマンドを入力して、UDX 用のパッケージを作成します。
tar -czf udsf.tar.gz udf_basic_example.cpp
tar -czf udaf.tar.gz uda_basic_example.cpp
tar -czf udtf.tar.gz udtf_basic_example.cpp
注: 標準ライブラリー・ヘッダーは、あるコンパイラー・バージョンから別のコンパイラー・バージョンに移行されたときに変更されている可能性があります。これは、名前空間の短縮、暗黙的なヘッダーの組み込み、およびタイプ検査の厳密化によるものです。
そのため、ヘッダーの場合は #include、名前空間やシンボルの場合は using を調整しなければならない場合があります。
- CLPPlus を使用して、Db2 Warehouse サーバーに接続します。
clpplus -nw <user>/<password>@<host or ip of server>:50000/bludb
- UDX をコンパイルするには、Db2 Warehouse で ida deployudx CLPPlus コマンドを使用します。
SQL> ida deployudx project udsfProject source udsf.tar.gz class
CMyProduct signature "myproduct(integer, integer)" return integer
SQL> ida deployudx project udafProject source udaf.tar.gz class
CAvg signature "myavg(integer) aggregate with (double, integer)"
return double
aggregate with (double, integer) シグニチャー・パラメーターを Db2 Warehouse で使用することにより、この状態が提供されます。
SQL> ida deployudx project udtfProject source udtf.tar.gz class
OneUdtf signature "myudtf(integer)" return "table(res integer)"
Db2 Warehouse は UDX をバージョン 2 でのみサポートするので、version パラメーターがありません。
バージョン 1 の UDX を移植するためには、Migrating UDXs from API version 1 to API version 2 に記載された手順に従います。
その後、PureData System for
Analytics 上に移植されたライブラリーを Db2 Warehouse で使用する前に、デプロイおよび再テストを行います。
-
同じ関数セットを単一プロジェクトとしてコンパイルして登録するには、以下の手順を実行します。
- udf_basic_example.cpp ファイルに次の行を追加します (存在しない場合)。
#include <limits.h>
この例では、各関数が独自のプロジェクトに登録されています。
それでも、すべての UDX を単一のパッケージ内にデプロイできます。このパッケージは、単一の .so ファイルにコンパイルされてから、個別に登録されます。
tar -czf allinone.tar.gz udf_basic_example.cpp
uda_basic_example.cpp udtf_basic_example.cpp
- CLPPlus を使用して、Db2 Warehouse サーバーに接続します。
clpplus -nw <user>/<password>@<host or ip of server>:50000/bludb
- ライブラリーをアップロード、コンパイル、およびリンクするには、Db2 Warehouse で ida buildlibCLPPlus コマンドを使用します。
SQL> ida buildlib project allinone src allinone.tar.gz
作成されたライブラリーに関する情報は、次のようになります。
生成されたライブラリー:
release/liballinone.so
- UDX を登録するには、Db2 Warehouse で ida registerudx CLPPlus コマンドを使用します。
SQL> ida registerudx project allinone udxlib release/liballinone.so
class CMyProduct signature "aio_myproduct(integer, integer)" return
integer
SQL> ida registerudx project allinone udxlib release/liballinone.so
class CAvg signature "aio_myavg(integer) aggregate with (double,
integer)" return double
SQL> ida registerudx project allinone udxlib release/liballinone.so
class OneUdtf signature "aio_myudtf(integer)" return "table(res
integer)"
タスクの結果
マイグレーションが完了すると、UDX が Db2 Warehouse で使用可能になります。
これらの UDX は、
PureData System for
Analytics の場合と同じ方法で照会で使用できるようになりました。
SQL> select col2, myavg(col1) from table1 group by col2;
SQL> select myproduct(col1, col2) from table1 where col2 < 100;
SQL> select table1.col1, tf.res from table1, table(myudtf(col1)) as tf;