Snowflake DevOps

Snowflake DevOps 使开发人员能够简化和自动化其 Snowflake 环境的软件开发生命周期。通过关注 CI/CD、部署自动化和基础设施管理方面的最佳实践,Snowflake DevOps 工具和实践可确保开发与运营任务之间的顺利集成。

本指南将深入介绍如何利用 Snowflake 的功能,在您的 Snowflake 项目中加强协作、保持质量并实现高效的软件交付。

什么是 Snowflake DevOps?

Snowflake 提供了一种集成化方法,可加快开发生命周期并提高数据团队的整体效率。这种方法集成了 Git 版本控制、Python APIs、声明式对象管理和无缝的 CI/CD 自动化。

所有源的 Git 存储库

通过对数据资产、代码和配置进行集中管理和版本控制,您可以确保一致性、简化协作并在需要时简化回滚。

使用 Snowflake 的 Git 存储库可让您在 Snowflake 的安全边界内完成所有这些工作,这对实现生产就绪环境至关重要。

声明式语法

通过采用声明式方法进行数据库变更管理 – 使用 Python 或 SQL 定义和管理 Snowflake 对象 – 您就不再需要复杂的脚本,同时还能提高可读性。

CI/CD 自动化

您可以与现有的 CI/CD 工具或 Snowflake CLI 集成,自动执行命令并协调整个管道,以实现高效和可靠的部署。

Snowflake DevOps 的构建块是什么?

Snowflake 提供多种功能,这些功能集成在一起,使 DevOps 任务更简单、更安全。

CREATE OR ALTER <对象>

您可以使用 CREATE OR ALTER 命令将更新应用于您的 Snowflake 对象,并使您的账户与 Git 中的基础设施代码保持同步。

有关更多信息,请参阅 使用声明式代码和版本控制管理变更

EXECUTE IMMEDIATE FROM

使用 EXECUTE IMMEDIATE FROM Snowflake 命令,您可以从 Snowflake 中的 Git 存储库执行 SQL。SQL 脚本可以是一个 Jinja2 模板。

有关更多信息,请参阅 使用 Jinja 模板参数化脚本

Snowflake CLI

在脚本中驱动您的 CI/CD 管道时,您可以运行 Snowflake CLI 命令来自动执行部署、通过版本控制进行协作,并与其他 CI/CD 工具集成。

有关更多信息,请参阅 通过 GitHub 操作自动执行 CI/CD 作业

Python APIs

使用 Snowflake 的 Python APIs,您可以管理 Snowflake 资源,包括数据库、架构、表和任务。

有关更多信息,请参阅 Snowflake Python APIs:使用 Python 管理 Snowflake 对象

Snowflake 中的 Git

您可以从 Git 存储库提取项目配置和数据管道(架构、表、脚本)以触发部署工作流程。

有关更多信息,请参阅 通过将资产保存在与 Snowflake 连接的 Git 存储库中来简化工作流程。

在 DevOps 工作流程中使用 Snowflake 功能

将 Snowflake 与您现有的工具结合使用,您可以实现以下 DevOps 目标:

  • 通过将资产保存在与 Snowflake 连接的 Git 存储库中来 简化工作流程

    您可以通过将存储库连接到您的 Snowflake 账户来利用现有的 Git 投资。一旦建立了这种连接,并且在 Snowflake 本身中本地克隆了存储库,您就可以直接在 Snowflake 中浏览和执行其代码。

  • 通过为开发、测试和生产 维护独立的环境,将风险降至最低。

    通过为每个环境使用独立的 Snowflake 数据库,您可以最大限度地降低因不必要的更改而影响实时系统的风险。为了更轻松地管理部署,您可以使用脚本对部署流程进行参数化处理。

  • 通过使用脚本和声明式代码,以受控和可重复的方式 管理数据库更改,以便进行开发、测试和生产。

  • 通过使用 GitHub 操作,自动执行 CI/CD 作业,包括部署代码和数据。

备注

使用 Snowflake Extension for Visual Studio Code,您可以直接在 VS 代码中编写和执行 Snowflake SQL 语句。通过将 VS 代码与您已 连接到 Snowflake 的相同存储库连接,您可以在 VS 代码中本地开发代码,将您的工作保存在 Git 存储库中,然后从 Snowflake 内部访问您的代码。

通过将资产保存在与 Snowflake 连接的 Git 存储库中来简化工作流程。

通过在 Git 资源库中对数据资产、代码和配置进行集中管理和版本控制,并使用 Snowflake 中的存储库,您可以确保一致性,简化协作,并在需要时简化回滚。

您可以将您的 Snowflake 账户与您的 Git 存储库连接,以便 Snowflake 可以在从存储库克隆的文件中执行代码。得到的结果是一个 Git 存储库暂存区,代表您的存储库的完整克隆。在 Snowflake 中,您可以访问特定提交、分支或标签的版本控制文件。

通过存储库暂存区,您可以从版本控制文件创建 Snowpark 函数或过程,并通过 EXECUTE IMMEDIATE FROM 直接执行版本化 SQL 脚本,或使用 Snowflake CLI 执行 Python 脚本。通过这种方式,您可以使用 SQL 或 Python 声明性地定义数据库对象,然后使用强大且易于设置的 CI/CD 管道部署这些对象。

Git 存储库与开发工具和 Snowflake 交换文件的示意图。

为开发、测试和生产维护独立的环境

通过为开发、测试和生产维护独立的环境,您的团队可以将开发活动与生产环境隔离开来,从而降低意外后果和数据损坏的可能性。

当您将工作流程分离到多个环境中时,每个环境都会获得自己的 Snowflake 数据库 – 通常是一个完全相同的副本。

使用 Jinja 模板参数化脚本

为了支持在开发和生产环境之间以基本相同的方式部署和执行代码,您可以对环境特定的引用进行参数化处理 – 例如,在部署期间使用哪个数据库。那样,您可以启用一个 CI/CD 管道,以选择适合环境的部署目标。

要对脚本进行参数化处理,您可以使用 Jinja2,这是一种流行的模板语言,其功能从简单的脚本参数化到广泛的模块化脚本都有,语言类似于 Python。Snowflake 支持使用 EXECUTE IMMEDIATE FROM 执行模板化 SQL 脚本。或者,Snowflake CLI 允许您将环境变量传递给 Python 脚本。

例如,在更改部署目标时,您可以将目标数据库的名称替换为 SQL 脚本中的 {{ environment }} 等 Jinja 变量,或 Python 脚本中的环境变量。下面的 SQL 和 Python 代码示例演示了这一技术:

CREATE OR ALTER TASK {{ environment }}.my_schema.my_task
  WAREHOUSE = my_warehouse
  SCHEDULE = '60 minute'
  AS select pi();
Copy

您可以使用 Snowflake CLI 的 snow git execute 命令执行参数化脚本。CLI 可以在 Snowflake 账户的限制和性能功能范围内,直接从存储库暂存区执行 SQL、Python 或两者混合的脚本。

snow git execute @my_git_repo/branches/main/path/to/my_scripts" \
    -D "environment='preprod'"
Copy

使用 Snowflake CLI,您可以跨工作负载创建、管理、更新和查看在 Snowflake 上运行的应用程序。

使用声明式代码和版本控制管理变更

通过 Git 存储库中可重复使用的配置文件,您可以更轻松地管理对数据库资源的更改。

您可以使用 CREATE OR ALTER <对象> 命令定义数据库对象,该命令可以创建对象或更改对象,使其与命令指定的定义相匹配。通过在存储库中的版本化文件中使用此命令,您可以更轻松地将更改回滚到以前的版本:只需执行该文件的以前版本即可。

CREATE OR ALTER TABLE vacation_spots (
  city VARCHAR,
  airport VARCHAR,
  avg_temperature_air_f FLOAT,
  avg_relative_humidity_pct FLOAT,
  avg_cloud_cover_pct FLOAT,
  precipitation_probability_pct FLOAT
) data_retention_time_in_days = 1;
Copy

备注

您还可以使用 Snowflake Python APIsSnowflake CLI 来管理 Snowflake 资源。如果您更喜欢在 Python 中进行数据工程工作,Snowflake 的一流 Python API 可让您使用自己最擅长的语言进行相同的资源管理。

通过 GitHub 操作自动执行 CI/CD 作业

您可以使用 GitHub 操作 (https://docs.github.com/en/actions) 来自动执行构成 CI/CD 管道的作业。通过 GitHub 操作或类似的 CI/CD 运行器,您可以定义自动执行构建、测试和部署任务的工作流程。

在这些工作流程中,您可以使用 Snowflake 和 GitHub 的其他功能将各个部分组合在一起。您可以执行以下任务:

  • 将您的 Snowflake 凭据存储在一个 GitHub 密钥 (https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions) 中,以便 GitHub 操作可以连接到 Snowflake。

  • 借助原生 Snowflake CLI GitHub 操作 (https://github.com/Snowflake-Labs/snowflake-cli-action),轻松安装 Snowflake CLI 并连接到 Snowflake。

  • 使用 Snowflake CLI 在 Snowflake 中执行命令。首先,将您的 Git 存储库中的最新更改提取到 Snowflake。接下来,执行您的声明式和参数化脚本,将更改部署到您选择的环境中。

以下示例中的 GitHub 操作工作流程摘录将部署一个管道。该工作流程通过从以前配置的密钥中检索所需值,与 Snowflake 进行身份验证。

为了部署管道,该工作流程执行以下 snow git 命令:

  • snow git fetch 将 GitHub 存储库中的最新内容拉入 Snowflake 中的克隆 my_git_repo 存储库暂存区。

  • snow git execute 从存储库的 main 分支运行 /scripts 目录中的 Python 和 SQL 脚本。

name: Deploy scripts to preprod

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    env:
      SNOWFLAKE_CONNECTIONS_DEFAULT_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
      SNOWFLAKE_CONNECTIONS_DEFAULT_USER: ${{ secrets.SNOWFLAKE_USER }}
      SNOWFLAKE_CONNECTIONS_DEFAULT_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install snowflake-cli
        uses: Snowflake-Labs/snowflake-cli-action@v1.5
        with:
          cli-version: "latest"
          default-config-file-path: ".snowflake/config.toml"

      - name: Fetch repository changes
        run: snow git fetch my_git_repo

      - name: Deploy scripts to preprod environment
        run: snow git execute @my_git_repo/branches/main/scripts/* \
            -D "environment='preprod'"
Copy

开始使用 Snowflake DevOps

有关使用 Snowflake DevOps 的互动演示,请参阅 开始使用 Snowflake DevOps (https://quickstarts.snowflake.com/guide/getting_started_with_snowflake_devops/index.html#0) 快速入门。

语言: 中文