10.6.3.1 oml_async_flag引数

特殊な制御引数oml_async_flagは、ジョブを同期で実行するか非同期で実行するかを決定します。デフォルト値はfalseです。

oml_async_flag引数の設定

  • 同期モードで関数を実行するには、oml_async_flagfalseに設定します。

    同期モードでは、SQL APIはHTTPコールが終了するのを待機し、HTTPレスポンスの準備ができると戻ります。

    デフォルトでは、pyq*Evalファンクションは同期で実行されます。デフォルトの接続タイムアウト制限は60秒です。同期モードは、oml_async_flagが設定されていない場合、またはfalseに設定されている場合に使用されます。

  • 非同期モードで関数を実行するには、oml_async_flagtrueに設定します。

    非同期モードでは、非同期ジョブが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://<host_name>/oml/tenants/<tenant_name>/databases/<database_name>/api/py-scripts/v1/jobs/<job_id>
1 row selected.