10.6.2.7 rqGroupEval2関数
関数rqGroupEval2
は、Oracle Autonomous Databaseで使用すると、データを1つ以上の列でグループ化し、各グループに対してユーザー定義R関数を実行します。
関数rqGroupEval2
は、scr_name
パラメータで指定されたユーザー定義R関数を実行します。inp_nam
パラメータを使用してユーザー定義R関数にデータを渡し、par_lst
パラメータを使用してユーザー定義R関数に引数を渡します。grp_col
パラメータを使用して、1つ以上のグループ化列を指定します。out_fmt
パラメータを使用して、戻り値の形式を定義します。
構文
rqGroupEval2 (
INP_NAM VARCHAR2,
PAR_LST VARCHAR2,
OUT_FMT VARCHAR2,
GRP_COL VARCHAR2,
SCR_NAME VARCHAR2,
SCR_OWNER VARCHAR2 DEFAULT NULL,
ENV_NAME VARCHAR2 DEFAULT NULL
)
パラメータ
パラメータ | 説明 |
---|---|
|
SCR_NAMEパラメータで指定されたR関数に渡すデータを指定する表またはビューの名前。別のユーザーが所有する表またはビューを使用する場合は、次の形式を使用します:
指定された表またはビューに対する読取りアクセス権が必要です。 |
|
たとえば、データ・パラレル処理でR関数を実行するには、次を使用します。
関連項目: 特殊な制御引数 |
|
ファンクションによって返される出力の形式。次のいずれかになります。
関連項目: 出力形式。 |
|
データのパーティション化に使用するグループ化列の名前。複数の列を区切るには、カンマを使用します。たとえば、
|
|
OML4Rスクリプト・リポジトリ内のユーザー定義R関数の名前。 |
|
登録済Rスクリプトの所有者。デフォルト値はNULL です。NULL の場合、ユーザーのスクリプト・リポジトリでRスクリプトを検索します。
|
|
指定されたユーザー定義R関数の実行時に使用されるconda環境の名前。 |
戻り値
ユーザー定義のrqGroupEval2
関数は、OUT_FMT
パラメータ値で指定された構造を持つ表を返します。
例
例10-45 rqGroupEval2関数の使用方法
この例では、rqTableEval2関数(Autonomous Database)で示した例で作成されたIRIS表を使用します。R関数を定義し、groupCountという名前でスクリプト・リポジトリに格納します。
%script
BEGIN
sys.rqScriptCreate('groupCount',
'function(dat){
x <- data.frame(table(dat$Species))
names(x) <- c("Species", "Count")
x}',
FALSE, TRUE); -- V_GLOBAL, V_OVERWRITE
END;
/
出力は、次のようなものです。
PL/SQL procedure successfully completed.
---------------------------
例10-46 JSON出力
rqGroupEval2関数をコールして、ユーザー定義関数groupCount
を実行します。この関数では、INP_NAM
引数は、関数に渡すIRIS表内のデータを指定します。PAR_LST
引数は、特殊な制御引数ore_input_typeを指定します。OUT_FMT
引数で、文字列'JSON'は、返される表にJSON文字列であるCLOBが含まれることを指定します。GRP_COL
パラメータは、グループ化する列を指定します。SCR_NAME
パラメータは、groupCountという名前でスクリプト・リポジトリに格納されているユーザー定義R関数を指定します。
%script
set long 500
SELECT * FROM table(rqGroupEval2(
inp_nam => 'IRIS',
par_lst => '{"ore_service_level":"MEDIUM", "ore_parallel_flag":true}',
out_fmt => 'JSON',
grp_col => 'Species',
scr_name => 'groupCount'));
出力は、次のようなものです。
NAME VALUE
[{"Count":50,"Species":"setosa"},{"Count":50,"Species":"versicolor"},{"Count":50,"Species":"virginica"}]
例10-47 XML出力
rqGroupEval2関数をコールして、ユーザー定義関数groupCount
を実行します。この関数では、INP_NAM
引数は、関数に渡すIRIS表内のデータを指定します。PAR_LST
引数は、特殊な制御引数ore_service_level
でMEDIUM
サービス・レベルを使用することを指定し、特殊な制御引数ore_parallel_flag
をtrue
に設定します。OUT_FMT
パラメータは、値をXML形式で返すことを指定します。GRP_COL
パラメータでは、グループ化する列を指定します。SCR_NAME
パラメータは、groupCountという名前でスクリプト・リポジトリに格納されているユーザー定義R関数を指定します。
%script
set long 500
SELECT * FROM table(rqGroupEval2(
inp_nam => 'IRIS',
par_lst => '{ore_service_level":"MEDIUM", "ore_parallel_flag":true}',
out_fmt => 'XML',
grp_col => 'Species',
scr_name => 'groupCount'));
出力は、次のようなものです。
NAME VALUE
<root><frame_obj><ROW-frame_obj><Species>setosa</Species><Count>50</Count></ROW-frame_obj><ROW-frame_obj><Species>versicolor</Species><Count>50</Count></ROW-frame_obj><ROW-frame_obj><Species>virginica</Species><Count>50</Count></ROW-frame_obj></frame_obj></root>
例10-48 リレーショナル出力
Select
文を実行して、リレーショナル
出力を取得します。
%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
次のコードでは、SQL問合せを実行して、rqGroupEval2
関数コールの結果からすべての列を取得します。これにより、指定したスクリプトおよび環境に基づいてPNG出力が生成されます。
select *
from table(rqGroupEval2(
inp_nam => 'IRIS',
par_lst => '{"ore_graphics_flag":true}',
out_fmt => 'PNG',
grp_col => 'Species',
scr_name => 'test_ggplot2_inp',
scr_owner => NULL,
env_name => 'myrenv'));
出力が次のように表示されます。
NAME ID VALUE IMAGE
---------- ---------- -------------------- ------------------------------
GROUP_seto 1 "hello world" 89504E470D0A1A0A0000000D494844
sa 52000001E0000001E008060000007D
D4BE950000200049444154789CEDDD
777C14D5FEC6F1676B7A42E8BD480B
C58BB41F57A504040554044150B180
8A624541B1
GROUP_vers 1 "hello world" 89504E470D0A1A0A0000000D494844
icolor 52000001E0000001E008060000007D
D4BE950000200049444154789CEDDD
777414E5E2C6F16753482F90D0420B
NAME ID VALUE IMAGE
---------- ---------- -------------------- ------------------------------
3D34E9971F0AA10852548A20551154
C48E342BD7
GROUP_virg 1 "hello world" 89504E470D0A1A0A0000000D494844
inica 52000001E0000001E008060000007D
D4BE950000200049444154789CEDDD
777C1475E2C6F1674B7A0112A49720
2D1405293F0EA50404292A45101014
4145ACA020