9.6.5 出力形式
OUT_FMTパラメータは、表関数rqEval2、rqGroupEval2、rqIndexEval2、rqRowEval2、rqTableEval2およびrqJobResultによって返される出力の形式を制御します。
出力形式は次のとおりです。
JSON
OUT_FMTがJSONに設定されている場合、表関数は、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 50XML
XMLでOUT_FMTが指定されている場合、表関数は固定列が含まれる表でレスポンスを返します。出力は、2つの列で構成されています。NAME列には、行の名前が示されます。rqEval2、rqTableEval2、rqRowEval2関数が返す場合、NAME列値はNULLです。rqGroupEval2、rqIndexEval2の場合、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
PNGでOUT_FMTが指定されている場合、表関数は固定列(イメージ・バイト列を含む)が含まれる表でレスポンスを返します。SQL APIをコールする場合、実行されたスクリプトでレンダリングされたイメージをWebサーバーが取得できるように、特殊な制御引数ore_graphics_flagをtrueに設定する必要があります。
PNG出力は、次の4つの列で構成されています。NAME列には、行の名前が示されます。rqEval2およびrqTableEval2関数が返す場合、NAME列値はNULLです。rqRowEval2、rqGroupEval2、rqIndexEval2の場合、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_flagをtrueに設定する場合は、次に示すように、XML以外の結果を返すジョブに対してはOUT_FMTをNULLに設定するか、XML結果を返すジョブに対してはXMLに設定します。
非同期モード: XML以外の出力
非同期ジョブを発行する際、JSON、PNGおよびリレーショナル出力の場合は、ジョブの発行時にOUT_FMTをNULLに設定します。ジョブ結果をフェッチする際は、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_FMTをXMLに設定する必要があります。
次の例は、非同期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