为 R 函数设置 null 输入和可变性行为
Vertica 支持为采用 R 编写的 UDx 定义可变性设置和 null 输入设置。这两项设置都有助于提高 R 函数的性能。
可变性设置
可变性设置向 Vertica 优化器描述了该函数的行为。例如,如果输入数据有相同的行,并且您知道 UDx 是不可变的,则可以将 UDx 定义为 IMMUTABLE。这样即可告知 Vertica 优化器,它可以返回对其调用该函数的后续相同行的缓存值,而不是对每个相同的行都运行该函数。
要指示 UDx 的可变性,请将 R 工厂函数的 volatility 参数设置为以下值之一:
如果未定义可变性,则函数会被视为 VOLATILE。
以下示例会在 multiplyTwoIntsFactory 函数中将可变性设置为 STABLE:
multiplyTwoIntsFactory <- function() {
list(name = multiplyTwoInts,
udxtype = c("scalar"),
intype = c("float","float"),
outtype = c("float"),
volatility = c("stable"),
parametertypecallback = multiplyTwoIntsParameters)
}
Null 输入行为
Null 输入设置决定如何响应包含 null 输入的行。例如,您可以选择在任何输入为 null 时返回 null,而不调用函数并让函数处理 NULL 输入。
要指示 UDx 如何响应 NULL 输入,请将 R 工厂函数的 strictness 参数设置为以下值之一:
如果未定义 null 输入行为,则无论是否存在 NULL 值,系统都会对每行数据调用该函数。
以下示例会在 multiplyTwoIntsFactory 函数中将 NULL 输入行为设置为 STRICT:
multiplyTwoIntsFactory <- function() {
list(name = multiplyTwoInts,
udxtype = c("scalar"),
intype = c("float","float"),
outtype = c("float"),
strictness = c("strict"),
parametertypecallback = multiplyTwoIntsParameters)
}