snow app bundle

准备一个本地文件夹,其中包含已配置的应用程序工件。

语法

snow app bundle
  --package-entity-id <package_entity_id>
  --app-entity-id <app_entity_id>
  --project <project_definition>
  --env <env_overrides>
  --format <format>
  --verbose
  --debug
  --silent
Copy

实参

选项

--package-entity-id TEXT

当 definition_version 为 2 或更高时,要操作的包实体的 ID。

--app-entity-id TEXT

当 definition_version 为 2 或更高时,要操作的应用程序实体的 ID。

-p, --project TEXT

Snowflake 项目所在的路径。默认为当前工作目录。

--env TEXT

key=value 格式的字符串。覆盖用于模板的 env 部分的变量。默认值:[]。

--format [TABLE|JSON]

指定输出格式。默认:TABLE。

--verbose, -v

显示日志级别 info 及更高级别的日志条目。默认值:False。

--debug

显示日志级别 debug 及更高级别的日志条目;调试日志包含其他信息。默认值:False。

--silent

关闭到控制台的中间输出。默认值:False。

--help

显示此命令的帮助文本。

使用说明

snow app bundle 命令会创建一个临时本地目录,其中包含所有 Snowflake Native App 工件。它还可以使用 Snowpark Python 代码自动生成 SQL 脚本。此命令可由 snow app deploySnow 应用程序运行snow app version create 命令自动调用。但是,如果您想查看安装脚本、工件和生成的 SQL,在将它们上传到暂存区之前,您可以手动运行此命令。有关生成 SQL 代码的更多信息,请参阅 为本地文件夹准备已配置的 Snowflake Native App 工件

  • 该命令使用 项目定义文件 确定要在项目目录中创建的临时文件夹的名称。

    • 默认情况下,它将是 <project_directory>/output/deploy。此目录也称为部署根目录,文件在后续命令中上传到暂存区后,此目录将反映暂存区的结构。

    • 如果您希望使用 Snowflake CLI 创建具有自定义名称,而非使用 output/deploy 的文件夹,您可以通过提供位于 项目定义文件 中的 应用程序包 实体的 deploy_root 字段执行上述操作。

      备注

      您必须为部署根目录提供相对路径;绝对路径会被拒绝。部署根路径是在项目目录内部创建的。

    • 部署根目录是一个临时目录,因为每次 run snow app bundle 或其他命令调用 bundle 功能时,它都会被删除并重新创建。

  • 由于 snow app bundle 会作为 snow app deploySnow 应用程序运行snow app version create 命令的一部分被自动调用,因此只能在部署根目录之外更改源文件。如果修改了部署根目录下的文件,下次调用这些命令时,这些文件将被源文件的最新状态覆盖。

  • 如果使用版本控制系统(例如 git),您可以选择不跟踪部署根目录,因为它可能会频繁更改。

  • snow app bundle 不会为您构建或编译工件,例如从 Java 文件创建 jar 文件。它仅会复制项目定义文件中指定的工件,并将它们添加到部署根目录以模拟暂存区的目录结构。

  • snow app bundle 不需要访问您的 Snowflake 账户;它只会影响您的本地文件系统。

  • 对于 项目定义文件应用程序包 实体的任何 artifacts,该命令具有以下复制和符号链接行为:

    • 源路径中的所有目录名称也会在部署根目录中创建。

    • 源路径中的所有文件都会在部署根目录中进行符号链接。

    • 如果您从这些文件中调用 SQL 生成,部署根目录中的某些符号链接文件会变成硬链接。有关更多信息,请参阅 为本地文件夹准备已配置的 Snowflake Native App 工件

    请考虑以下项目定义文件中的 artifacts 列表示例:

    entities:
      pkg:
        type: application package
        ...
        artifacts:
          - src: dir1/dir2/*
            dest: dest_dir1/dest_dir2/
          - src: dir8/dir9/file.txt
            dest: dest_dir8/dest_file.txt
      ...
    
    Copy

    在项目根目录中,dir1/dir2 可能还有其他子目录,例如 dir3dir4,以及一些文件,例如 file3.txtfile4.txt

    运行 snow app bundle 命令后,您的部署根目录应如下所示:

    -- deploy_root
          -- dest_dir1
                -- dest_dir2
                      -- dir3
                          -- ... <entire directory tree of dir3>
                      -- dir4
                          -- ... <entire directory tree of dir4>
                      -- file3.txt
                      -- file4.txt
          -- dest_dir8
                -- dest_file.txt
    
    Copy

Snowpark 注释处理

从 Snowflake CLI 版本 2.5.0 和 Snowpark Python API 版本 1.15.0 开始,您可以通过 snow app bundle 命令利用 Snowpark 注释处理功能。此功能允许您使用 Snowpark Python 装饰器注释 Python 代码文件,例如 @udf@sproc@udaf@udtf,以便 Snowflake CLI 自动包含相应的 CREATE FUNCTION 或 CREATE PROCEDURE SQL 语句。为了更好地理解这些装饰器,请参考相应的 Python 装饰器文档。

Snowpark 注释处理涉及以下内容:

  • 它会读取您在项目定义文件中使用 processor 字段标记的所有 Python 文件。

  • 它会使用处理器的 properties 子字段中提供的环境信息,创建一个单独的临时 Python 沙盒环境。

  • 它会在沙盒环境中执行这些 Python 文件。

  • 它会从这些文件收集所有装饰的函数。

  • 借助收集到的信息,Snowflake CLI 会生成必要的 SQL 语句,并将它们添加到安装脚本中,该脚本的位置在 manifest.yaml 文件中指定。

在为 Snowflake Native App 应用程序编写 Snowpark 扩展函数时,您不再需要重复样板 SQL 代码。

有关在项目定义文件中启用此功能的更多信息,请参阅 使用 Snowpark Python 装饰器

有关所有受支持工件处理器的更多信息,请参阅 有关工件处理器的更多信息

示例

此示例假定您已对代码文件进行了必要的更改,并将其添加到 snowflake.ymlsnowflake.local.yml 文件中,并且还构建或编译了任何相关的工件。

cd my_app_project
snow app bundle
Copy

该命令显示了有关命令运行时发生的各种步骤的信息,并在项目定义文件中指定的位置创建新目录(默认值:my_app_project/output/deploy)。

要查看简单用例的实际操作,您可以使用以下命令利用现成的模板:

snow init my_app_bundle_project --template app_basic
cd "my_app_bundle_project"
snow app bundle
ls my_app_bundle_project/output/deploy
Copy
语言: 中文