C++ と Lua ベースのユーザー定義拡張機能 (UDX) を IBM PureData® System for Analytics (Netezza) から Db2 Warehouse にマイグレーションする方法

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 でコンパイルしてから、それぞれ別のプロジェクトに登録するためには、以下の手順を実行します。
    1. udf_basic_example.cpp ファイルに次の行を追加します (存在しない場合)。
      #include <limits.h>

      このヘッダー・ファイルは、udxinc.h の依存関係によって PureData System for Analytics 上に暗黙的に組み込まれていましたが、Db2 Warehouse 上の更新バージョンでは組み込まれていません。

    2. 次のコマンドを入力して、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 を調整しなければならない場合があります。
    3. CLPPlus を使用して、Db2 Warehouse サーバーに接続します。
      clpplus -nw <user>/<password>@<host or ip of server>:50000/bludb
    4. UDX をコンパイルするには、Db2 Warehouseida 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 で使用する前に、デプロイおよび再テストを行います。

      ida deployudx コマンドは、圧縮された入力ファイルに含まれるファイルの拡張子に基づいて、自動的に言語を判別します。 ただし、入力ファイルに複数のタイプの UDX ソース・ファイルが含まれている場合 (例えば .cpp ファイルと .nzl ファイルの両方など)、次の例のように、LANG パラメーターを指定します。
      IDA DEPLOYUDX PROJECT udsfProject SOURCE udsf.tar.gz LANG CPP
      ida deployudx コマンドについて詳しくは、https://www.ibm.com/support/knowledgecenter/en/SS6NHC/com.ibm.swg.im.dashdb.clpplus.doc/doc/r0061924.htmlを参照してください。
  • 同じ関数セットを単一プロジェクトとしてコンパイルして登録するには、以下の手順を実行します。
    1. 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
    2. CLPPlus を使用して、Db2 Warehouse サーバーに接続します。
      clpplus -nw <user>/<password>@<host or ip of server>:50000/bludb
    3. ライブラリーをアップロード、コンパイル、およびリンクするには、Db2 Warehouseida buildlibCLPPlus コマンドを使用します。
      SQL> ida buildlib project allinone src allinone.tar.gz

      作成されたライブラリーに関する情報は、次のようになります。

      生成されたライブラリー: release/liballinone.so

    4. UDX を登録するには、Db2 Warehouseida 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;