12.7.3.1 oml_async_flag引数
特殊な制御引数oml_async_flag
は、ジョブを同期で実行するか非同期で実行するかを決定します。デフォルト値はfalseです。
oml_async_flag
引数の設定
-
同期モードで関数を実行するには、
oml_async_flag
をfalse
に設定します。同期モードでは、SQL APIはHTTPコールが終了するのを待機し、HTTPレスポンスの準備ができると戻ります。
デフォルトでは、
pyq*Eval
ファンクションは同期で実行されます。デフォルトの接続タイムアウト制限は60秒です。同期モードは、oml_async_flag
が設定されていない場合、またはfalse
に設定されている場合に使用されます。 -
非同期モードで関数を実行するには、
oml_async_flag
をtrue
に設定します。非同期モードでは、非同期ジョブがWebサーバーに発行された直後に、SQL APIはURLを返します。URLにはジョブIDが含まれており、これを使用してジョブ・ステータスをフェッチし、後続のSQLコールを実行できます。
非同期ジョブの発行例
この例では、次のように作成された表GRADE
を使用します。
CREATE TABLE GRADE (
NAME VARCHAR2(30),
GENDER VARCHAR2(1),
STATUS NUMBER(10),
YEAR NUMBER(10),
SECTION VARCHAR2(1),
SCORE NUMBER(10),
FINALGRADE NUMBER(10)
);
insert into GRADE values('Abbott', 'F', 2, 97, 'A', 90, 87);
insert into GRADE values('Branford', 'M', 1, 98, 'A', 92, 97);
insert into GRADE values('Crandell', 'M', 2, 98, 'B', 81, 71);
insert into GRADE values('Dennison', 'M', 1, 97, 'A', 85, 72);
insert into GRADE values('Edgar', 'F', 1, 98, 'B', 89, 80);
insert into GRADE values('Faust', 'M', 1, 97, 'B', 78, 73);
insert into GRADE values('Greeley', 'F', 2, 97, 'A', 82, 91);
insert into GRADE values('Hart', 'F', 1, 98, 'B', 84, 80);
insert into GRADE values('Isley', 'M', 2, 97, 'A', 88, 86);
insert into GRADE values('Jasper', 'M', 1, 97, 'B', 91, 83);
次のコードでは、Python関数score_diff
が定義され、computeGradeDiff
という名前でプライベート関数としてスクリプト・リポジトリに格納されます。この関数は、入力データのSCORE
列とFINALGRADE
列の差を計算して、新しいDIFF
列を割り当てた後にpandas.DataFrame
を返します。
begin
sys.pyqScriptCreate('computeGradeDiff','def score_diff(dat):
import numpy as np
import pandas as pd
df = dat.assign(DIFF=dat.SCORE-dat.FINALGRADE)
return df
');
end;
/
次のように、保存されたcomputeGradeDiff
スクリプトを実行します。
select *
from table(pyqTableEval(
inp_nam => 'GRADE',
par_lst => '{"oml_async_flag":true}',
out_fmt => NULL,
scr_name => 'computeGradeDiff',
scr_owner => NULL
));
結果のVALUE
列には、非同期ジョブのジョブIDが含まれるURLが示されます。
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
https://<oml-cloud-service-location-url>/oml/api/py-scripts/v1/jobs/<job id>
1 row selected.
親トピック: 非同期ジョブ(Autonomous Database)