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関数のパラメータ
パラメータ | 説明 |
---|---|
|
SCR_NAMEパラメータで指定されたR関数に渡すデータを指定する表またはビューの名前。別のユーザーが所有する表またはビューを使用する場合は、 |
|
SCR_NAMEパラメータで指定されたユーザー定義R関数に渡す追加パラメータが含まれるJSON文字列。 たとえば、1列の入力data.frameをベクターに変換することを指定するには、次を使用します。
関連項目: 特殊な制御引数。 |
|
ファンクションによって返される出力の形式。次のいずれかになります。
関連項目: 出力形式。 |
|
OML4Rスクリプト・リポジトリ内のユーザー定義R関数の名前。 |
|
Rスクリプトの所有者。デフォルト値は |
|
指定されたユーザー定義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