R言語環境と共有ライブラリ
この例では、次のファイル名を使用している: 'libenv.R 。
コード
環境クラスと共有ライブラリクラスは、AEに関連する環境とライブラリに関する情報を提供する。 この例AEは1つの引数、整数を取る。 整数が 0 の場合、AE は見た環境を出力する。 整数が1に等しい場合、AEは見たライブラリを出力する。
/tmp/libenv.Rファイルに以下のコードを入力する:
nz.fun <- function () {
getNext() # this can be called only once
input <- getInputColumn(0)
if (input == 1) {
apply(getLibraryInfo(), 1, function(ROW) {
setOutput(0, ROW[1])
setOutput(1, ROW[2])
outputResult()
})
}
else if (input == 0) {
entry <- getFirstEnvironmentEntry()
while (!is.null(entry)) {
setOutput(0, entry[1])
setOutput(1, entry[2])
outputResult()
entry <- getNextEnvironmentEntry()
}
}
else
stop('incorrect input: ', input)
}コンパイル
ソースファイルのあるディレクトリから、'
udtfテンプレートを使ってコードをコンパイルする:/nz/export/ae/utilities/bin/compile_ae --language r --template compile \
--version 3 --db dev --user nz libenv.R登録
例を登録する:
/nz/export/ae/utilities/bin/register_ae --language r --version 3 \
--template udtf --exe libenv.R --sig "lib_env(INT4)" \
--return "TABLE(name VARCHAR(1000), value VARCHAR(1000))" \
--db dev --user nz正の整数値が与えられた場合、第2引数は返される結果の数の制限として機能する。 これはキーワード LIMIT の代わりに使用され、返される結果の数を制限する必要がある場合に、AE をきれいに終了する。実行中
SELECT * FROM TABLE WITH FINAL(lib_env(1));
NAME | VALUE
-----------------------------
+-----------------------------------------------------------------
INZA....LIBNZAEADAPTERS |
/nz/data.1.0/base/202701/library/202809/host/libnzaeadapters.so
INZA....LIBNZAECHILD |
/nz/data.1.0/base/202701/library/202811/host/libnzaechild.so
INZA....LIBNZAEPARENT |
/nz/data.1.0/base/202701/library/202808/host/libnzaeparent.so
(3 rows)
SELECT * FROM TABLE WITH FINAL(lib_env(0)) limit 5;
NAME | VALUE
------------------+-------------------------------------------
R_LIBS_SITE |
R_SESSION_TMPDIR | /tmp/Rtmpp0196y
R_LIBS_USER | ~/R/x86_64-unknown-linux-gnu-library/2.11
TAR | /bin/gtar
TR | /usr/bin/tr
(5 rows)