将 Git 与 Snowflake 结合使用的示例

本主题中的示例介绍在开发 Snowflake 应用程序时如何使用远程 Git 存储库中的文件,以及如何在 Git 存储库克隆中执行 SQL 脚本。

请务必查看以下内容,其中描述了与 Git 存储库克隆进行交互的其他方式。

将 Git 存储库文件用作存储过程处理程序

设置 Snowflake 和远程 Git 存储库之间的集成 后,您可以在存储过程和 UDFs 中将存储库中的文件用作处理程序代码。请注意,与暂存区处理程序类似,您必须使用其包含类或模块的名称限定函数名。

此示例描述如何在存储过程中使用存储库中的 Python 处理程序代码。

此示例所需的代码

此示例中的处理程序依赖于使用类似于以下内容的 SQL 代码创建的数据库:

CREATE DATABASE example_db;
USE DATABASE example_db;
CREATE SCHEMA example_schema;
USE SCHEMA example_schema;

CREATE OR REPLACE TABLE employees(id NUMBER, name VARCHAR, role VARCHAR);
INSERT INTO employees (id, name, role) VALUES (1, 'Alice', 'op'), (2, 'Bob', 'dev'), (3, 'Cindy', 'dev');
Copy

该示例使用包含在 filter.py 中的以下 Python 处理程序代码:

from snowflake.snowpark.functions import col

def filter_by_role(session, table_name, role):
  df = session.table(table_name)
  return df.filter(col("role") == role)
Copy

提交文件并刷新 Git 存储库克隆

  1. 在 Git 客户端中,将代码添加到远程存储库。

    以下示例中的代码使用 Git 命令行工具将处理程序文件添加并提交到本地存储库,然后将其推送到 Snowflake 中的 Git 存储库克隆引用的远程存储库:

    $ git add python-handlers/filter.py
    $ git commit -m "Adding code to filter by role"
    $ git push
    
    Copy
  2. 在 Snowflake 中,刷新 Git 存储库克隆。

    假设您已 在 Snowflake 和远程 Git 存储库之间设置集成,从而在 Snowflake 中克隆了 Git 存储库,那么您可以通过从远程存储库中提取内容来刷新 Git 存储库克隆。

    使用 Snowflake 从远程存储库刷新类似于使用其他 Git 客户端工具,在开始工作之前从远程存储库中提取更新,以确保您拥有最新的更改。

    以下示例中的代码执行 ALTER GIT REPOSITORY 命令,以从远程存储库中检索最新更改。该代码会生成一个完整的克隆,其中包括分支、标签和提交。

    ALTER GIT REPOSITORY snowflake_extensions FETCH;
    
    Copy

创建并执行使用 Git 存储库克隆中的文件的过程

  1. 在 Snowflake 中编写过程。

    编写过程时,可以在 Snowflake 的 Git 存储库克隆中的代码文件位置引用其处理程序代码。例如,若要引用远程存储库主分支中的 python-handlers/filter.py 文件(该存储库同步到名为 snowflake_extensions 的 Git 存储库克隆中),可使用以下语法内容:

    @snowflake_extensions/branches/main/python-handlers/filter.py
    
    Copy

    以下示例中的代码会创建一个名为 filter_by_role 的过程,指定存储在 Git 存储库克隆的处理程序代码:

    CREATE OR REPLACE PROCEDURE filter_by_role(tableName VARCHAR, role VARCHAR)
      RETURNS TABLE(id NUMBER, name VARCHAR, role VARCHAR)
      LANGUAGE PYTHON
      RUNTIME_VERSION = '3.9'
      PACKAGES = ('snowflake-snowpark-python')
      IMPORTS = ('@example_db.example_schema.snowflake_extensions/branches/main/python-handlers/filter.py')
      HANDLER = 'filter.filter_by_role';
    
    Copy
  2. 执行该过程。

    以下代码会执行该过程。

    CALL filter_by_role('employees', 'dev');
    
    Copy

    以下是该过程的输出示例。

    ---------------------
    | ID | NAME  | ROLE |
    ---------------------
    | 2  | Bob   | dev  |
    ---------------------
    | 3  | Cindy | dev  |
    ---------------------
    

使用 Git 存储库克隆文件配置新账户

本示例说明如何在 Snowflake 中执行一个包含在 Git 存储库克隆中的 SQL 脚本。示例中的脚本会创建用户和角色。

此示例使用 EXECUTE IMMEDIATE FROM 命令执行包含在 Git 存储库克隆文件中的 SQL 语句。

借助 EXECUTE IMMEDIATE FROM,您可以执行(从任何 Snowflake 会话)您在远程 Git 存储库中管理的脚本。例如,您可能有一个脚本,用于设置组织中的每个新 Snowflake 账户。该脚本可能包含用于创建用户、角色、对象以及授予对账户和对象的权限的语句。

  1. 创建包含以下内容的文件 setup.sql

    CREATE ROLE analyst;
    
    CREATE USER gladys;
    
    GRANT ROLE analyst TO USER gladys;
    
    SHOW GRANTS TO USER gladys;
    
    Copy
  2. 将 SQL 文件提交到远程 Git 存储库中。

    使用 Git 命令行工具将文件提交到远程 Git 存储库:

    git add scripts/setup.sql
    git commit -m "Adding code to set up new accounts"
    git push
    
    Copy

    有关详细说明,请参阅 提交文件并刷新 Git 存储库克隆

  3. 刷新 Git 存储库克隆。

    刷新 Git 存储库克隆 configuration_repo

    ALTER GIT REPOSITORY configuration_repo FETCH;
    
    Copy

    有关详细说明,请参阅 提交文件并刷新 Git 存储库克隆

  4. 在 Snowflake 中,执行 Git 存储库克隆中的文件:

    备注

    执行以下语句的用户必须使用具有执行文件中所有语句所需权限的角色。有关更多信息,请参阅 访问控制要求

    EXECUTE IMMEDIATE FROM @configuration_repo/branches/main/scripts/setup.sql;
    
    Copy

    EXECUTE IMMEDIATE FROM 命令 返回 文件中最后一条 SQL 语句的结果:

    +-------------------------------+---------+------------+--------------+--------------+
    | created_on                    | role    | granted_to | grantee_name | granted_by   |
    |-------------------------------+---------+------------+--------------+--------------|
    | 2023-07-24 22:07:04.354 -0700 | ANALYST | USER       | GLADYS       | ACCOUNTADMIN |
    +-------------------------------+---------+------------+--------------+--------------+
    
语言: 中文