10.6.2.4 rqEval2関数

関数rqEval2は、Oracle Autonomous Databaseで使用すると、データを明示的に取得するか、関数に対して外部データが自動的にロードされるユーザー定義R関数を実行します。

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

構文

rqEval2 (
    PAR_LST VARCHAR2,
    OUT_FMT VARCHAR2,
    SCR_NAME VARCHAR2,
    SCR_OWNER VARCHAR2 DEFAULT NULL,
    ENV_NAME  VARCHAR2 DEFAULT NULL
    )

パラメータ

パラメータ 説明

PAR_LST

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

たとえば、欠損値が含まれる行を入力表から省略するには、'{"ore.na.omit":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環境の名前。

戻り値

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

例10-31 rqEval2の使用方法

この例では、R関数を定義し、OML4Rスクリプト・リポジトリに格納します。PL/SQLブロックによって、スクリプトRandomRedDots2が作成され、スクリプト・リポジトリに追加されます。スクリプトがプライベートであることを指定し、同じ名前でスクリプトを上書きします。ユーザー定義R関数でrqEval2関数をコールします。


BEGIN
  sys.rqScriptCreate('RandomRedDots2',
    'function(divisor = 100, numDots = 100) {
       id <- 1:10
       plot(1:numDots, rnorm(numDots), pch = 21, bg = "red", cex = 2 )
       data.frame(id = id, val = id / divisor)}',
       v_global => FALSE,
       v_overwrite => TRUE);
END;
/

例10-32 JSON出力

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

%script
set long 500
SELECT * FROM table(rqEval2(
    par_lst => '{"ore_service_level":"LOW"}',
    out_fmt => 'JSON',
    scr_name => 'RandomRedDots2'));

結果は次のとおりです:

NAME VALUE 
[{"val":0.01,"id":1},{"val":0.02,"id":2},{"val":0.03,"id":3},{"val":0.04,"id":4},{"val":0.05,"id":5},{"val":0.06,"id":6},{"val":0.07,"id":7},{"val":0.08,"id":8},{"val":0.09,"id":9},{"val":0.1,"id":10}]

例10-33 PNG出力。

PAR_LST引数は、特殊な制御引数oml_service_levelでLOWサービス・レベルを使用することを指定します。OUT_FMT引数で、reqEval2によって返されるイメージを含める文字列'PNG'。SCR_NAMEパラメータは、コールするR関数としてスクリプト・リポジトリ内のRandomRedDots2関数を指定します。JSON出力はCLOBです。

%script
SELECT * FROM table(rqEval2(
    par_lst => '
    {"ore_graphics_flag":true, "ore_service_level":"LOW"}',
    out_fmt => 'PNG',
    scr_name => 'RandomRedDots2'));

結果は次のとおりです:

---------------------------
NAME   ID   VALUE   IMAGE   
       1            89504E470D0A1A0A0000000D49484452000001E0000001E008060000007DD4BE950000200049444154789C

ノート:

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

例10-34 XML出力。

PAR_LST引数は、特殊な制御引数oml_service_levelでLOWサービス・レベルを使用することを指定します。OUT_FMT引数で、文字列'JSON'は、返される表にJSON文字列であるCLOBが含まれることを指定します。SCR_NAMEパラメータは、コールするR関数としてスクリプト・リポジトリ内のRandomRedDots2関数を指定します。JSON出力はCLOBです。

%script
set long 1000
SELECT * FROM table(rqEval2(
    par_lst => '{"ore_service_level":"LOW"}',
    out_fmt => 'XML',
    scr_name => 'RandomRedDots2'));

結果は次のとおりです:

NAME VALUE
      <root><frame_obj><ROW-frame_obj><id>1</id><val>0.01</val></ROW-frame_obj><ROW-frame_obj><id>2</id><val>0.02</val></ROW-frame_obj><ROW-frame_obj><id>3</id><val>0.03</val></ROW-frame_obj><ROW-frame_obj><id>4</id><val>0.04</val></ROW-frame_obj><ROW-frame_obj><id>5</id><val>0.05</val></ROW-frame_obj><ROW-frame_obj><id>6</id><val>0.06</val></ROW-frame_obj><ROW-frame_obj><id>7</id><val>0.07</val></ROW-frame_obj><ROW-frame_obj><id>8</id><val>0.08</val></ROW-frame_obj><ROW-frame_obj><id>9</id><val>0.09<

ノート:

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

例10-35 XML出力

Select文を実行して、XML出力を取得します。構造化データとイメージの両方がXMLに含まれるように、ore_graphics_flagをtrueに設定します

%script


set long 1000

SELECT * FROM table(rqEval2(
    par_lst => '{"ore_graphics_flag":true, "ore_service_level":"LOW"}',
    out_fmt => 'XML',
    scr_name => 'RandomRedDots2'));

結果は次のとおりです:


---------------------------
NAME   VALUE                
<root><R-data><frame_obj><ROW-frame_obj><id>1</id><val>0.01</val></ROW-frame_obj><ROW-frame_obj><id>2</id><val>0.02</val></ROW-frame_obj><ROW-frame_obj><id>3</id><val>0.03</val></ROW-frame_obj><ROW-frame_obj><id>4</id><val>0.04</val></ROW-frame_obj><ROW-frame_obj><id>5</id><val>0.05</val></ROW-frame_obj><ROW-frame_obj><id>6</id><val>0.06</val></ROW-frame_obj><ROW-frame_obj><id>7</id><val>0.07</val></ROW-frame_obj><ROW-frame_obj><id>8</id><val>0.08</val></ROW-frame_obj><ROW-frame_obj><id>9</id><val>0.09</val></ROW-frame_obj><ROW-frame_obj><id>10</id><val>0.1</val></ROW-frame_obj></frame_obj></R-data><images><image><img src="data:image/pngbase64"><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAYAAAB91L6VAAAgAElEQVR4nOzdd3hT5fvH8Xe6m6QDSgtl07KRjciQIZvKkiECCspQBNkiICBLUBRxACoqU0RAkT0EREGGTCm77LJll2Z0pc/vD9Qf8u04QJPTcb+uq9clzZM8n9Qkd845zzAopRRCCCGEcCk3vQMIIYQQOZEUYCGEEEIHUoCFEEIIHUgBFkIIIXQgBVgIIYTQgRRgIYQQQgdSgIUQQggdSAEWQgghdCAFWAghhNCBFGAhhBBCB1KAhRBCCB1IARZCCCF0IAVYCCGE0IEUYCGEEEIHUoCFEEIIHU 

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

Select文を実行して、リレーショナル出力を取得します。OUT_FMT引数は、rqEval2によって返される表の列名およびデータ型が含まれるJSON文字列を指定します。

%script
SELECT * FROM table(rqEval2(
    par_lst => '{"ore_service_level":"LOW"}',
    out_fmt => '{"val":"NUMBER","id":"NUMBER"}',
    scr_name => 'RandomRedDots2'));

結果は次のとおりです:

val id 
0.01 1 
0.02 2 
0.03 3 
0.04 4 
0.05 5 
0.06 6 
0.07 7 
0.08 8 
0.09 9 
0.1 10 

10 rows selected.

例10-37 rqEval2を使用して引数を渡す場合:

Select文を実行し、rqEval2関数に引数を渡してXML出力を取得します。

%script
set long 500
SELECT * FROM table(rqEval2(
        par_lst => '{"ore_service_level":"LOW", "divisor":50, "numDots":500}',
        out_fmt => 'XML',
        scr_name => 'RandomRedDots2'));

結果は次のとおりです:

NAME VALUE
       <root><frame_obj><ROW-frame_obj><id>1</id><val>0.01</val></ROW-frame_obj><ROW-frame_obj><id>2</id><val>0.02</val></ROW-frame_obj><ROW-frame_obj><id>3</id><val>0.03</val></ROW-frame_obj><ROW-frame_obj><id>4</id><val>0.04</val></ROW-frame_obj><ROW-frame_obj><id>5</id><val>0.05</val></ROW-frame_obj><ROW-frame_obj><id>6</id><val>0.06</val></ROW-frame_obj><ROW-frame_obj><id>7</id><val>0.07</val></ROW-frame_obj><ROW-frame_obj><id>8</id><val>0.08</val></ROW-frame_obj><ROW-frame_obj><id>9</id><val>0.09<

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

select *
from table(rqEval2(
par_lst => '{"ore_graphics_flag":true}',
out_fmt => 'PNG',
scr_name => 'test_ggplot2_noinp',
scr_owner => 'OMLUSER',
env_name => 'myrenv'));

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

NAME ID VALUE IMAGE
---------- ---------- -------------------- ------------------------------
1 "Hello World" 89504E470D0A1A0A0000000D494844
                52000001E0000001E008060000007D
                D4BE950000200049444154789CECDD
                795854F51EC7F1F79919F655164190
                4D0141DC01714D3335772D5B6CB72C
                AB9B65FBDE