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_levelLOWサービス・レベルを使用することを指定します。

非同期コールは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