ALTER FUNCTION

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

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

另请参阅:

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

语法

用户定义函数和外部函数

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

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

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

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

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 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。有关设置跟踪级别的更多信息,请参阅 设置跟踪级别

COMMENT = 'string_literal'

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

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

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

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

有关在语句中指定标签的信息,请参阅 对象和列的标签配额

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 的名称来替换现有的请求转换器或响应转换器。有关更多信息,请参阅 将请求和响应转换器与远程服务的数据结合使用

访问控制要求

用于执行此 SQL 命令的 角色 必须至少具有以下 权限

权限

对象

备注

USAGE

函数

允许调用 UDF 或外部函数。

APPLY

标签

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

请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。

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

有关对 安全对象 执行 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
语言: 中文