GitHub에서 Snowflake로 사용자 지정 Python 패키지 배포
업데이트: 2022년 11월 7일 기준. Python용 Snowpark는 GA이므로 PyPipip install snowflake-snowpark-python 를 통해 설치하는 것만큼 쉽습니다 .
개요
Snowpark는 개발자가 Python, Java, Scala 및 JavaScript와 같은 언어로 코드를 작성하여 Snowflake 플랫폼의 기능을 확장할 수 있는 방법을 제공합니다. 이 블로그에서는 GitHub Actions를 사용하여 Snowflake에 사용자 지정 순수 Python 패키지를 GitHub 리포지토리에서 배포하는 방법을 검토합니다.
더 중요한 것은 이러한 패키지를 사용하여 Snowpark Python에서 사용자 정의 함수(UDF) 를 생성할 때 이 접근 방식을 사용하면 수동 개입 없이 자동으로 한 번에 여러 UDF에 걸쳐 사용자 지정 코드를 쉽게 유지 관리하고 배포할 수 있습니다. 이 설정에서 강조하는 또 다른 이점은 패키지를 Snowflake에 업로드하고 업데이트된 사용자 지정 패키지를 사용하는 UDF의 이름을 표시하는 스크립트에서 사용자 지정 패키지를 분리하는 것입니다.
사용자 정의 함수
전체 흐름이 어떻게 결합되는지 보여주기 위해 Snowpark Python의 이 간단한 UDF를 살펴보겠습니다. (이 스크립트는 Snowsight 에서 실행됩니다 .)
스크립트 노트
- Python 패키지 do_something_cool.py 가 종속성으로 추가되었습니다 — 6행 . imports 문에는 전체 경로가 포함되어 있습니다 . 스테이지명과 파일명
- 그런 다음 해당 패키지를 가져오고( 9행 ) greetings() 메서드 를 호출하여( 11행 ) 이 UDF에 전달된 매개변수를 전달합니다.
SELECT greet_me('Dash');
Hello, Dash! How are you doing today? It's great to see you today!
설정: GitHub 리포지토리 1
귀하와 귀하의 팀 구성원이 기여하고 공동 작업하는 이 Python 패키지를 유지 관리하는 GitHub 리포지토리가 있다고 가정해 보겠습니다.
" 멋진 일 을 해 보세요"
이 리포지토리는 GitHub Actions 를 설정한 곳이기도 합니다 .
GitHub Actions 워크플로 파일(아래의 워크플로 세부 정보 )은 다음과 같습니다.
워크플로 세부 정보
- 트리거링 이벤트: 코드가 업데이트될 때 메인 브랜치 로 푸시 할 때
- 워크플로우 단계:
— 2. 업데이트된 패키지 코드를 배포하는 데 필요한 종속성 요청 및 snowflake-connector-python 설치
— 3. 업데이트된 사용자 지정 코드를 Snowflake에 업로드할 스크립트 다운로드( Repo 2에서 — 아래 참조 )
— 4. GitHub Secrets 에 저장된 환경 변수( 데이터베이스, 웨어하우스, 스키마, 사용자, 암호 및 역할 )를 설정합니다. 이러한 변수는 스크립트의 Snowflake Python 커넥터 ( 3단계에서 다운로드 )에서 Snowflake에 연결하는 데 사용됩니다.
— 5. 스크립트( 3단계에서 다운로드 )를 실행하여 업데이트된 코드를 배포합니다.
[GitHub의 코드 : 샘플 사용자 정의 패키지 | GitHub Actions 워크플로 파일 ]
설정: GitHub 리포지토리 2
이 리포지토리에는 Repo 1의 기본 분기에 있는 패키지가 업데이트될 때 Repo 1 의 GitHub Actions 워크플로 설정에서 다운로드 및 실행되는 Python 스크립트 (아래 세부 정보 참조) 가 포함되어 있습니다 .
스크립트는 다음과 같습니다.
스크립트 단계
— 1. Snowflake Python 커넥터를 사용하여 Snowflake에 연결하고 GitHub Secrets 를 사용하여 환경 변수를 설정합니다.
— 2. 업데이트할 패키지 목록 (아래 JSON 형식 참조) 을 다운로드합니다.
— 3. 각 패키지에 대해 Repo 1 의 메인 브랜치에서 최신 버전을 다운로드 하고 Snowflake 스테이지에 업로드합니다.
— 4. 모든 UDF를 반복하고 가져오기를 검사하고 업데이트된 패키지를 사용하는 UDF의 이름을 출력합니다.
패키지 목록
이 리포지토리에는 update_packages.py 스크립트가 실행될 때 업데이트될 패키지 목록( 위의 2단계 참조 ) 이 있는 JSON 파일도 포함되어 있습니다.
파일 형식은 다음과 같습니다.
참고 : JSON 파일의 단계는 파일이 업로드되는 Snowflake의 단계 를 의미 합니다.
테스트
테스트하려면 Repo 1 에서 do_something_cool.py 를 업데이트하고 ( 예: 인사말 메시지를 "Welcome, how is your day going?" 로 변경) 변경 사항을 기본 브랜치 로 푸시합니다 . 이 시점에서 빌드 킥오프가 표시되고 성공하면(즉, 코드/ 구문이 정확하고, 참조된 모든 파일과 경로가 존재하고, Snowflake에 연결하기 위한 연결 매개변수가 유효한 등 ) 빌드 출력이 표시되어야 합니다 . 이것과 유사하다:
그런 다음 이 SQL을 다시 실행합니다...
SELECT greet_me('DASH');
Hello, Dash! Welcome, how is your day going?
그게 다야!
시간을 내주셔서 감사합니다. Twitter 와 LinkedIn 에서 저를 팔로우해 주세요. 데모 동영상, 코드 스니펫, Snowpark 와 관련된 기타 흥미로운 자료를 공유 합니다.

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































