使用参数调用 UDx

可以通过在函数调用中的最后一个参数之后添加 USING PARAMETERS 子句来将参数传递到 UDx。

  • 请勿在最后一个参数和 USING PARAMETERS 子句之间插入逗号。

  • 在 USING PARAMETERS 子句之后,使用以下格式添加一个或多个参数定义:

    <parameter name> = <parameter value>
    
  • 用逗号分隔各个参数定义。

参数值可以是常量表达式(例如 1234 + SQRT(5678))。不能在表达式中使用易变函数(例如 RANDOM),因为易变函数不会返回常量值。如果确实提供了易变表达式作为参数值,则在默认情况下,Vertica 将返回参数类型不正确警告。然后,Vertica 会尝试运行不带有参数值的 UDx。如果 UDx 需要参数,则它会返回自己的错误,该错误会导致取消查询。

调用带有单个参数的 UDx

以下示例演示了如何调用 C++ 示例:定义参数 中所示的 Add2intsWithConstant UDSF 示例:

=> SELECT a, b, Add2intsWithConstant(a, b USING PARAMETERS constant=42) AS 'a+b+42' from example;
 a | b  | a+b+42
---+----+--------
 1 |  2 |     45
 3 |  4 |     49
 5 |  6 |     53
 7 |  8 |     57
 9 | 10 |     61
(5 rows)

要移除数字 3 的第一个实例,您可以调用 RemoveSymbol UDSF 示例:

=> SELECT '3re3mo3ve3sy3mb3ol' original_string, RemoveSymbol('3re3mo3ve3sy3mb3ol' USING PARAMETERS symbol='3');
  original_string   |   RemoveSymbol
--------------------+-------------------
 3re3mo3ve3sy3mb3ol | re3mo3ve3sy3mb3ol
(1 row)

调用带有多个参数的 UDx

以下示例显示了如何调用某个版本的 tokenize UDTF。此 UDTF 包含用于限制允许的最短单词的参数和用于强制以大写输出单词的参数。用逗号分隔多个参数。

=> SELECT url, tokenize(description USING PARAMETERS minLength=4, uppercase=true) OVER (partition by url) FROM T;
       url       |   words
-----------------+-----------
 www.amazon.com  | ONLINE
 www.amazon.com  | RETAIL
 www.amazon.com  | MERCHANT
 www.amazon.com  | PROVIDER
 www.amazon.com  | CLOUD
 www.amazon.com  | SERVICES
 www.dell.com    | LEADING
 www.dell.com    | PROVIDER
 www.dell.com    | COMPUTER
 www.dell.com    | HARDWARE
 www.vertica.com | WORLD'S
 www.vertica.com | FASTEST
 www.vertica.com | ANALYTIC
 www.vertica.com | DATABASE
(16 rows)

以下示例将调用 RemoveSymbol UDSF。通过更改可选参数 n 的值,您可以移除数字 3 的所有实例:

=> SELECT '3re3mo3ve3sy3mb3ol' original_string, RemoveSymbol('3re3mo3ve3sy3mb3ol' USING PARAMETERS symbol='3', n=6);
  original_string   | RemoveSymbol
--------------------+--------------
 3re3mo3ve3sy3mb3ol | removesymbol
(1 row)

调用带有可选参数或不正确参数的 UDx

您可以选择添加 Add2intsWithConstant UDSF 的常量参数。在未使用参数的情况下调用此约束不会返回错误或警告:

=> SELECT a,b,Add2intsWithConstant(a, b) AS 'sum' FROM example;
 a | b  | sum
---+----+-----
 1 |  2 |   3
 3 |  4 |   7
 5 |  6 |  11
 7 |  8 |  15
 9 | 10 |  19
(5 rows)

虽然调用带有不正确参数的 UDx 将生成警告,但在默认情况下,查询仍会运行。有关设置 UDx 在您提供不正确参数时的行为的详细信息,请参阅指定传递未注册参数的行为

=> SELECT a, b,  add2intsWithConstant(a, b USING PARAMETERS wrongparam=42) AS 'result' from example;
WARNING 4332:  Parameter wrongparam was not registered by the function and cannot
be coerced to a definite data type
 a | b  | result
---+----+--------
 1 |  2 |      3
 3 |  4 |      7
 5 |  6 |     11
 7 |  8 |     15
 9 | 10 |     19
(5 rows)