rqGroupEval
関数は、グループ化列を識別するユーザー定義関数です。ユーザーは、SQLでのグループ適用機能の汎用実装であるSQLオブジェクトrqGroupEvalImpl
を使用して、PL/SQLでrqGroupEval
関数を定義します。この実装ではデータ・パラレル実行がサポートされており、1つ以上のRエンジンにより同じR関数(タスク)が異なるデータ・パーティションで実行されます。データは、グループ化列の値に従ってパーティショニングされます。
1つのグループ化列のみがサポートされています。複数の列がある場合、それらの列を1つの列に結合して、その新しい列をグループ化列として使用します。
rqGroupEval
関数は、EXP_NAM
パラメータで指定されたスクリプト内のR関数を実行します。INP_CUR
パラメータを使用して、データをR関数に渡します。PAR_CUR
パラメータを使用して、引数をR関数に渡すことができます。
R関数は、データベース内にSQL表として表示されるR data.frame
オブジェクトを返します。OUT_QRY
パラメータを使用して、返される値の形式を定義します。
rqGroupEval
関数を作成するには、次の2つのPL/SQLオブジェクトを作成します。
返される結果の型を指定するPL/SQLパッケージ。
パッケージの戻り値を取り、その戻り値とPIPELINED_PARALLEL_ENABLE
セットを使用してデータをパーティショニングする列を示す関数。
構文
rqGroupEval
(
INP_CUR REF CURSOR IN
PAR_CUR REF CURSOR IN
OUT_QRY VARCHAR2 IN
GRP_COL VARCHAR2 IN
EXP_NAM VARCHAR2 IN)
パラメータ
パラメータ | 説明 |
---|---|
|
|
|
R関数に渡す引数値を含むカーソル。 |
|
次のうちの1つ。
|
|
データのパーティショニングに使用するグループ化列の名前。 |
|
Oracle R EnterpriseのRスクリプト・リポジトリ内のスクリプトの名前。 |
戻り値
ユーザー定義のrqGroupEval
関数は、OUT_QRY
パラメータ値で指定された構造を持つ表を返します。
例
例A-6のPL/SQLブロックでは、スクリプトmyC5.0Function
がOracle R EnterpriseのRスクリプト・リポジトリ内に存在しないようにするために、このスクリプトを削除します。その後、関数を作成し、それをスクリプトmyC5.0Function
としてRスクリプト・リポジトリに格納します。
このR関数は、2つの引数(操作対象のデータと、データストアの作成で使用する接頭辞)を受け入れます。この関数はC50パッケージを使用して、C50からのchurn
データセットに基づいてC5.0モデルを構築します。この関数は、状態ごとのデータに基づいて1つのチャーン・モデルを構築します。
myC5.0Function
関数はC50パッケージをロードして、データベース・サーバーのRエンジンで関数が実行されるときにその関数本体がC50パッケージにアクセスできるようにします。次に、データストアの接頭辞および状態の名前を使用して、データストア名を作成します。モデルから状態名を除外するために、この関数はdata.frame
から列を削除します。data.frame
内のファクタはユーザー定義の埋込みR関数にロードされるときに文字列ベクターに変換されるため、myC5.0Function
関数は明示的に文字ベクターをRファクタに戻します。
myC5.0Function
関数は、指定された列から状態のデータを取得し、その状態のモデルを作成して、モデルをデータストアに保存します。R関数は、関数の実行結果として表示可能な単純な値を持つためにTRUE
を返します。
例A-6では次に、PL/SQLパッケージchurnPkg
およびユーザー定義関数churnGroupEval
を作成します。rqGroupEval
関数実装を定義する際、PARALLEL_ENABLE
句はオプションですが、CLUSTER BY
句は必須です。
最後に、churnGroupEval
関数を呼び出すSELECT
文を実行します。churnGroupEval
関数のINP_CUR
引数で、SELECT
文は、R関数およびR関数に渡すデータセットのパラレル実行を使用するようにPARALLEL
ヒントを指定します。churnGroupEval
関数のINP_CUR
引数は、Oracle R Enterpriseへの接続およびR関数に渡すデータストア接頭辞を指定します。OUT_QRY
引数はXML形式の値を返すことを指定し、GRP_NAM
引数は、グループ化列としてデータセットの状態列を使用することを指定し、EXP_NAM
引数は、呼び出すR関数としてRスクリプト・リポジトリ内のmyC5.0Function
スクリプトを指定します。
50州とワシントンD.Cのそれぞれについて、SELECT
文は、churnGroupEval
表関数から州の名前と値TRUE
を含むXML文字列を返します。
関連項目:
例A-6 rqGroupEval関数の使用方法
BEGIN sys.rqScriptDrop('myC5.0Function'); sys.rqScriptCreate('myC5.0Function', 'function(dat, datastorePrefix) { library(C50) datastoreName <- paste(datastorePrefix, dat[1, "state"], sep = "_") dat$state <- NULL dat$churn <- as.factor(dat$churn) dat$area_code <- as.factor(dat$area_code) dat$international_plan <- as.factor(dat$international_plan) dat$voice_mail_plan <- as.factor(dat$voice_mail_plan) mod <- C5.0(churn ~ ., data = dat, rules = TRUE) ore.save(mod, name = datastoreName) TRUE }'); END; / CREATE OR REPLACE PACKAGE churnPkg AS TYPE cur IS REF CURSOR RETURN CHURN_TRAIN%ROWTYPE; END churnPkg; / CREATE OR REPLACE FUNCTION churnGroupEval( inp_cur churnPkg.cur, par_cur SYS_REFCURSOR, out_qry VARCHAR2, grp_col VARCHAR2, exp_txt CLOB) RETURN SYS.AnyDataSet PIPELINED PARALLEL_ENABLE (PARTITION inp_cur BY HASH ("state")) CLUSTER inp_cur BY ("state") USING rqGroupEvalImpl; / SELECT * FROM table(churnGroupEval( cursor(SELECT * /*+ parallel(t,4) */ FROM CHURN_TRAIN t), cursor(SELECT 1 AS "ore.connect", 'myC5.0model' AS "datastorePrefix" FROM dual), 'XML', 'state', 'myC5.0Function'));