Snowflake와 함께 Git을 사용하는 예¶
이 항목의 예제에서는 Snowflake 애플리케이션을 개발할 때 통합된 Git 리포지토리를 사용하는 방법과 리포지토리에서 SQL 스크립트를 실행하는 방법을 설명합니다.
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');
이 예제에서는 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)
파일을 커밋하고 리포지토리 스테이지 새로 고침¶
Git 클라이언트에서 리포지토리에 코드를 추가합니다.
다음 예제의 코드는 git 명령줄 도구를 사용하여 로컬 리포지토리에 핸들러 파일을 추가하고 커밋한 다음, Snowflake의 리포지토리 스테이지에서 참조하는 원격 리포지토리에 푸시합니다.
$ git add python-handlers/filter.py $ git commit -m "Adding code to filter by role" $ git push
Snowflake에서 리포지토리 스테이지를 새로 고칩니다.
Snowflake와 Git 리포지토리 간의 통합을 설정 하여 리포지토리 스테이지를 만들었다고 가정하면 리포지토리에서 가져와서 스테이지를 새로 고칠 수 있습니다.
Snowflake를 사용하여 리포지토리에서 새로 고침 작업을 수행하는 것은 작업을 시작하기 전에 리포지토리에서 가져와 최신 변경 사항을 확인하는 다른 Git 클라이언트 도구로 작업하는 것과 유사합니다.
다음 예제의 코드는 ALTER GIT REPOSITORY 명령을 실행하여 리포지토리에서 최신 변경 사항을 검색합니다. 이 코드는 분기, 태그, 커밋이 포함된 전체 복제본을 생성합니다.
ALTER GIT REPOSITORY snowflake_extensions FETCH;
리포지토리에 있는 파일을 사용하는 프로시저 생성 및 실행¶
Snowflake에서 프로시저를 작성합니다.
프로시저를 작성할 때 리포지토리 스테이지의 코드 파일 위치에서 해당 핸들러 코드를 참조할 수 있습니다. 예를 들어, 리포지토리의 기본 분기에 있는
python-handlers/filter.py
파일이 이름이snowflake_extensions
인 Git 리포지토리 스테이지에 동기화된 것을 참조하려면 다음과 유사한 구문을 사용해야 합니다.@snowflake_extensions/branches/main/python-handlers/filter.py
다음 예제의 코드는 리포지토리 스테이지에 저장된 핸들러 코드를 지정하는 이름이
filter_by_role
인 프로시저를 생성합니다.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';
프로시저를 실행합니다.
다음 코드는 프로시저를 실행합니다.
CALL filter_by_role('employees', 'dev');
다음은 프로시저의 출력 예제입니다.
--------------------- | ID | NAME | ROLE | --------------------- | 2 | Bob | dev | --------------------- | 3 | Cindy | dev | ---------------------
Git 리포지토리 파일을 사용하여 새 계정 구성¶
이 예제에서는 리포지토리 스테이지에 포함된 SQL 스크립트를 실행하는 방법을 설명합니다. 예제의 스크립트는 사용자와 역할을 생성합니다.
이 예제에서는 EXECUTE IMMEDIATE FROM 명령을 사용하여 리포지토리 스테이지의 파일에 포함된 SQL 문을 실행합니다.
EXECUTE IMMEDIATE FROM을 사용하면 Git 리포지토리에서 관리하는 스크립트를 (모든 Snowflake 세션에서) 실행할 수 있습니다. 예를 들어, 조직의 모든 새로운 Snowflake 계정을 설정하는 스크립트가 있을 수 있습니다. 스크립트에는 사용자, 역할, 오브젝트를 생성하고 계정 및 오브젝트에 권한을 부여하는 명령이 포함될 수 있습니다.
다음 내용으로
setup.sql
파일을 생성합니다.CREATE ROLE analyst; CREATE USER gladys; GRANT ROLE analyst TO USER gladys; SHOW GRANTS TO USER gladys;
Git 리포지토리에 SQL 파일을 커밋합니다. 자세한 지침은 파일을 커밋하고 리포지토리 스테이지 새로 고침 섹션을 참조하십시오.
git 명령줄 도구를 사용하여 파일을 Git 리포지토리에 커밋합니다.
git add scripts/setup.sql git commit -m "Adding code to set up new accounts" git push
Snowflake에서 리포지토리 스테이지를 새로 고칩니다. 자세한 지침은 파일을 커밋하고 리포지토리 스테이지 새로 고침 섹션을 참조하십시오.
리포지토리 스테이지
configuration_repo
를 새로 고칩니다.ALTER GIT REPOSITORY configuration_repo FETCH;
Snowflake에서 리포지토리 스테이지에서 파일을 실행합니다.
참고
다음 문을 실행하는 사용자는 파일에 있는 모든 문을 실행하는 데 필요한 권한이 있는 역할을 사용해야 합니다. 자세한 내용은 액세스 제어 요구 사항 섹션을 참조하십시오.
EXECUTE IMMEDIATE FROM @configuration_repo/branches/main/scripts/setup.sql;
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 | +-------------------------------+---------+------------+--------------+--------------+