ALTER FUNCTION

修改现有用户定义函数或外部函数的属性。

要对 UDF 进行任何其他更改,必须删除该函数(使用 DROP FUNCTION),然后重新创建它。

另请参阅:

编写外部函数用户定义的函数概述CREATE FUNCTIONDROP FUNCTIONSHOW USER FUNCTIONSDESCRIBE FUNCTIONCREATE EXTERNAL FUNCTIONDESCRIBE FUNCTIONDROP FUNCTIONSHOW EXTERNAL FUNCTIONS

语法

用户定义函数和外部函数

ALTER FUNCTION 的语法因您使用的 UDF 处理程序语言而异。

Java 处理程序

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) RENAME TO <new_name>

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET SECURE

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) UNSET { SECURE | LOG_LEVEL | TRACE_LEVEL | COMMENT }

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET
  [ LOG_LEVEL = '<log_level>' ]
  [ TRACE_LEVEL = '<trace_level>' ]
  [ EXTERNAL_ACCESS_INTEGRATIONS = ( <integration_name> [ , <integration_name> ... ] ) ]
  [ SECRETS = ( '<secret_variable_name>' = <secret_name> [ , '<secret_variable_name>' = <secret_name> ... ] ) ]
  [ COMMENT = '<string_literal>' ]

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) UNSET TAG <tag_name> [ , <tag_name> ... ]
Copy

JavaScript 处理程序

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) RENAME TO <new_name>

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET SECURE

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) UNSET { SECURE | LOG_LEVEL | TRACE_LEVEL | COMMENT }

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET
  [ LOG_LEVEL = '<log_level>' ]
  [ TRACE_LEVEL = '<trace_level>' ]
  [ COMMENT = '<string_literal>' ]

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) UNSET TAG <tag_name> [ , <tag_name> ... ]
Copy

Python 处理程序

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) RENAME TO <new_name>

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET SECURE

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) UNSET { SECURE | LOG_LEVEL | TRACE_LEVEL | COMMENT }

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET
  [ LOG_LEVEL = '<log_level>' ]
  [ TRACE_LEVEL = '<trace_level>' ]
  [ EXTERNAL_ACCESS_INTEGRATIONS = ( <integration_name> [ , <integration_name> ... ] ) ]
  [ SECRETS = ( '<secret_variable_name>' = <secret_name> [ , '<secret_variable_name>' = <secret_name> ... ] ) ]
  [ COMMENT = '<string_literal>' ]

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) UNSET TAG <tag_name> [ , <tag_name> ... ]
Copy

Scala 处理程序

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) RENAME TO <new_name>

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET SECURE

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) UNSET { SECURE | LOG_LEVEL | TRACE_LEVEL | COMMENT }

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET
  [ LOG_LEVEL = '<log_level>' ]
  [ TRACE_LEVEL = '<trace_level>' ]
  [ EXTERNAL_ACCESS_INTEGRATIONS = ( <integration_name> [ , <integration_name> ... ] ) ]
  [ SECRETS = ( '<secret_variable_name>' = <secret_name> [ , '<secret_variable_name>' = <secret_name> ... ] ) ]
  [ COMMENT = '<string_literal>' ]

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) UNSET TAG <tag_name> [ , <tag_name> ... ]
Copy

SQL 处理程序

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) RENAME TO <new_name>

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET SECURE

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) UNSET { SECURE | LOG_LEVEL | TRACE_LEVEL | COMMENT }

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET
  [ LOG_LEVEL = '<log_level>' ]
  [ TRACE_LEVEL = '<trace_level>' ]
  [ COMMENT = '<string_literal>' ]

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) UNSET TAG <tag_name> [ , <tag_name> ... ]
Copy

外部函数

任何语言处理程序

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET API_INTEGRATION = <api_integration_name>

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET HEADERS = ( [ '<header_1>' = '<value>' [ , '<header_2>' = '<value>' ... ] ] )

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET CONTEXT_HEADERS = ( [ <context_function_1> [ , <context_function_2> ...] ] )

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET MAX_BATCH_ROWS = <integer>

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET COMPRESSION = <compression_type>

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) SET { REQUEST_TRANSLATOR | RESPONSE_TRANSLATOR } = <udf_name>

ALTER FUNCTION [ IF EXISTS ] <name> ( [ <arg_data_type> , ... ] ) UNSET
              { COMMENT | HEADERS | CONTEXT_HEADERS | MAX_BATCH_ROWS | COMPRESSION | SECURE | REQUEST_TRANSLATOR | RESPONSE_TRANSLATOR }
Copy

参数

用户定义函数和外部函数

name

指定要更改的 UDF 标识符。标识符可以包含架构名称和数据库名称,以及函数名称。如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。

arg_data_type [ , ... ]

指定外部函数的实参/输入数据类型。

如果函数接受实参,则 ALTER 命令必须指定实参类型,因为函数支持名称重载(即同一架构中的两个函数可以具有相同的名称),并且实参类型用于标识函数。

SET ...

指定要为函数设置的属性:

SECURE

指定函数是否安全。有关更多详细信息,请参阅 使用安全 UDFs 和存储过程保护敏感信息

LOG_LEVEL = 'log_level'

指定应引入并在活动事件表中可用的消息的严重级别。引入指定级别(以及更严重级别)的消息。

有关级别的更多信息,请参阅 LOG_LEVEL。有关设置日志级别的更多信息,请参阅 为日志、指标和跟踪设置级别

TRACE_LEVEL = 'trace_level'

控制如何将跟踪事件引入到事件表中。

有关级别的更多信息,请参阅 TRACE_LEVEL。有关设置跟踪级别的更多信息,请参阅 为日志、指标和跟踪设置级别

EXTERNAL_ACCESS_INTEGRATIONS = ( integration_name [ , ... ] )

此函数的处理程序代码访问外部网络所需的 :doc:` 外部访问集成 </sql-reference/sql/create-external-access-integration>` 的名称。

外部访问集成包含 网络规则密钥,这些规则和密钥指定了处理程序代码请求外部网络(如外部 REST API)所需的外部位置和凭证(如果有)。

有关更多信息,请参阅 外部网络访问概述

SECRETS = ( 'secret_variable_name' = secret_name [ , ...  ] )

将密钥的名称分配给变量,以便在从处理程序代码中的密钥中检索信息时,可以使用这些变量引用密钥。

此参数的值是赋值表达式列表,其中包含以下部分:

  • secret_name 作为在 外部访问集成 的 ALLOWED_AUTHENTICATION_SECRETS 参数值中指定的密钥名称。该外部访问集成的名称必须依次指定为该 CREATE FUNCTION 调用的 EXTERNAL_ACCESS_INTEGRATIONS 参数的值。

    如果指定的 SECRETS 值的密钥未包含在由 EXTERNAL_ACCESS_INTEGRATIONS 参数指定的集成中,将收到错误消息。

  • 'secret_variable_name' 作为从密钥中检索信息时将在处理程序代码中使用的变量。

COMMENT = 'string_literal'

添加注释或覆盖函数的现有注释。指定的值将显示在 SHOW FUNCTIONSSHOW USER FUNCTIONS 输出中的 DESCRIPTION 列。

TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]

指定 标签 名称和标签字符串值。

标签值始终为字符串,标签值的最大字符数为 256。

有关在语句中指定标签的信息,请参阅 Tag quotas

UNSET ...

指定要为函数取消设置的属性,这会将其重置为默认值。

用户定义的函数

RENAME TO new_name

为 UDF 指定新标识符;标识符和现有实参数据类型的组合对于架构必须是唯一的。

有关更多详细信息,请参阅 标识符要求

备注

为 UDF 指定新名称时,不要指定实参数据类型或括号,只能指定新名称。

可以将对象移动到其他数据库和/或架构,同时选择重命名对象。为此,请指定一个限定 new_name 值,该值分别以 db_name.schema_name.object_nameschema_name.object_name 的形式包含新数据库和/或架构名称。

备注

  • 目标数据库和/或架构必须已存在。此外,新位置中不能存在同名对象;否则,该语句将返回错误。

  • 除非 对象所有者(即拥有对象 OWNERSHIP 权限的角色)也拥有目标架构,否则禁止将对象移动到托管访问架构。

重命名对象时,引用该对象的其他对象必须使用新名称进行更新。

外部函数

RENAME TO new_name

指定函数的新标识符。

对于在其中创建函数的架构,标识符不需要是唯一的,因为函数由其名称和实参类型标识和解析。但是,签名(名称和参数数据类型)在架构中必须是唯一的。

name 必须遵循 Snowflake :doc:` 标识符 </sql-reference/identifiers>` 的规则。有关更多详细信息,请参阅 标识符要求

备注

为外部函数指定 名称时,不要指定实参数据类型或括号;函数将继续使用与以前相同的实参。

api_integration_name

这是应该用于验证对代理服务调用的 API 集成对象的名称。

有关此参数的更多详细信息,请参阅 CREATE EXTERNAL FUNCTION

HEADERS = ( 'header_1' = 'value' [ , 'header_2' = 'value' ... ] )

此子句允许用户附加随每个请求发送的键值元数据。

该值必须是常量字符串,而不是表达式。

有关此参数的更多详细信息,请参阅 CREATE EXTERNAL FUNCTION

CONTEXT_HEADERS = ( [ context_function_1 [ , context_function_2 ... ] ] )

这类似于 HEADERS,但它不是只允许常量字符串,而是允许将 Snowflake 上下文函数结果绑定到 HTTP 标头。

每个值都必须是上下文函数的名称。不应引用这些名称。

有关此参数的更多详细信息,请参阅 CREATE EXTERNAL FUNCTION

COMPRESSION = compression_type

如果指定了此子句,则在从 Snowflake 发送到代理服务时,以及从代理服务发送回 Snowflake 时,将使用指定的格式压缩 JSON 有效负载。

有关 compression_type 有效值的更多详细信息,请参阅 CREATE EXTERNAL FUNCTION

{ REQUEST_TRANSLATOR | RESPONSE_TRANSLATOR } = udf_name

如果外部函数还没有请求转换器或响应转换器,则添加请求转换器或响应转换器,或者通过指定先前创建的 JavaScript UDF 的名称来替换现有的请求转换器或响应转换器。有关更多信息,请参阅 将请求和响应转换器与远程服务的数据结合使用

访问控制要求

用于执行此操作的 角色 必须至少具有以下 权限

权限

对象

备注

USAGE

函数

允许调用 UDF 或外部函数。

APPLY

标签

允许在 UDF 或外部函数上设置一个标签。

Operating on an object in a schema requires at least one privilege on the parent database and at least one privilege on the parent schema.

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

使用说明

  • 关于元数据:

    注意

    客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段

用户定义的函数

  • 如果在 :doc:` 掩码策略 <create-masking-policy>` 中使用 UDF,请确保列的数据类型、UDF 和掩码策略匹配。有关更多信息,请参阅 掩码策略中的用户定义函数

外部函数

  • 没有针对 API_INTEGRATION 的 UNSET 命令。您可以更改 API_INTEGRATION,但不能取消设置它。有关更多信息,请参阅 ALTER API INTEGRATION

示例

将函数 function1 重命名为 function2

ALTER FUNCTION IF EXISTS function1(number) RENAME TO function2;
Copy

将常规函数 function2 转换为安全函数:

ALTER FUNCTION function2(number) SET SECURE;
Copy

外部函数

更改外部函数的 API 集成:

ALTER FUNCTION function4(number) SET API_INTEGRATION = api_integration_2;
Copy

为外部函数设置每个批处理的最大行数:

ALTER FUNCTION function5(number) SET MAX_BATCH_ROWS = 100;
Copy
语言: 中文