GitHub에서 Snowflake로 사용자 지정 Python 패키지 배포

Nov 30 2022
업데이트: 2022년 11월 7일 기준. Python용 Snowpark는 GA이므로 설치가 PyPi를 통해 pip install snowflake-snowpark-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 와 관련된 기타 흥미로운 자료를 공유 합니다.