10.6.5 出力形式

OUT_FMTパラメータは、表関数rqEval2rqGroupEval2rqIndexEval2rqRowEval2rqTableEval2およびrqJobResultによって返される出力の形式を制御します。

出力形式は次のとおりです。

JSON

OUT_FMTJSONに設定されている場合、表関数は、JSON文字列であるCLOBが含まれる表を返します。

次の例では、rqEval2関数に関する項で作成された'RandomRedDots2'rqEval2関数をコールします。

%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}]   



---------------------------

リレーショナル

列名が列タイプにマップされるJSON文字列でOUT_FMTが指定されている場合、表関数はそれを表の列に再形成してレスポンスを返します。たとえば、{"NAME":"varchar2(10)", "COUNT":"number"}でOUT_FMTが指定されている場合、出力にはVARCHAR2(10)型のNAME列およびNUMBER型のCOUNT列が含まれています。次の例では、表rqGroupEval2およびスクリプトgroupCount (「rqGroupEval2関数」で作成)を使用し、groupCount関数をコールします。

%script

SELECT * FROM table(rqGroupEval2(
            inp_nam => 'IRIS',
            par_lst => '{"ore_service_level":"MEDIUM", "ore_parallel_flag":true}',
            out_fmt => '{"Species":"VARCHAR2(10)", "Count":"NUMBER"}',
            grp_col => 'Species',
            scr_name => 'groupCount'));

Species Count
setosa 50
versicolor 50
virginica 50

XML

XMLOUT_FMTが指定されている場合、表関数は固定列が含まれる表でレスポンスを返します。出力は、2つの列で構成されています。NAME列には、行の名前が示されます。rqEval2rqTableEval2rqRowEval2関数が返す場合、NAME列値はNULLです。rqGroupEval2rqIndexEval2の場合、NAME列値はグループ/索引名です。VALUE列には、XML文字列が示されます。

XMLには構造化データとイメージの両方が含まれる可能性があり、最初に構造化Rオブジェクトまたは半構造化Rオブジェクトが返され、次にR関数により生成されたイメージが続きます。イメージはPNG表示のbase 64エンコーディングとして返されます。XML文字列にイメージを含めるには、特殊な制御引数ore_graphics_flagをtrueに設定する必要があります。

次のコードでは、R関数RandomRedDots2がスクリプト・リポジトリに作成されます。

%script

set long 500

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

次の例は、構造化データとイメージの両方が結果に含まれるrqEval2関数コールのXML出力を示しています。

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><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[iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAYAAAB91L6VAAAgAElEQVR4nOzdd3hT5fvH8Xe6MzoopZS9ZE9BliiIgLKHooCgyBRRQFSGG0GUJSKKogxl42KIqCB8AQEVkD0rlL1HgTZJZ3r//gD9IXaEtkk67td15VJ6npzzOWmaO+ec5zyPQUQEpZRSSrmVl6cDKKWUUvmRFmCllFLKA7QAK6WUUh6gBVgppZTyAC3ASimllAdoAVZKKaU8QAuwUkop5QFagJVSSikP0AKslFJKeYAWYKWUUsoDtAArpZRSHqAFWCmllPIALcBKKaWUB2gBVkoppTxAC7BSSi

PNG

PNGOUT_FMTが指定されている場合、表関数は固定列(イメージ・バイト列を含む)が含まれる表でレスポンスを返します。SQL APIをコールする場合、実行されたスクリプトでレンダリングされたイメージをWebサーバーが取得できるように、特殊な制御引数ore_graphics_flagtrueに設定する必要があります。

PNG出力は、次の4つの列で構成されています。NAME列には、行の名前が示されます。rqEval2およびrqTableEval2関数が返す場合、NAME列値はNULLです。rqRowEval2rqGroupEval2rqIndexEval2の場合、NAME列値はチャンク/グループ/索引名です。ID列には、イメージのIDが示されます。VALUE列には、実行されたスクリプトの戻り値が示されます。IMAGE列は、実行されたスクリプトによってレンダリングされたPNGイメージのバイトが含まれるBLOB列です。

次の例は、rqTableEval2関数コールのPNG出力を示しています。

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
      89504E470D0A1A0A0000000D49484452000001E0000001E008060000007DD4BE950000200049444154789CE

ノート:

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

非同期モード出力

非同期ジョブを実行するためにore_async_flagtrueに設定する場合は、次に示すように、XML以外の結果を返すジョブに対してはOUT_FMTNULLに設定するか、XML結果を返すジョブに対してはXMLに設定します。

非同期モード: XML以外の出力

非同期ジョブを発行する際、JSON、PNGおよびリレーショナル出力の場合は、ジョブの発行時にOUT_FMTNULLに設定します。ジョブ結果をフェッチする際は、rqJobResultコールでOUT_FMTを指定します。

次の例は、非同期rqEval2関数コールからJSON出力を取得する方法を示しています。

%script

set long 500

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

https://<host name>/oml/api/r-scripts/v1/jobs/<job id>

1 row selected.
SQL> select * from rqJobStatus(
        job_id => '<job id>');
NAME
--------------------------------------------------------------------
VALUE
--------------------------------------------------------------------

https://<host name>/oml/api/r-scripts/v1/jobs/<job id>/result

1 row selected.
SQL> select * from rqJobResult(
     job_id => '<job id>',
     out_fmt => 'PNG'
     );
---------------------------
NAME   ID   VALUE   IMAGE   
          1
      89504E470D0A1A0A0000000D49484452000001E0000001E008060000007DD4BE95000020004944

ノート:

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

非同期モード: XML出力

非同期ジョブからXML出力が想定される場合は、ジョブの発行時とジョブ結果のフェッチ時に、OUT_FMTXMLに設定する必要があります。

次の例は、非同期rqEval2関数コールからXML出力を取得する方法を示しています。

set long 1000

SELECT * FROM table(rqEval2(
    par_lst => '{"ore_async_flag":true, "ore_graphics_flag":true, "ore_service_level":"LOW"}',
    out_fmt => 'XML',
    scr_name => 'RandomRedDots2'));
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
https://<host name>/oml/api/r-scripts/v1/jobs/<job id>

1 row selected.
set long 500

SELECT * FROM rqJobStatus(
    job_id => '<Job id>'
);
  2  
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
https://<host name>/oml/api/r-scripts/v1/jobs/<job id>/result

1 row selected.

set long 1000

SELECT * FROM rqJobResult(
    job_id => '<job id>',
    out_fmt => 'XML'
);

結果は次のとおりです:


---------------------------
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[iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAYAAAB91L6VAAAgAElEQVR4nOzdd3xTZfvH8U/StEmTtGUV2rKnCCjrARGZZcsegqgoKoKCqIAyHIgKylABUUFAZIuAAjIUZMkqZVVk7yl7tSTpSNP79wfqT7HjFJqctlzv16uvx6e5c873pKVXcs59rtuglFIIIYQQwqeMegcQQggh7kVSgIUQQggdSAEWQgghdCAFWAghhNCBFGAhhBBCB1KAhRBCCB1IARZCCCF0IAVYCCGE0IEUYCGEEEIHUoCFEEIIHUgBFkIIIXQgBVgIIYTQgRRgIYQQQgdSgIUQQggdSA