10.4.2 SQLでのスクリプトの管理
このトピックでは、Rスクリプトを作成および管理するためのPL/SQLプロシージャとOracle Databaseデータ・ディクショナリ・ビューを紹介します。
Embedded R Execution用のSQL APIの関数は、OML4Rスクリプト・リポジトリに格納されている名前付きのスクリプトを引数として必要とします。PL/SQLプロシージャsys.rqScriptCreate
およびsys.rqScriptDrop
は、スクリプトを作成および削除します。スクリプトを作成する場合やスクリプト・リポジトリから削除する場合は、RQADMINロールが必要です。
sys.rqScriptCreate
関数を使用する場合、スクリプトの名前と、1つのR関数定義を含むR関数スクリプトを指定する必要があります。関数sys.rqScriptCreate
およびsys.rqScriptDrop
のコールは、BEGIN-END
PL/SQLブロックでラップする必要があります。スクリプト・リポジトリには、R関数がキャラクタ・ラージ・オブジェクト(CLOB
)として格納されるため、関数定義を一重引用符で囲んで文字列として指定する必要があります。
スクリプトの所有者は、rqGrant
プロシージャを使用してスクリプトへの読取りアクセス権を別のユーザーに付与したり、rqRevoke
プロシージャを使用して権限を取り消すことができます。別のユーザーによってアクセス権を付与されたスクリプトを使用するには、次のように、スクリプトの名前の前に所有者の名前とピリオドを付加して、所有者を指定する必要があります。
select * from table(rqEval2(NULL, '{"x": 1}', 'owner_name.script_name'));
パブリック・スクリプトやユーザーが所有しているスクリプトには、所有者の接頭辞は必要ありません。
次の各表は、スクリプト・リポジトリ内のスクリプトを管理するためのPL/SQLプロシージャと、スクリプトに関する情報を格納するデータ・ディクショナリ・ビューのリストです。
表10-13 スクリプトを管理するためのPL/SQLプロシージャ
PL/SQLプロシージャ | 説明 |
---|---|
rqGrant |
データストアまたはスクリプトへの読取りアクセス権を付与します。 |
rqRevoke |
データストアまたはスクリプトへの読取りアクセス権を取り消します。 |
sys.rqScriptCreate |
指定されたR関数を、指定された名前でスクリプト・リポジトリに追加します。 |
sys.rqScriptDrop |
指定されたR関数をスクリプト・リポジトリから削除します。 |
表10-14 スクリプトのデータ・ディクショナリ・ビュー
データ・ディクショナリ・ビュー | 説明 |
---|---|
ALL_RQ_SCRIPTS |
現行のユーザーが使用可能な、OML4Rスクリプト・リポジトリ内のスクリプトを示します |
USER_RQ_SCRIPTS |
現行のユーザーが所有している、スクリプト・リポジトリ内のスクリプトを示します。 |
USER_RQ_SCRIPT_PRIVS |
現行のユーザーが読取りアクセス権を付与したスクリプト・リポジトリ内のスクリプトおよびアクセス権が付与されたユーザーを示します。 |
SYS.RQ_SCRIPTS |
スクリプト・リポジトリ内のシステム・スクリプトを示します。 |
例10-16 SQL APIによるスクリプトの作成
この例では、sys.rqScriptCreate
プロシージャを使用して、Oracle Machine Learning for Rのスクリプト・リポジトリ内にスクリプトを作成します。
この例では、myRandomRedDots2
という名前のユーザー定義関数を作成します。このユーザー定義関数は2つの引数を受け入れ、2つの列を持ち指定の数のランダム標準値を表示するdata.frame
オブジェクトを返します。sys.rqScriptCreate
関数は、ユーザー定義関数をOML4Rスクリプト・リポジトリに格納します。
-- Create a script named myRandomRedDots2 and add it to the script repository.
-- Specify that the script is private and to overwrite a script with the same name.
BEGIN
sys.rqScriptCreate('myRandomRedDots2',
'function(divisor = 100, numDots = 100) {
id <- 1:10
plot(1:numDots, rnorm(numDots), pch = 21, bg = "red", cex = 2 )
data.frame(id = id, val = id / divisor)}',
v_global => FALSE,
v_overwrite => TRUE);
END;
/
-- Grant read privilege access to OMLUSER.
BEGIN
rqGrant('myRandomRedDots2', 'rqscript', 'OMLUSER');
END;
/
-- View the users granted read access to myRandomRedDots2.
select * from USER_RQ_SCRIPT_PRIVS;
NAME GRANTEE
---------------- -------
myRandomRedDots OMLUSER
-- Revoke the read privilege access from OMLUSER.
BEGIN
rqRevoke('myRandomRedDots2', 'rqscript', 'OMLUSER');
END;
/
-- Remove the script from the script repository.
BEGIN
sys.rqScriptDrop('myRandomRedDots2');
END;
/
親トピック: 埋込みRの実行用のSQLインタフェース