10.6.2.6 rqRowEval2関数
関数rqRowEval2
は、Oracle Autonomous Databaseで使用すると、データを一連の行にチャンク化した後、各チャンクに対してユーザー定義R関数を実行します。
関数rqRowEval2
は、INP_NAM
パラメータで指定されたデータをユーザー定義のR関数に渡します。PAR_LST
パラメータを使用して、R関数に引数を渡すことができます。ROW_NUM
パラメータは、R関数の各呼出しに渡す必要のある行数を指定します。最後のチャンクの行数は、指定した数より少なくなる可能性があります。
rqRowEval2
関数ではデータ・パラレル実行がサポートされており、1つ以上のRエンジンにより同じR関数(タスク)が個々の独立したデータ・チャンクで実行されます。Oracle Databaseは、データベース・サーバー・マシンで実行されるRエンジン(複数の場合もある)の管理および制御を処理し、自動的にデータをチャンク化して、パラレルで実行されるRエンジンに渡します。Oracle Databaseでは行のすべてのチャンクに対するR関数の実行完了が保証されており、完了しない場合はrqRowEval2
関数によってエラーが返されます。
OUT_FMT
パラメータを使用して、戻り値の形式を定義します。
構文
rqRowEval2(
INP_NAM VARCHAR2,
PAR_LST VARCHAR2,
OUT_FMT VARCHAR2,
ROW_NUM NUMBER,
SCR_NAME VARCHAR2,
SCR_OWNER VARCHAR2 DEFAULT NULL,
ENV_NAME VARCHAR2 DEFAULT NULL
)
パラメータ
表10-20 rqRowEval2関数のパラメータ
パラメータ | 説明 |
---|---|
|
指定された表またはビューに対する読取りアクセス権が必要です。 |
|
たとえば、R関数でレンダリングされたイメージを取得するには、次を使用します。
関連項目: 特殊な制御引数。 |
|
ファンクションによって返される出力の形式。次のいずれかになります。
関連項目: 出力形式。 |
|
チャンク内の行の数。Rスクリプトは各チャンクで実行されます。 |
|
OML4Rスクリプト・リポジトリ内のユーザー定義R関数の名前。 |
|
登録済Rスクリプトの所有者。デフォルト値はNULL です。NULL の場合、ユーザーのスクリプト・リポジトリでRスクリプトを検索します。
|
|
指定されたユーザー定義R関数の実行時に使用されるconda環境の名前。 |
戻り値
関数rqRowEval2
は、OUT_FMT
パラメータ値で指定された構造を持つ表を返します。
例
例10-42 rqRowEval2関数の使用
この例では、ユーザー定義関数を作成し、その関数をOML4Rスクリプト・リポジトリに保存します。
PL/SQLブロックによって、スクリプトscoreLM
が作成され、スクリプト・リポジトリに追加されます。
%script
BEGIN
sys.rqScriptCreate('scoreLM',
'function(dat, dsname){
ore.load(dsname)
dat$Petal.Length_pred <- predict(mod, newdata=dat)
dat[,c("Petal.Length_pred","Petal.Length","Species")]}',
v_global => FALSE,
v_overwrite => TRUE);
END;
/
結果は次のとおりです:
PL/SQL procedure successfully completed.
---------------------------
例10-43 JSON出力
PAR_LST
引数は、特殊な制御引数ore_service_levelでMEDIUM
サービス・レベルを使用することを指定します。OUT_FMT引数で、文字列'JSON'は、返される表にJSON文字列であるCLOBが含まれることを指定します。SCR_NAME
パラメータは、コールするR関数としてスクリプト・リポジトリ内のscoreLM関数を指定します。JSON出力はCLOBです。set long [length]をコールすると、詳細な出力を取得できます。
%script
set long 1000
SELECT * FROM table(rqRowEval2(
inp_nam => 'IRIS',
par_lst => '{"dsname":"ds-1", "ore_parallel_flag":true, "ore_service_level":"MEDIUM"}',
out_fmt => 'JSON',
row_num => 5,
scr_name => 'scoreLM'));
結果は次のとおりです:
---------------------------
NAME VALUE
[{"Petal.Length_pred":1.5295,"Species":"setosa","Petal.Length":1},{"Petal.Length_pred":1.3066,"Species":"setosa","Petal.Length":1.1},{"Petal.Length_pred":1.5295,"Species":"setosa","Petal.Length":1.2},{"Petal.Length_pred":1.5295,"Species":"setosa","Petal.Length":1.2},{"Petal.Length_pred":1.5295,"Species":"setosa","Petal.Length":1.3},{"Petal.Length_pred":1.5295,"Species":"setosa","Petal.Length":1.3},{"Petal.Length_pred":1.5295,"Species":"setosa","Petal.Length":1.3},{"Petal.Length_pred":1.5295,"Species":"setosa","Petal.Length":1.3},{"Petal.Length_pred":1.7525,"Species":"setosa","Petal.Length":1.3},{"Petal.Length_pred":1.7525,"Species":"setosa","Petal.Length":1.3},{"Petal.Length_pred":1.9755,"Species":"setosa","Petal.Length":1.3},{"Petal.Length_pred":1.3066,"Species":"setosa","Petal.Length":1.4},{"Petal.Length_pred":1.3066,"Species":"setosa","Petal.Length":1.4},{"Petal.Length_pred":1.5295,"Species":"setosa","Petal.Length":1.4},{"Petal.Length_pred":1.5295,"Species":"setosa","Petal.Length":1
例10-44 リレーショナル
Select
文を実行して、リレーショナル
出力を取得します。
%script
SELECT * FROM table(rqRowEval2(
inp_nam => 'IRIS',
par_lst => '{"dsname":"ds-1", "ore_parallel_flag":true, "ore_service_level":"MEDIUM"}',
out_fmt => '{"Petal.Length_pred":"NUMBER", "Petal.Length":"NUMBER", "Species":"VARCHAR2(10)"}',
row_num => 5,
scr_name => 'scoreLM'));
結果は次のとおりです:
Petal.Length_pred Petal.Length Species
1.5295 1 setosa
1.3066 1.1 setosa
1.5295 1.2 setosa
1.5295 1.2 setosa
1.5295 1.3 setosa
1.5295 1.3 setosa
1.5295 1.3 setosa
1.5295 1.3 setosa
1.7525 1.3 setosa
1.7525 1.3 setosa
1.9755 1.3 setosa
1.3066 1.4 setosa
1.3066 1.4 setosa
1.5295 1.4 setosa
Petal.Length_pred Petal.Length Species
1.5295 1.4 setosa
1.5295 1.4 setosa
1.5295 1.4 setosa
1.5295 1.4 setosa
1.5295 1.4 setosa
1.5295 1.4 setosa
1.5295 1.4 setosa
1.7525 1.4 setosa
1.7525 1.4 setosa
1.7525 1.4 setosa
1.3066 1.5 setosa
1.3066 1.5 setosa
1.5295 1.5 setosa
1.5295 1.5 setosa
Petal.Length_pred Petal.Length Species
1.5295 1.5 setosa
1.5295 1.5 setosa
1.5295 1.5 setosa
1.5295 1.5 setosa
1.5295 1.5 setosa
1.7525 1.5 setosa
1.9755 1.5 setosa
1.9755 1.5 setosa
1.9755 1.5 setosa
1.5295 1.6 setosa
1.5295 1.6 setosa
1.5295 1.6 setosa
1.5295 1.6 setosa
1.5295 1.6 setosa
Petal.Length_pred Petal.Length Species
1.9755 1.6 setosa
2.4215 1.6 setosa
1.5295 1.7 setosa
1.7525 1.7 setosa
1.9755 1.7 setosa
2.1985 1.7 setosa
1.5295 1.9 setosa
1.9755 1.9 setosa
3.5365 3 versicolor
3.3135 3.3 versicolor
3.3135 3.3 versicolor
3.3135 3.5 versicolor
3.3135 3.5 versicolor
3.9825 3.6 versicolor
Petal.Length_pred Petal.Length Species
3.3135 3.7 versicolor
3.5365 3.8 versicolor
3.5365 3.9 versicolor
3.7595 3.9 versicolor
4.2055 3.9 versicolor
3.3135 4 versicolor
3.7595 4 versicolor
3.9825 4 versicolor
3.9825 4 versicolor
3.9825 4 versicolor
3.3135 4.1 versicolor
3.9825 4.1 versicolor
3.9825 4.1 versicolor
3.7595 4.2 versicolor
Petal.Length_pred Petal.Length Species
3.9825 4.2 versicolor
3.9825 4.2 versicolor
4.4285 4.2 versicolor
3.9825 4.3 versicolor
3.9825 4.3 versicolor
3.7595 4.4 versicolor
3.9825 4.4 versicolor
4.2055 4.4 versicolor
4.2055 4.4 versicolor
4.8745 4.5 virginica
3.9825 4.5 versicolor
4.4285 4.5 versicolor
4.4285 4.5 versicolor
4.4285 4.5 versicolor
Petal.Length_pred Petal.Length Species
4.4285 4.5 versicolor
4.4285 4.5 versicolor
4.6515 4.5 versicolor
3.9825 4.6 versicolor
4.2055 4.6 versicolor
4.4285 4.6 versicolor
3.7595 4.7 versicolor
4.2055 4.7 versicolor
4.2055 4.7 versicolor
4.4285 4.7 versicolor
4.6515 4.7 versicolor
5.0975 4.8 virginica
5.0975 4.8 virginica
4.2055 4.8 versicolor
Petal.Length_pred Petal.Length Species
5.0975 4.8 versicolor
5.0975 4.9 virginica
5.0975 4.9 virginica
5.5434 4.9 virginica
4.4285 4.9 versicolor
4.4285 4.9 versicolor
4.4285 5 virginica
5.3204 5 virginica
5.5434 5 virginica
4.8745 5 versicolor
4.4285 5.1 virginica
5.0975 5.1 virginica
5.3204 5.1 virginica
5.3204 5.1 virginica
Petal.Length_pred Petal.Length Species
5.5434 5.1 virginica
6.2124 5.1 virginica
6.4354 5.1 virginica
4.6515 5.1 versicolor
5.5434 5.2 virginica
6.2124 5.2 virginica
5.3204 5.3 virginica
6.2124 5.3 virginica
5.7664 5.4 virginica
6.2124 5.4 virginica
5.0975 5.5 virginica
5.0975 5.5 virginica
5.7664 5.5 virginica
4.2055 5.6 virginica
Petal.Length_pred Petal.Length Species
5.0975 5.6 virginica
5.7664 5.6 virginica
5.9894 5.6 virginica
6.4354 5.6 virginica
6.4354 5.6 virginica
5.7664 5.7 virginica
6.2124 5.7 virginica
6.6584 5.7 virginica
4.6515 5.8 virginica
5.0975 5.8 virginica
5.9894 5.8 virginica
5.7664 5.9 virginica
6.2124 5.9 virginica
5.0975 6 virginica
Petal.Length_pred Petal.Length Species
6.6584 6 virginica
5.3204 6.1 virginica
6.2124 6.1 virginica
6.6584 6.1 virginica
5.0975 6.3 virginica
5.5434 6.4 virginica
5.7664 6.6 virginica
5.5434 6.7 virginica
5.9894 6.7 virginica
6.2124 6.9 virginica
150 rows selected.
---------------------------
次のコードでは、SQL問合せを実行して、rqRowEval2
関数コールの結果からすべての列を取得します。これにより、指定したスクリプトおよび環境に基づいてPNG出力が生成されます。
select *
from table(rqRowEval2(
inp_nam => 'IRIS',
par_lst => '{"ore_graphics_flag":true}',
out_fmt => 'PNG',
row_num => 50,
scr_name => 'test_ggplot2_inp',
scr_owner => NULL,
env_name => 'myrenv'));
出力が次のように表示されます。
NAME ID VALUE IMAGE
---------- ---------- -------------------- ------------------------------
CHUNK_1 1 "hello world" 89504E470D0A1A0A0000000D494844
52000001E0000001E008060000007D
D4BE950000200049444154789CECDD
777C53D5FFC7F1579AA46D3A81963D
CAA60C0505BE381805510115411410
5CA8881B45
CHUNK_2 1 "hello world" 89504E470D0A1A0A0000000D494844
52000001E0000001E008060000007D
D4BE950000200049444154789CEDDD
777814F5DAC6F17B5B7AA5465A420F
NAME ID VALUE IMAGE
---------- ---------- -------------------- ------------------------------
4D22458ED251041BC502088258100B
0A2AA2A2E7
CHUNK_3 1 "hello world" 89504E470D0A1A0A0000000D494844
52000001E0000001E008060000007D
D4BE950000200049444154789CEDDD
777814F5C2C5F1B3BB61D30381D04B
420F4D90F2220AA1280AA84893AA08
2A6247011B