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関数のパラメータ

パラメータ 説明

INP_NAM

SCR_NAMEパラメータで指定されたR関数に渡すデータを指定する表またはビューの名前。別のユーザーが所有する表またはビューを使用する場合は、次の形式を使用します:

<owner name>.<table/view name>

指定された表またはビューに対する読取りアクセス権が必要です。

PAR_LST

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

たとえば、R関数でレンダリングされたイメージを取得するには、次を使用します。

'{"ore_graphics_flag":true}'

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

OUT_FMT

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

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

関連項目: 出力形式

ROW_NUM

チャンク内の行の数。Rスクリプトは各チャンクで実行されます。

SCR_NAME

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

SCR_OWNER

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

ENV_NAME

指定されたユーザー定義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