为 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)
}