CREATE SERVICE

在当前架构中创建一个新的 Snowpark Container Services 服务。如果已存在具有该名称的服务,请使用 DROP SERVICE 命令删除以前创建的服务。

您可以运行服务的多个实例。每个服务实例都是服务规范文件中定义的容器的集合,这些容器在计算池中的节点上一起运行。如果您运行服务的多个实例,负载均衡器将管理传入流量。

请注意,必须按特定顺序指定命令参数。有关更多信息,请参阅“使用说明”部分。

另请参阅:

ALTER SERVICEDESCRIBE SERVICEDROP SERVICESHOW SERVICES

语法

CREATE SERVICE [ IF NOT EXISTS ] <name>
  IN COMPUTE POOL <compute_pool_name>
  {
     fromSpecification
     | fromSpecificationTemplate
  }
  [ EXTERNAL_ACCESS_INTEGRATIONS = ( <EAI_name> [ , ... ] ) ]
  [ AUTO_RESUME = { TRUE | FALSE } ]
  [ MIN_INSTANCES = <num> ]
  [ MIN_READY_INSTANCES = <num> ]
  [ MAX_INSTANCES = <num> ]
  [ QUERY_WAREHOUSE = <warehouse_name> ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ COMMENT = '{string_literal}']
Copy

其中:

fromSpecification ::=
  {
    FROM SPECIFICATION_FILE = '<yaml_file_path>' -- for native app service.
    | FROM @<stage> SPECIFICATION_FILE = '<yaml_file_path>' -- for non-native app service.
    | FROM SPECIFICATION <specification_text>
  }
Copy
fromSpecificationTemplate ::=
  {
    FROM SPECIFICATION_TEMPLATE_FILE = '<yaml_file_stage_path>' -- for native app service.
    | FROM @<stage> SPECIFICATION_TEMPLATE_FILE = '<yaml_file_stage_path>' -- for non-native app service.
    | FROM SPECIFICATION_TEMPLATE <specification_text>
  }
  USING ( <key> => <value> [ , <key> => <value> [ , ... ] ]  )
Copy

必填参数

name

指定服务标识符(即名称)的字符串;对于在其中创建服务的架构,它必须是唯一的。

不支持带引号的特殊字符名称或区分大小写的名称。同样的约束也适用于在其中创建服务的数据库和架构名称。也就是说,在创建服务时,不带引号的数据库和架构名称是有效的。

IN COMPUTE POOL compute_pool_name

指定要在其上运行服务的账户中的计算池名称。

FROM ...

识别服务的 规范模板 规范。

使用服务规范

在定义规范时,您可以采用以下方式:内联定义或在单独的文件中定义

SPECIFICATION_FILE = 'yaml_file_path' . @stage SPECIFICATION_FILE = 'yaml_file_path' . SPECIFICATION specification_text

指定包含服务规范的文件或者内联服务规范。如果您的服务规范处于文件中,请使用 SPECIFICATION_FILE。对于在 Snowflake Native App 中创建的服务,忽略 @stage,并指定相对于应用程序根目录的路径。对于在其他上下文中创建的服务,请指定 Snowflake 内部暂存区和服务规范文件的路径。

使用服务规范模板

在定义 模板规范 时,您可以采用以下方式:内联定义或在单独的文件中定义

SPECIFICATION_TEMPLATE_FILE = 'yaml_file_path' . @stage SPECIFICATION_TEMPLATE_FILE = 'yaml_file_path' . SPECIFICATION_TEMPLATE specification_text

指定包含服务规范模板的文件或者内联服务规范模板。如果您的服务规范模板处于文件中,请使用 SPECIFICATION_TEMPLATE_FILE。对于在 Snowflake Native App 中创建的服务,忽略 @stage,并指定相对于应用程序根目录的路径。对于在其他上下文中创建的服务,请指定 Snowflake 内部暂存区和服务规范文件的路径。在使用模板规范时,还应该包括 USING 参数。

USING ( key => value [ , key => value [ , ... ] ]  )

指定模板变量及这些变量的值。

  • key 是模板变量的名称。模板变量名称可以选择放在双引号 (") 内。

  • value 是模板中要分配给变量的值。字符串值必须放在 '$$ 内。值必须是字母数字或有效的 JSON。

使用英文逗号分隔各键值对。

可选参数

EXTERNAL_ACCESS_INTEGRATIONS = ( EAI_name [ , ... ] )

指定允许您的服务访问外部站点的 外部访问集成 的名称。此列表中的名称区分大小写。默认情况下,应用程序容器没有访问互联网的权限。如果要允许您的服务访问外部站点,请创建外部访问集成 (EAI),并将您的服务配置为使用该集成。有关更多信息,请参阅 配置网络出口

AUTO_RESUME = { TRUE | FALSE }

指定在调用服务函数或入口时是否自动恢复服务。

  • 如果 AUTO_RESUME 为 FALSE,您需要明确恢复服务(使用 ALTER SERVICE ... RESUME)。

  • 如果 AUTO_RESUME 为 TRUE,当调用服务函数或收到请求(入口)时,Snowflake 将恢复暂停的服务。

MIN_INSTANCES = num

指定要运行的最小服务实例数。

默认值:1。

MIN_READY_INSTANCES = num

指示 Snowflake 必须至少准备好多少个服务实例,才能认为服务已准备好处理请求。MIN_READY_INSTANCES 必须等于或小于 MIN_INSTANCES。有关更多信息,请参阅 扩展服务

备注

创建服务后,如果您想使用 SHOW SERVICES 或 DESCRIBE SERVICE 命令查找为该服务配置的 MIN_READY_INSTANCES,则必须在您的账户中启用 2024_08 行为变更捆绑包。要 在账户中启用此捆绑包,请执行以下语句:

SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_08');
Copy

默认:MIN_INSTANCES 属性的值。

MAX_INSTANCES = num

指定要运行的最大服务实例数。

默认:MIN_INSTANCES 属性的值。

QUERY_WAREHOUSE = warehouse_name

要在以下情况下使用的仓库:服务容器连接到 Snowflake 以执行查询,但未显式指定要使用的仓库。

默认值:None。

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

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

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

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

COMMENT = 'string_literal'

指定服务的注释。

默认:无值

访问控制要求

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

权限

对象

备注

CREATE SERVICE

架构

USAGE

计算池

READ

暂存区

这是存储规范的暂存区。

READ

镜像仓库

规范引用的镜像仓库。

BIND SERVICE ENDPOINT

账户

角色必须具有此权限才能创建具有公共端点的服务。这允许通过公共端点访问服务。如果服务的所有者角色失去此权限,则无法访问公共端点。

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

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

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

使用说明

  • 在调用 CREATE SERVICE 时,参数应按以下顺序提供:指定计算池,然后指定服务规范(暂存区中的提供商规范文件或内联规范),然后指定其他属性。

  • 关于元数据:

    注意

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

示例

创建一个运行两个服务实例的服务:

CREATE SERVICE echo_service
  IN COMPUTE POOL tutorial_compute_pool
  FROM @tutorial_stage
  SPECIFICATION_FILE='echo_spec.yaml'
  MIN_INSTANCES=2
  MAX_INSTANCES=2
Copy
语言: 中文