10.6.2.5 rqTableEval2関数

関数rqTableEval2は、SCR_NAMEパラメータで指定されたスクリプト内のユーザー定義R関数を実行します。

INP_NAMパラメータで指定された表名を使用して、ユーザー定義R関数にデータを渡します。PAR_LSTパラメータを使用して、ユーザー定義R関数に引数を渡します。

OUT_FMTパラメータを使用して、戻り値の形式を定義します。

構文

rqTableEval2(
   INP_NAM VARCHAR2,
   PAR_LST VARCHAR2,
   OUT_FMT VARCHAR2,
   SCR_NAME VARCHAR2,
   SCR_OWNER VARCHAR2 DEFAULT NULL,
   ENV_NAME  VARCHAR2 DEFAULT NULL
   )

パラメータ

表10-19 rqTableEval関数のパラメータ

パラメータ 説明

INP_NAM

SCR_NAMEパラメータで指定されたR関数に渡すデータを指定する表またはビューの名前。別のユーザーが所有する表またはビューを使用する場合は、<owner name>.<table/view name>という形式を使用します。指定された表またはビューに対する読取りアクセス権が必要です。

PAR_LST

SCR_NAMEパラメータで指定されたユーザー定義R関数に渡す追加パラメータが含まれるJSON文字列。oreで始まる特殊な制御引数は、SCR_NAMEで指定された関数に渡されるのではなく、関数の呼出し前後の動作を制御します。

たとえば、1列の入力data.frameをベクターに変換することを指定するには、次を使用します。

'{"ore.drop":true}'

関連項目: 特殊な制御引数

OUT_FMT

ファンクションによって返される出力の形式。次のいずれかになります。

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

関連項目: 出力形式

SCR_NAME

OML4Rスクリプト・リポジトリ内のユーザー定義R関数の名前。

SCR_OWNER

Rスクリプトの所有者。デフォルト値はNULLです。NULLの場合、ユーザーのスクリプト・リポジトリでRスクリプトを検索します。

ENV_NAME

指定されたユーザー定義R関数の実行時に使用されるconda環境の名前。

戻り値

関数rqTableEval2は、OUT_FMTパラメータ値で指定された構造を持つ表を返します。

この例では、関数を作成して、スクリプトbuildLMとしてリポジトリに格納します。

例10-38 rqTableEval2関数の使用

PL/SQLブロックで、R関数buildLMを作成し、buildLMという名前でスクリプト・リポジトリに格納し、同じ名前でスクリプト・リポジトリに格納されている既存のユーザー定義R関数を上書きします。

BEGIN
    sys.rqScriptCreate('buildLM',
        'function(dat, dsname) {
            mod <- lm(Petal.Length~Petal.Width, dat)
            ore.save(mod, name=dsname, overwrite=TRUE)
            plot(predict(mod), dat$Petal.Length, pch=21, bg=c("red","blue"),  xlab = "Predicted Values", ylab = "Observed Values")
            abline(a = 0, b = 1, lwd=2, col = "green")
            return(data.frame(Coef=mod$coef))}',
    v_global => FALSE,  
    v_overwrite => TRUE);
END;
/

例10-39 JSON出力

INP_NAM引数は、ユーザー定義関数に'IRIS'表を渡します。PAR_LST引数は、特殊な制御引数ore_service_levelでLOWサービス・レベルを使用することを指定します。OUT_FMT引数で、文字列'JSON'は、返される表にJSON文字列であるCLOBが含まれることを指定します。scr_nameパラメータは、コールするR関数としてスクリプト・リポジトリ内のbuildLM関数を指定します。JSON出力はCLOBです。set long [length]をコールすると、詳細な出力を取得できます。

%script
set long 500
SELECT * FROM table(rqTableEval2(
    inp_nam => 'IRIS',
    par_lst => '{"dsname":"ds-1", "ore_service_level":"LOW"}',
    out_fmt => 'JSON',
    scr_name => 'buildLM'));

結果は次のとおりです:

---------------------------
NAME   VALUE
       [{"_row":"(Intercept)","Coef":1.0836},{"_row":"Petal.Width","Coef":2.2299}]
---------------------------

例10-40 PNG出力

par_lst引数は、特殊な制御引数ore_service_levelでLOWサービス・レベルを使用することを指定します。out_fmt引数で、文字列'PNG'はBLOB列にイメージを含めるように指定します。scr_nameパラメータは、コールするR関数としてスクリプト・リポジトリ内のbuildLM関数を指定します。

%script

set long 500

SELECT * FROM table(rqTableEval2( 
    inp_nam => 'IRIS', 
    par_lst => '{"dsname":"ds-1", "ore_graphics_flag":true, "ore_service_level":"LOW"}', 
    out_fmt => 'PNG', 
    scr_name => 'buildLM'));

結果は次のとおりです:

---------------------------
NAME   ID   VALUE   IMAGE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
          1         89504E470D0A1A0A0000000D49484452000001E0000001E0080

ノート:

ここでは、出力の一部のみを示します。出力の長さを決定するには、パラメータset long [length]を使用します
.

例10-41 リレーショナル出力

inp_nam引数は、ユーザー定義関数に'IRIS'表を渡します。par_lst引数は、特殊な制御引数ore_service_levelでLOWサービス・レベルを使用することを指定します。out_fmt引数で、関数によって返される表の列名およびデータ型を指定します。scr_nameパラメータは、コールするR関数としてスクリプト・リポジトリ内のbuildLM関数を指定します。

%script

SELECT * FROM table(rqTableEval2( 
    inp_nam => 'IRIS', 
    par_lst => '{"dsname":"ds-1", "ore_service_level":"LOW"}', 
    out_fmt => '{"Coef":"number"}', 
    scr_name => 'buildLM'));

結果は次のとおりです:

Coef     
  1.0836 
  2.2299

次のコードでは、SQL問合せを実行して、rqTableEval2関数コールの結果からすべての列を取得します。これにより、指定したスクリプトおよび環境に基づいてPNG出力が生成されます。

select *
from table(rqTableEval2(
inp_nam => 'IRIS',
par_lst => '{"ore_graphics_flag":true}',
out_fmt => 'PNG',
scr_name => 'test_ggplot2_inp',
scr_owner => NULL,
env_name => 'myrenv'));

出力が次のように表示されます。

NAME ID VALUE IMAGE
---------- ---------- -------------------- ------------------------------
1 "hello world" 89504E470D0A1A0A0000000D494844
                52000001E0000001E008060000007D
                D4BE950000200049444154789CECDD
                77785375FB06F03B3B69D3415B2894
                D1B2CB50B688B20559CA1610044144
                14652888A2