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