R 语言环境和共享库

本示例使用以下文件名:"libenv.R

代码

环境和共享库类提供与 AE 相关的环境和库信息。 此示例 AE 只有一个参数,即整数。 如果整数等于 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
给定一个正整数值,第二个参数作为返回结果数量的限制。 当必须限制返回结果的数量时,用它来代替关键字 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)