プライマリ・コンテンツに移動
Oracle® R Enterpriseユーザーズ・ガイド
リリース1.5.1
E88296-01
目次へ移動
目次
索引へ移動
索引

前
次

A.4 rqGroupEval関数

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オブジェクトを作成します。

構文

rqGroupEval (
     INP_CUR     REF CURSOR     IN
     PAR_CUR     REF CURSOR     IN
     OUT_QRY     VARCHAR2       IN
     GRP_COL     VARCHAR2       IN
     EXP_NAM     VARCHAR2       IN)

パラメータ

パラメータ 説明

INP_CUR

EXP_NAMEパラメータで指定されているR関数に渡すデータを指定するカーソル。

PAR_CUR

R関数に渡す引数値を含むカーソル。

OUT_QRY

次のうちの1つ。

  • NULL。データ・オブジェクトとイメージ・オブジェクトの両方を含む可能性のあるシリアライズ・オブジェクトを返します。

  • rqEvalにより返された表の列名およびデータ型を指定するSQL SELECT文。イメージ・データは破棄されます。デュアル・ダミー表を使用してプロトタイプ行を指定することも、既存の表またはビューに基づいてSELECT文を作成することもできます。R関数はdata.frameを返す必要があります。

  • 文字列'XML'。返される表にXML文字列であるCLOBが含まれることを指定します。XMLには構造化データとイメージの両方が含まれる可能性があり、最初に構造化Rオブジェクトまたは半構造化Rオブジェクトが返され、次にR関数により生成されたイメージが続きます。イメージはPNG表示のbase 64エンコーディングとして返されます。

  • 文字列'PNG'。返される表に、R関数により生成されたPNG形式のイメージを持つBLOBが含まれることを指定します。

GRP_COL

データのパーティショニングに使用するグループ化列の名前。

EXP_NAM

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文字列を返します。

関連項目:

例6-13

例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'));