10.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 50
XML
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