数智融合计算服务 DATAARTSFABRIC-CREATE FUNCTION:参数说明

时间:2025-06-17 08:50:05

参数说明

表1 CREATE FUNCTION参数说明

参数

描述

取值范围

function_name

要创建的函数名字(可以用模式修饰)。

取值范围:字符串,要符合标识符的命名规范。

须知:

如果创建的函数名与系统函数同名,建议指定schema。调用自定义函数时需指定schema,否则系统会优先调用系统函数。

argname

函数参数的名字。

取值范围:字符串,要符合标识符的命名规范。

argtype

函数参数的类型。

-

rettype

函数返回值的数据类型。

-

LANGUAGE lang_name

用于实现函数的语言的名字。自定义函数仅支持python。

-

IMMUTABLE

表示该函数在给出同样的参数值时总是返回同样的结果。

如果函数的入参是常量,会在优化器阶段计算该函数的值。益处是可以尽早获取表达式的值,从而能更准确地进行代价估算,生成的执行计划也更优。

用户自定义的IMMUTABLE的函数是会被自动下推到DN执行的,但是这样可能有潜在的风险,即如果用户错误定义了函数的IMMUTABLE属性,但是函数执行的过程并不是IMMUTABLE的,那么可能会导致结果错误等严重问题。因此,用户在指定函数的属性为IMMUTABLE的时候,要特别慎重。

举例如下:

  1. 如果自定义函数中有不下推的因素,则该函数不能定义成IMMUTABLE,因为IMMUTABLE意味着要下推到DN执行,与函数内部的不下推因素相互冲突。典型场景例如,包含不下推的函数、语法等。
  2. 如果自定义函数中含有聚合运算,但聚合运算的运算需要生成STREAM计划才能完成计算的(部分结果在DN计算,部分结果在CN计算,例如listagg函数等)。

STABLE

表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。

-

VOLATILE

表示该函数值可以在一次表扫描内改变,因此不会做任何优化。

-

SHIPPABLE

NOT SHIPPABLE

表示该函数是否可以下推到DN上执行。

  • 对于IMMUTABLE类型的函数,函数始终可以下推到DN上执行。
  • 对于STABLE/VOLATILE类型的函数,仅当函数的属性是SHIPPABLE的时候,函数可以下推到DN执行。

    用户在定义函数的SHIPPABLE属性时也需特别慎重,SHIPPABLE意味着整个函数会下推到DN上执行,如果设置不当,会导致结果错误等严重问题。

    与定义IMMUTABLE属性一样,SHIPPABLE属性的定义也有诸多约束,简单来说就是函数内不能有不可下推的因素,函数下推到单DN执行后,函数内部的计算逻辑仅依赖当前DN的数据集合。

    举例如下:

    1. 函数内部有不可下推的因素,函数,语法等,那么该函数不能定义为SHIPPABLE,可参考语句下推调优。
    2. 函数内部的计算过程可能需要跨DN数据,这种情况该函数通常不能定义为SHIPPABLE,例如一些聚合运算等。

PACKAGES

表示该函数运行时环境所依赖的python三方包。

-

PYTHON_VERSION

表示函数运行时环境的python的具体版本。当前仅支持指定为3.9和3.11。

-

HANDLER

表示函数的主函数入口。

-

STRICT

STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,当有NULL值参数时该函数不会被执行;而只是自动返回一个NULL结果。

-

definition

函数体的具体实现。

-

support.huaweicloud.com/devg-fabric/dataartsfabric_sql_04_0290.html