12.6.8 pyqScriptCreateプロシージャ(オンプレミス・データベース)
このトピックでは、オンプレミスOracle DatabaseのpyqScriptCreate
プロシージャについて説明します。pyqScriptCreate
プロシージャは、ユーザー定義Python関数を作成し、OML4Pyスクリプト・リポジトリに追加します。
ユーザー定義Python関数を作成するには、PYQADMINデータベース・ロールが必要です。
構文
sys.pyqScriptCreate (
V_NAME VARCHAR2 IN
V_SCRIPT CLOB IN
V_GLOBAL BOOLEAN IN DEFAULT
V_OVERWRITE BOOLEAN IN DEFAULT)
パラメータ | 説明 |
---|---|
V_NAME | OML4Pyスクリプト・リポジトリ内のユーザー定義Python関数の名前。 |
V_SCRIPT | Python関数の定義。 |
V_GLOBAL | TRUE は、ユーザー定義Python関数がパブリックであることを指定します。FALSE は、ユーザー定義Python関数がプライベートであることを指定します。
|
V_OVERWRITE | スクリプト・リポジトリにV_NAMEと同じ名前のユーザー定義Python関数がすでにある場合、TRUE ではそのユーザー定義Python関数の内容がV_SCRIPTに置き換えられ、FALSE では置き換えられません。
|
例12-27 pyqScriptCreateプロシージャの使用
この例では、OML4Pyスクリプト・リポジトリにpyqFun2
という名前のプライベート・ユーザー定義Python関数を作成します。
BEGIN
sys.pyqScriptCreate('pyqFun2',
'def return_frame():
import numpy as np
import pickle
z = np.array([y for y in zip([str(x)+"demo" for x in range(10)],
[float(x)/10 for x in range(10)],
[x for x in range(10)],
[bool(x%2) for x in range(10)],
[pickle.dumps(x) for x in range(10)],
["test"+str(x**2) for x in range(10)])],
dtype=[("a", "U10"), ("b", "f8"), ("c", "i4"), ("d", "?"),
("e", "S20"), ("f", "O")])
return z');
END;
/
この例では、スクリプト・リポジトリにpyqFun2
という名前のグローバル・ユーザー定義Python関数を作成し、同じ名前の既存のユーザー定義Python関数を上書きします。
BEGIN
sys.pyqScriptCreate('pyqFun2',
'def return_frame():
import numpy as np
import pickle
z = np.array([y for y in zip([str(x)+"demo" for x in range(10)],
[float(x)/10 for x in range(10)],
[x for x in range(10)],
[bool(x%2) for x in range(10)],
[pickle.dumps(x) for x in range(10)],
["test"+str(x**2) for x in range(10)])],
dtype=[("a", "U10"), ("b", "f8"), ("c", "i4"), ("d", "?"),
("e", "S20"), ("f", "O")])
return z',
TRUE, -- Make the user-defined Python function global.
TRUE); -- Overwrite any global user-defined Python function
-- with the same name.
END;
/
この例では、スクリプト・リポジトリにcreate_iris_table
という名前のプライベート・ユーザー定義Python関数を作成します。
BEGIN
sys.pyqScriptCreate('create_iris_table',
'def create_iris_table():
from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()
x = pd.DataFrame(iris.data, columns = ["Sepal_Length",\
"Sepal_Width","Petal_Length","Petal_Width"])
y = pd.DataFrame(list(map(lambda x: {0:"setosa", 1: "versicolor",\
2: "virginica"}[x], iris.target)),\
columns = ["Species"])
return pd.concat([y, x], axis=1)');
END;
/
現在のユーザーが所有するユーザー定義Python関数を表示します。
SELECT * from USER_PYQ_SCRIPTS;
NAME SCRIPT
----------------- ---------------------------------------------------------------------
create_iris_table def create_iris_table(): from sklearn.datasets import load_iris ...
pyqFun2 def return_frame(): import numpy as np import pickle ...
現在のユーザーが使用可能なユーザー定義Python関数を表示します。
SELECT * from ALL_PYQ_SCRIPTS;
OWNER NAME SCRIPT
-------- ----------------- --------------------------------------------------------------------
OML_USER create_iris_table "def create_iris_table(): from sklearn.datasets import load_iris ...
OML_USER pyqFun2 "def return_frame(): import numpy as np import pickle ...
PYQSYS pyqFun2 "def return_frame(): import numpy as np import pickle ...