10.6.3.4 非同期ジョブの例
次の例は、XML以外の出力およびXML出力を使用して非同期ジョブを発行する方法を示しています。
XML以外の出力
非同期ジョブを発行する際、JSON、PNGおよびリレーショナル出力の場合は、ジョブの発行時にOUT_FMT
引数をNULL
に設定します。ジョブ結果をフェッチする際は、rqJobResult
コールでOUT_FMT
を指定します。
rqEval2
関数コールを発行して、非同期ジョブを発行します。この関数では、PAR_LST
引数は、特殊な制御引数ore_async_flag
でジョブを非同期に発行することを指定し、特殊な制御引数ore_graphics_flag
でスクリプトでレンダリングされたイメージを取得することを指定します。
OUT_FMT
引数はNULL
です。SCR_NAME
パラメータは、RandomRedDots2
という名前でスクリプト・リポジトリに格納されているユーザー定義R関数を指定します。
非同期コールはCLOBでジョブ・ステータスURLを返し、set long [length]
をコールして完全なURLを取得できます。
%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.
rqJobStatus
関数をコールするSELECT
文を実行します。これにより、ジョブ結果の準備ができると、ジョブIDが含まれるリソースURLが返されます。
select * from rqJobStatus(
job_id => '<job id>');
ジョブがまだ保留中の場合は、出力は次のようになります。
NAME
----------------------------------------------------------------------
VALUE
----------------------------------------------------------------------
job is still running
1 row selected.
ジョブが終了すると、出力は次のようになります。
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
https://<host name>/oml/api/r-scripts/v1/jobs/<job id>/result
1 row selected.
rqJobResult
関数をコールするSELECT
文を実行します。
OUT_FMT
引数で、文字列'PNG'
は、戻り値とイメージ(タイトルとイメージ・バイト)の両方を結果に含めるように指定します。
select * from rqJobResult(
job_id => '<job id>',
out_fmt => 'PNG'
);
出力は次のようになります。
---------------------------
NAME ID VALUE IMAGE
1
89504E470D0A1A0A0000000D49484452000001E0000001E008060000007DD4BE950000200049444154789CECDD775853E
ノート:
ここでは、出力の一部のみを示します。出力の長さを決定するには、パラメータset long [length]
を使用します。
XML出力
非同期ジョブからXML出力が想定される場合は、ジョブの発行時とジョブ結果のフェッチ時に、OUT_FMT
引数を'XML'
に設定します。
この例では、「rqIndexEval2関数」に示した例で作成されたスクリプトRandomRedDots2
を使用します。
rqEval2
関数コールを発行して、非同期ジョブを発行します。この関数では、PAR_LST
引数は、特殊な制御引数ore_async_flag
でジョブを非同期に発行することを指定し、特殊な制御引数ore_service_level
でLOW
サービス・レベルを使用することを指定します。
非同期コールはCLOBでジョブ・ステータスURLを返し、set long [length]
をコールして完全なURLを取得できます。
%script
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.
rqJobStatus
関数をコールするSELECT
文を実行します。これにより、ジョブ結果の準備ができると、ジョブIDが含まれるリソースURLが返されます。
select * from rqJobStatus(
job_id => '<job id>'
);
ジョブがまだ保留中の場合は、出力は次のようになります。
NAME
----------------------------------------------------------------------
VALUE
----------------------------------------------------------------------
job is still running
1 row selected.
ジョブ結果の準備ができると、出力は次のようになります。
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
https://<host name>/oml/api/r-scripts/v1/jobs/<job id>/result
1 row selected.
rqJobResult
関数をコールするSELECT
文を実行します。
OUT_FMT
引数で、文字列'XML'
は、返される表にXML文字列であるCLOBが含まれることを指定します。
%script
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
親トピック: 非同期ジョブ