Python 워크시트에 Snowpark 코드 작성하기

Snowsight 에서 Snowpark Python을 사용하여 데이터를 처리하려면 Python 워크시트에 Snowpark 코드를 작성하십시오. Python 워크시트에 코드를 작성하면 종속 라이브러리를 설치할 필요 없이 Snowflake에서 개발과 테스트를 수행할 수 있습니다.

Python 워크시트로 개발하려면 다음을 수행하십시오.

  1. Snowflake에서 역할과 패키지를 준비합니다.

  2. 개발을 위한 워크시트를 설정합니다.

  3. Python 워크시트에 Snowpark 코드를 작성합니다.

  4. Python 워크시트를 실행합니다.

예를 들어 Snowflake의 스테이지 또는 데이터베이스 오브젝트에서 데이터를 추출하고 데이터를 변환하고 변환된 데이터를 Snowflake에 저장하는 코드를 Python 워크시트에 작성할 수 있습니다. 그런 다음 Snowflake를 종료하지 않고도 해당 코드를 저장 프로시저로 배포 하고 데이터 파이프라인을 만들 수 있습니다.

이 항목의 내용:

Python 워크시트 정보

Python 워크시트를 사용하면 Snowsight 에서 Snowpark Python을 사용하여 데이터 조작 및 변환을 수행할 수 있습니다. Snowflake Anaconda 채널에 나열된 서드 파티 패키지 를 사용하거나 스테이지에서 자체적인 Python 파일을 가져와 스크립트에서 사용할 수 있습니다.

Python 워크시트를 실행한 후 스크립트에서 반환된 결과와 출력을 검토합니다. 결과는 코드에 따라 문자열, 베리언트 또는 테이블로 표시됩니다. Python 워크시트 실행하기 섹션을 참조하십시오.

참고

Python 워크시트는 로컬 개발 환경이 아닌 Snowflake 내에서 실행되므로, session.add_import 를 사용하여 Python 코드가 의존하는 파일을 추가하거나 session.add_packages 또는 session.add_requirements 를 사용하여 Python 코드에서 사용해야 하는 패키지를 추가할 수 없습니다. 대신, 해당 파일을 스테이지에 추가하고 코드에서 참조합니다. Snowsight를 사용하여 파일 스테이징하기 섹션을 참조하십시오.

Python 워크시트에는 다음과 같은 제한 사항이 있습니다.

  • WARN보다 낮은 로그 수준은 기본적으로 Python 워크시트의 Output 에 나타나지 않습니다. 하위 수준 메시지를 출력에 기록하려면 logging 모듈과 같은 로깅 라이브러리를 사용하여 로깅되는 메시지 수준을 설정하십시오.

  • 중단점을 지원하지 않거나 워크시트에서 Python 코드의 일부만 실행합니다.

  • 이미지나 웹 페이지를 지원하지 않습니다. Python 코드로 생성된 이미지 또는 웹 페이지는 Python 워크시트에 표시할 수 없습니다.

  • Python 워크시트는 Python 3.8을 사용합니다.

이러한 옵션에 대한 지원이 필요한 경우 로컬 개발 환경을 대신 사용하는 것이 좋습니다. Snowpark Python을 위한 개발 환경 설정하기 섹션을 참조하십시오.

Python 워크시트의 전제 조건

Python 워크시트를 사용하려면 다음을 수행해야 합니다.

Anaconda 서비스 약관 검토 및 수락

Snowflake 내부에서 Anaconda가 제공하는 패키지를 처음 사용하기 전에 Snowflake 서드 파티 약관 에 동의해야 합니다.

참고

조직 관리자(ORGADMIN 역할 사용)가 약관을 수락할 수 있습니다. Snowflake 계정에 대해 약관을 한 번만 수락하면 됩니다. 계정에서 ORGADMIN 역할 활성화하기 섹션을 참조하십시오.

  1. Snowsight 에 로그인합니다.

  2. Admin » Billing & Terms 를 선택합니다.

  3. Anaconda 섹션에서 Enable 을 선택합니다.

  4. Anaconda Packages 대화 상자에서 링크를 클릭하여 Snowflake 서드 파티 약관 페이지 를 검토하십시오.

  5. 약관에 동의하면 Acknowledge & Continue 를 선택합니다.

서비스 약관을 수락하려고 할 때 오류가 나타날 경우 사용자 프로필에 이름, 성 또는 이메일 주소가 누락되었기 때문일 수 있습니다. 관리자 역할이 있는 경우 사용자 프로필에 사용자 세부 정보 추가하기 섹션을 참조하여 Snowsight 를 사용해 프로필을 업데이트하십시오. 그렇지 않으면 관리자에게 문의하여 계정을 업데이트하십시오.

스테이지의 Python 파일을 워크시트에 추가하기

Snowflake에는 Python 워크시트에 있는 Snowflake Anaconda 채널 의 Snowpark 패키지가 포함됩니다.

Python 워크시트에서 Anaconda에 포함된 것 이외의 Python 파일 또는 패키지를 사용하려면 파일을 Snowflake의 명명된 스테이지에 업로드한 다음 Python 워크시트의 설치된 패키지 목록에 추가해야 합니다.

워크시트에서 Python 패키지를 사용하려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. Worksheets 를 엽니다.

  3. + » Python Worksheet 를 선택합니다.

  4. 데이터베이스와 스키마를 선택합니다.

  5. Packages » Stage Packages 를 선택합니다.

  6. 스테이지에서 패키지의 경로를 입력합니다.

    • 워크시트에 대해 선택한 데이터베이스와 스키마에 패키지가 있는 스테이지가 포함된 경우 정규화되지 않은 이름을 사용하여 스테이지를 참조할 수 있습니다. 예: @YourStage/path/to/example_package.py.

    • 다른 데이터베이스와 스키마의 스테이지를 참조하려면 스테이지의 이름을 정규화하십시오. 예: @Database.Schema.Stage/path/to/other_package.py.

  7. 설치된 패키지의 목록에 패키지를 추가하려면 Import 를 선택하십시오.

  8. 코드에 import 문을 사용하여 Python 워크시트에서 패키지를 사용합니다. 예를 들어 example_package.pyother_package.py 파일에서 패키지를 가져온 후 다음 코드를 작성하여 example_package 에서 function 이라는 함수를 가져오고 코드에 사용할 패키지 other_package 를 가져옵니다.

    from example_package import function
    import other_package
    
    Copy

참고

워크시트에 추가하는 패키지는 해당 워크시트에만 사용할 수 있습니다. 다른 Python 워크시트에서 동일한 패키지를 사용하려면 이 절차에 따라 해당 워크시트에 패키지를 추가하십시오.

자세한 내용은 코드에 종속성을 사용할 수 있도록 만들기 섹션을 참조하십시오.

Python 워크시트로 개발 시작하기

워크시트를 열고 개발 환경을 구성하려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. Worksheets 를 엽니다.

  3. + » Python Worksheet 를 선택합니다.

  4. 데이터베이스와 스키마를 선택합니다.

  5. 워크시트 실행에 사용할 웨어하우스를 선택합니다. 사용자를 위한 기본 웨어하우스가 있으면 이 웨어하우스가 미리 선택됩니다.

    Python 워크시트에서 Python 패키지를 로드하고 Python 코드를 실행하려면 실행 중인 웨어하우스가 필요합니다.

  6. (선택 사항) Python 라이브러리를 추가하려면 Packages 를 설치하십시오.

    • snowflake-snowpark-python 패키지는 필수이며 항상 Python 워크시트용으로 설치됩니다.

    • numpy, pandas, requests, urllib3 등 Snowflake Anaconda 채널에 나열된 패키지를 검색합니다. 워크시트에 사용할 패키지를 선택하여 설치하고 선택적으로 Installed Packages 목록에서 기본 패키지 버전을 변경합니다.

    • Stage Packages 를 선택하고 스테이지와 패키지의 파일 경로를 지정한 다음 Import 를 선택하여 자체 패키지와 Python 파일을 추가합니다. 스테이지의 Python 파일을 워크시트에 추가하기 섹션을 참조하십시오.

    자신이 설치한 패키지는 Installed Packages 아래에 표시됩니다.

  7. 워크시트용 Python 라이브러리를 설치한 경우 설치한 라이브러리를 사용하려면 코드에 import 문을 추가하십시오.

    예를 들어 Python 워크시트용 scikit-learn 패키지를 설치하는 경우 코드 시작 부분에 그 패키지에 대한 import 문을 추가하십시오.

    import scikit-learn
    
    Copy
  8. 샘플 Python 코드를 실행하여 구성의 유효성을 검사합니다.

오류 메시지 또는 코드의 반환 값은 Results 섹션에 나타납니다. 로그 메시지를 보려면 Output 을 선택하십시오. Python 워크시트 실행하기 섹션을 참조하십시오.

Python 워크시트에 Snowpark 코드 작성하기

Python 워크시트로 개발을 시작 하는 단계를 완료한 후 샘플 코드를 자신의 코드로 바꿀 수 있습니다.

처리기 함수 내에서 Snowpark Python 코드를 작성합니다.

import snowflake.snowpark as snowpark

def main(session: snowpark.Session):
    # your code goes here
Copy

기본 처리기 함수는 main 이지만 워크시트의 Settings 에서 이를 변경할 수 있습니다. 활성 처리기는 워크시트에서 강조 표시됩니다.

상용구 코드에 제공된 session 오브젝트를 사용하여 Snowpark API 라이브러리로 Snowflake의 데이터에 액세스합니다. 예를 들어, 테이블에 대한 DataFrame 을 만들거나 SQL 문을 실행할 수 있습니다. Python용 Snowpark 개발자 가이드 섹션을 참조하십시오.

입력함에 따라 Python 메서드, 정의된 변수 등이 자동 완성으로 채워지는 것을 볼 수 있습니다. 스테이지에서 가져온 일부 서드 파티 패키지 또는 파일의 경우에는 자동 완성되지 않습니다. Python 워크시트에는 메서드 매개 변수에 대한 구문 강조와 지침도 포함되어 있습니다. 워크시트의 Settings 에서 린팅과 줄 바꿈을 구성할 수 있습니다.

다른 데이터 타입의 결과 반환하기

Python 코드를 작성할 때 코드의 return 문에서 반환되는 데이터 타입을 고려하고 워크시트가 결과를 반환하는 방식을 조정합니다. 기본적으로, 자리 표시자 코드가 DataFrame을 반환하므로 Python 워크시트의 반환 유형은 Table()입니다.

Python 코드가 반환하는 내용에 따라 워크시트 설정을 변경하여 출력을 다르게 표시할 수 있습니다.

  • 처리기 함수가 DataFrame 을 반환하는 경우 Table() 의 기본 반환 유형을 사용합니다.

  • 처리기 함수가 collect 메서드를 사용할 때처럼 Row 오브젝트의 목록을 반환하는 경우 반환 유형을 Variant 로 변경합니다.

  • 처리기 함수가 return "Hello Python" 과 같은 문자열을 반환하거나 문자열로 캐스팅하려는 값을 반환하는 경우 반환 유형을 String 으로 변경합니다.

  • 처리기 함수가 count 메서드를 사용할 때처럼 정수를 반환하는 경우 Variant 또는 String 반환 유형을 사용합니다.

몇 가지 DataFrame 메서드의 반환 유형에 대한 자세한 내용은 DataFrame 평가 동작 수행하기 섹션을 참조하십시오.

다른 유형의 결과를 반환하도록 워크시트 설정을 업데이트하려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. Worksheets 를 엽니다.

  3. 결과를 테이블로 표시하려는 Python 워크시트를 엽니다.

  4. 워크시트 실행에 사용할 웨어하우스를 선택합니다. 사용자를 위한 기본 웨어하우스가 있으면 이 웨어하우스가 미리 선택됩니다. 웨어하우스가 실행 중인지 확인하십시오.

  5. Settings 를 선택하고 Return type 에 대해 처리기 함수에서 반환되는 유형을 선택합니다.

  6. Python 워크시트를 실행합니다.

  7. Results 패널에서 결과를 검토합니다.

처리기 함수에 추가 인자 전달하기

Python 워크시트 사용 시 해당 함수를 워크시트의 처리기로 지정하여 단일 인자(Snowpark Session 오브젝트)를 사용하는 Python 함수를 테스트할 수 있습니다. Python 워크시트에 정의된 모든 함수는 session: snowpark.Session 인자를 전달해야 합니다.

추가 인자를 전달하는 함수를 테스트하려면 다음을 수행하십시오.

  1. 함수에 인자를 추가합니다.

  2. Snowpark Session 을 전달하는 별도의 단일 인자 함수를 정의합니다. 이 함수에서는 다중 인자 함수를 호출하여 추가 인자에 대한 값을 전달한 다음 함수 값을 반환합니다.

    예를 들어 패키지 언어 열을 기준으로 패키지 테이블을 필터링하는 Snowpark Python 코드를 작성하려면 다음 코드를 작성할 수 있습니다.

    import snowflake.snowpark as snowpark
    from snowflake.snowpark.functions import col
    
    # Add parameters with optional type hints to the main handler function
    def main(session: snowpark.Session, language: str):
      # Your code goes here, inside the "main" handler.
      table_name = 'information_schema.packages'
      dataFrame = session.table(table_name).filter(col("language") == language)
    
      # Print a sample of the dataFrame to standard output
      dataFrame.show()
    
      # The return value appears in the Results tab
      return dataFrame
    
    # Add a second function to supply a value for the language parameter to validate that your main handler function runs.
    def test_language(session: snowpark.Session):
      return main(session, 'java')
    
    Copy

    이 예에서 main 함수는 다중 인자 함수이고 test_language 함수는 코드가 전달된 인자 값으로 실행되는지 확인하는 데 사용되는 단일 인자 함수입니다.

  3. 단일 인자 함수를 처리기 함수로 설정하여 워크시트를 실행하고 코드가 인자 값으로 실행되는지 확인합니다.

    이 예에서는 처리기를 test_language 함수로 변경한 다음 Run 을 선택합니다. 워크시트 Settings 에서 처리기를 변경하거나 처리기 함수 옆에 있는 Show actions 전구 아이콘을 선택하고 Set function 《test_language》 as handler 를 선택할 수 있습니다.

Python 워크시트를 저장 프로시저로 배포 할 때 주 처리기 함수를 선택하고 저장 프로시저에 대한 인자와 매핑된 유형을 검토할 수 있습니다.

Python 워크시트 실행하기

Python 워크시트를 작성 한 후 Run 을 선택하여 Python 워크시트를 실행합니다. 워크시트를 실행하면 Python 워크시트의 모든 코드가 실행됩니다. 코드의 부분적 실행이나 증분 실행은 지원되지 않습니다.

참고

Snowflake Anaconda 채널에 나열된 패키지를 사용하는데 아직 Anaconda 약관에 동의하지 않은 경우 패키지 누락에 대한 오류가 표시될 수 있습니다. Anaconda의 서드 파티 패키지 사용하기 섹션을 참조하십시오.

코드에서 생성된 출력 검토하기

Python 워크시트의 Output 패널에서 Python 코드의 표준 출력(stdout) 또는 표준 오류(stderr) 메시지를 검토할 수 있습니다.

Output 패널에서 다음 함수 유형의 출력을 볼 수 있습니다.

  • print() 와 같이 콘솔에 쓰는 함수.

  • Snowpark Python에서 DataFrame 클래스의 show 메서드와 같이 DataFrame을 인쇄하는 함수.

참고

출력은 코드가 실행될 때 스트림에 나타나는 것이 아니라 모든 Python 프로세스의 실행이 완료된 후에 나타납니다.

로그 출력은 임시 스테이지에 작성되며 다음 조건이 충족되는 경우에만 캡처됩니다.

  • 워크시트에 대한 데이터베이스와 스키마를 선택합니다.

  • 선택한 데이터베이스가 공유에서 생성되지 않았습니다.

  • 선택한 데이터베이스와 스키마에 대한 USAGE 권한이 있는 역할을 사용하여 워크시트를 실행합니다.

Python 워크시트에 대한 쿼리 기록 검토하기

Python 워크시트가 Snowsight 에서 실행되면 익명 저장 프로시저가 코드를 실행하고 코드에서 Snowpark 명령을 실행하는 쿼리를 생성합니다.

Snowsight 의 Query History 페이지를 사용하여 실행된 쿼리를 검토할 수 있습니다. Snowsight를 사용하여 쿼리 기록 검토하기 섹션을 참조하십시오.

예를 들어 워크시트를 실행한 후 다음을 수행하여 실행된 쿼리를 검토할 수 있습니다.

  1. 워크시트의 Results 를 검토합니다.

  2. 워크시트의 Query Details 에서 More options » Copy Query ID 를 선택합니다.

  3. Worksheets 를 선택하여 워크시트 목록으로 돌아갑니다.

  4. Activity » Query History 를 선택합니다.

  5. Query History 페이지에서 Python 워크시트의 쿼리만 표시합니다.

    1. Filters 를 선택하고 Query ID 옵션을 활성화합니다.

    2. Python 워크시트의 쿼리 ID를 입력합니다.

    3. Apply Filters 를 선택합니다.

  6. 워크시트에 대해 실행된 쿼리를 검토합니다.

Python 워크시트의 예제 코드

Python 워크시트를 작성 할 때 명명된 스테이지에서 데이터 읽기를 포함하여 데이터 변환 및 조작 작업을 수행할 수 있습니다.

Snowpark Python에서 DataFrame으로 작업하기 에서 추가 예시를 검토할 수 있습니다.

예: 간단한 Snowpark 프로그램 작성하기

이 예에서는 Snowflake에서 작은 범위의 숫자를 생성하고 코드가 생성하는 테이블에 범위를 쓰거나 범위가 이미 존재하는 경우에는 덮어쓰는 Snowpark Python 프로그램을 작성합니다. 이 코드 예제를 실행하려면 테이블을 추가할 데이터베이스 스키마에 대한 CREATE TABLE 권한이 있어야 합니다.

  1. Snowsight 에 로그인합니다.

  2. Worksheets 를 엽니다.

  3. + » Python Worksheet 를 선택합니다.

  4. 테이블을 추가할 데이터베이스와 스키마를 선택합니다.

  5. 워크시트 실행에 사용할 웨어하우스를 선택합니다. 사용자를 위한 기본 웨어하우스가 있으면 이 웨어하우스가 미리 선택됩니다. 웨어하우스가 실행 중인지 확인하십시오.

  6. Snowpark Python 코드를 main 함수의 일부로 작성합니다.

    import snowflake.snowpark as snowpark
    
    def main(session: snowpark.Session):
      tableName = "range_table"
      df_range = session.range(1, 10, 2).to_df('a')
      df_range.write.mode("overwrite").save_as_table(tableName)
      return tableName + " table successfully created"
    
    Copy
  7. Settings 를 선택하고 Return type 에는 처리기 함수에서 반환되는 유형의 String 을 선택합니다.

  8. 코드를 실행합니다.

예: Python 워크시트에서 데이터 변환하기

이 예에서는 예약된 시간 및 상태별로 SNOWFLAKE 데이터베이스의 ACCOUNT_USAGE 스키마에 있는 TASK_HISTORY 뷰의 항목을 집계하고 집계된 출력을 테이블 aggregate_task_history 에 저장하는 Python 코드를 작성합니다.

참고

이 예에서는 Account Usage 데이터를 쿼리하므로 다음 권한을 가진 역할을 사용해야 합니다.

  1. Snowsight 에 로그인합니다.

  2. Worksheets 를 엽니다.

  3. + » Python Worksheet 를 선택합니다.

  4. 테이블을 추가할 데이터베이스와 스키마를 선택합니다.

  5. 워크시트 실행에 사용할 웨어하우스를 선택합니다. 사용자를 위한 기본 웨어하우스가 있으면 이 웨어하우스가 미리 선택됩니다. 웨어하우스가 실행 중인지 확인하십시오.

  6. Snowpark Python 코드를 main 함수의 일부로 작성합니다.

    import snowflake.snowpark as snowpark
    from snowflake.snowpark.functions import col
    from snowflake.snowpark.dataframe_reader import *
    from snowflake.snowpark.functions import *
    
    def main(session: snowpark.Session):
    
      inputTableName = "snowflake.account_usage.task_history"
      outputTableName = "aggregate_task_history"
    
      df = session.table(inputTableName)
      df.filter(col("STATE") != "SKIPPED")\
        .group_by(("SCHEDULED_TIME"), "STATE").count()\
        .write.mode("overwrite").save_as_table(outputTableName)
      return outputTableName + " table successfully written"
    
    Copy
  7. Settings 를 선택하고 Return type 에는 처리기 함수에서 반환되는 유형의 String 을 선택합니다.

  8. 코드를 실행합니다.

Python 워크시트에서 코드를 실행한 후 SQL 워크시트를 열고 테이블을 쿼리할 수 있습니다. 워크시트를 사용하여 데이터 쿼리하기 섹션을 참조하십시오.

예: Python 워크시트를 사용하여 스테이지에서 파일 읽기

Snowpark Python을 사용하면 스테이지에서 파일을 읽고 그 내용을 테이블에 쓰거나 Snowflake에 뷰로 저장할 수 있습니다. 이 예에서 Python 코드는 직원 데이터가 포함된 압축된 CSV 형식의 파일 data_0_0_0.csv.gz 의 내용을 db1.public.files 라는 스테이지에서 읽고 employees 이라는 테이블에 해당 내용을 씁니다.

참고

이 코드 예제를 실행하려면 다음 권한을 가진 역할을 사용해야 합니다.

  • 코드에 사용된 스테이지, 데이터베이스, 스키마에 대한 USAGE 권한.

  • 테이블을 추가하려는 데이터베이스 스키마에 대한 CREATE TABLE 권한.

  1. Snowsight 에 로그인합니다.

  2. Worksheets 를 엽니다.

  3. + » Python Worksheet 를 선택합니다.

  4. 테이블을 추가할 데이터베이스와 스키마를 선택합니다.

  5. 워크시트 실행에 사용할 웨어하우스를 선택합니다. 사용자를 위한 기본 웨어하우스가 있으면 이 웨어하우스가 미리 선택됩니다. 웨어하우스가 실행 중인지 확인하십시오.

  6. Snowpark Python 코드를 main 함수의 일부로 작성합니다.

    import snowflake.snowpark as snowpark
    from snowflake.snowpark.types import *
    
    schema_for_file = StructType([
      StructField("name", StringType()),
      StructField("role", StringType())
    ])
    
    fileLocation = "@DB1.PUBLIC.FILES/data_0_0_0.csv.gz"
    outputTableName = "employees"
    
    def main(session: snowpark.Session):
      df_reader = session.read.schema(schema_for_file)
      df = df_reader.csv(fileLocation)
      df.write.mode("overwrite").save_as_table(outputTableName)
    
      return outputTableName + " table successfully written from stage"
    
    Copy
  7. Settings 를 선택하고 Return type 에는 처리기 함수에서 반환되는 유형의 String 을 선택합니다.

  8. 코드를 실행합니다.

Python 워크시트에서 코드를 실행한 후 SQL 워크시트를 열고 테이블을 쿼리할 수 있습니다. 워크시트를 사용하여 데이터 쿼리하기 섹션을 참조하십시오.

Snowpark를 사용하여 스테이지에서 파일을 사용한 작업에 대한 자세한 내용은 Snowpark Python에서 DataFrame으로 작업하기 섹션을 참조하십시오.