Snowpark Python을 사용하여 샘플 데이터 로드 및 쿼리하기

소개

이 자습서에서는 Tasty Bytes라는 가상의 푸드 트럭 브랜드를 사용하여 Snowpark Python 을 사용하여 Snowflake에서 데이터를 로드하고 쿼리하는 방법을 보여줍니다. Snowsight 의 미리 로드된 Python 워크시트를 사용하여 이러한 작업을 완료합니다.

다음 그림에서는 Tasty Bytes의 개요를 보여줍니다.

여러 국가와 도시에 현지화된 푸드 트럭 옵션을 제공하는 15개 브랜드를 갖춘 글로벌 푸드 트럭 네트워크인 Tasty Bytes에 대한 개요가 포함되어 있습니다. 회사의 사명, 비전, 위치, 현재 상태, 미래 목표를 설명하는 이미지입니다.

참고

Snowflake는 이 자습서의 샘플 데이터에 사용되는 디스크상의 저장소에 대해 최소 금액을 청구합니다. 이 자습서에서는 데이터베이스를 삭제하고 저장소 비용을 최소화하는 절차를 제공합니다.

Snowflake에서는 데이터를 로드하고 쿼리를 실행하기 위해 가상 웨어하우스 가 필요합니다. 실행 중인 가상 웨어하우스는 Snowflake 크레딧을 사용합니다. 이 자습서에서는 무료 크레딧을 제공하는 30일 평가판 계정 을 사용하므로 비용이 발생하지 않습니다.

알아볼 내용

이 자습서에서는 Snowpark Python API: 를 사용하여 다음 작업을 완료하는 방법을 배웁니다.

  • 데이터베이스와 스키마를 만듭니다.

  • Amazon S3 버킷에 데이터를 보관하는 스테이지를 만듭니다.

  • DataFrame을 생성하여 데이터 원본인 스테이지를 지정합니다.

  • 스테이지에 있는 파일의 데이터가 포함된 테이블을 만듭니다.

  • 새 테이블을 쿼리하고 데이터를 필터링하는 DataFrame을 설정합니다.

전제 조건

이 자습서에서는 다음과 같이 가정합니다.

참고

이 자습서는 평가판 계정이 있는 사용자에게만 제공됩니다. 다른 유형의 계정에는 샘플 워크시트를 사용할 수 없습니다.

1단계. Snowsight 를 사용하여 로그인

공용 인터넷을 통해 Snowsight 에 액세스하려면 다음을 수행하십시오.

  1. 지원되는 웹 브라우저에서 https://app.snowflake.com으로 이동합니다.

  2. 계정 식별자 또는 계정 URL을 입력합니다. 이전에 Snowsight 에 로그인한 경우 선택할 수 있는 계정 이름이 표시될 수 있습니다.

  3. Snowflake 계정 자격 증명을 사용하여 로그인합니다.

2단계. Python 워크시트 열기

Python 워크시트를 사용하여 Python 코드를 작성하고 실행할 수 있습니다. 평가판 계정으로 이 자습서의 미리 로드된 Python 워크시트에 액세스할 수 있습니다. 워크시트에는 데이터베이스를 생성하고 데이터를 데이터베이스에 로드하고 데이터를 쿼리하기 위해 실행할 Python 코드가 있습니다. Python 워크시트에 대한 자세한 내용은 Python 워크시트에 Snowpark 코드 작성하기 섹션을 참조하십시오.

미리 로드된 자습서 Python 워크시트를 열려면 다음을 수행하십시오.

  1. Projects » Worksheets 를 선택하여 워크시트 목록을 엽니다.

  2. [Tutorial] Using Python to load and query sample data 를 엽니다.

    워크시트는 다음 이미지와 유사합니다.

설명 주석과 함께 이 자습서의 코드가 포함된 Python 로드 및 쿼리 워크시트.

미리 로드된 이 Python 워크시트는 자동으로 ACCOUNTADMIN 시스템 역할을 사용하므로 계정의 오브젝트를 확인하고 관리할 수 있습니다. 자세한 내용은 ACCOUNTADMIN 역할 사용하기 섹션을 참조하십시오.

워크시트는 또한 COMPUTE_WH 가상 웨어하우스를 사용합니다. 웨어하우스는 오브젝트를 생성 및 관리하고 SQL 명령을 실행하는 데 필요한 리소스를 제공합니다. 이러한 리소스에는 CPU, 메모리, 임시 저장소가 포함됩니다. 자세한 내용은 가상 웨어하우스 섹션을 참조하십시오.

3단계. Python 워크시트 사용 방법 알아보기

Python 워크시트를 사용하면 Snowsight 에서 Snowpark Python 을 사용하여 SQL 문을 실행할 수 있습니다. 자습서의 이 단계에서는 Python 워크시트에서 각 단계의 코드를 설명합니다. Python 워크시트를 사용하면 개별 코드 블록을 따로 실행할 수 없습니다. 전체 워크시트를 실행해야 합니다. 워크시트에서 Run 을 선택하기 전에 Python 코드를 더 잘 이해할 수 있도록 다음 단계를 검토하십시오.

  1. 열린 Python 워크시트에서 이 단계에는 다음 코드가 포함됩니다.

    import snowflake.snowpark as snowpark
    from snowflake.snowpark.functions import col
    from snowflake.snowpark.types import StructField, StructType, IntegerType, StringType, VariantType
    
    Copy

    이 자습서에서는 코드에 사용할 수 있도록 snowpark 패키지와 선택한 클래스 및 함수를 가져옵니다.

  2. 워크시트의 이 단계에는 다음 코드가 포함됩니다.

    def main(session: snowpark.Session):
    
    Copy

    이 줄에서는 기본 main 처리기 함수를 정의합니다. 처리기 함수에는 이 자습서에서 실행할 코드가 포함됩니다. 이 줄은 Snowflake에서 SQL 문을 실행하는 데 사용할 수 있는 Session 오브젝트를 전달하는 역할을 합니다.

    # Use SQL to create our Tasty Bytes Database
    session.sql('CREATE OR REPLACE DATABASE tasty_bytes_sample_data;').collect()
    
    Copy

    이 줄은 tasty_bytes_sample_data 라는 데이터베이스를 생성하는 역할을 합니다. 이 데이터베이스는 사용자가 관리하고 쿼리할 수 있는 테이블에 데이터를 저장합니다. 자세한 내용은 데이터베이스, 테이블, 뷰 - 개요 섹션을 참조하십시오.

    이 코드에서는 sql 메서드를 사용하여 SQL 문의 결과를 나타내는 DataFrame 을 생성합니다. Snowpark에서는 DataFrame을 사용하여 데이터를 쿼리하고 처리할 수 있습니다. 또한 이 코드는 collect 메서드를 사용하여 DataFrame으로 표시되는 SQL 문을 실행합니다. 워크시트의 이 단계에 있는 다른 코드 줄에서도 이러한 메서드를 사용합니다.

    # Use SQL to create our Raw POS (Point-of-Sale) Schema
    session.sql('CREATE OR REPLACE SCHEMA tasty_bytes_sample_data.raw_pos;').collect()
    
    Copy

    이 줄은 tasty_bytes_sample_data 데이터베이스에 raw_pos 라는 스키마를 생성하는 역할을 합니다. 스키마는 데이터베이스 오브젝트(예: 테이블, 뷰 등)를 논리적으로 그룹화한 것입니다. 예를 들어 스키마에는 특정 애플리케이션에 필요한 데이터베이스 오브젝트가 포함될 수 있습니다.

    # Use SQL to create our Blob Stage
    session.sql('CREATE OR REPLACE STAGE tasty_bytes_sample_data.public.blob_stage url = "s3://sfquickstarts/tastybytes/" file_format = (type = csv);').collect()
    
    Copy

    이 줄은 blob_stage 라는 스테이지를 생성하는 역할을 합니다. 스테이지는 Snowflake 데이터베이스에 로드할 데이터 파일을 보관하는 위치입니다. 이 자습서에서는 Amazon S3 버킷에서 데이터를 로드하는 스테이지를 생성합니다. 자습서에서는 데이터가 포함된 CSV 파일이 있는 기존 버킷을 사용합니다. 이 버킷은 자습서의 후반부에서 만드는 테이블에 이 CSV 파일의 데이터를 로드합니다. 자세한 내용은 Amazon S3에서 대량 로드 섹션을 참조하십시오.

  3. 워크시트의 이 단계에는 다음 코드가 포함됩니다.

    # Define our Menu Schema
    menu_schema = StructType([StructField("menu_id",IntegerType()),\
                         StructField("menu_type_id",IntegerType()),\
                         StructField("menu_type",StringType()),\
                         StructField("truck_brand_name",StringType()),\
                         StructField("menu_item_id",IntegerType()),\
                         StructField("menu_item_name",StringType()),\
                         StructField("item_category",StringType()),\
                         StructField("item_subcategory",StringType()),\
                         StructField("cost_of_goods_usd",IntegerType()),\
                         StructField("sale_price_usd",IntegerType()),\
                         StructField("menu_item_health_metrics_obj",VariantType())])
    
    Copy

    이 코드는 menu_schema 라는 StructType 오브젝트를 생성합니다. 이 오브젝트는 스테이지에서 CSV 파일의 필드를 설명하는 StructField 오브젝트의 list 로 구성됩니다. 자세한 내용은 스테이지에서 파일 작업하기 섹션을 참조하십시오.

  4. 워크시트의 이 단계에는 다음 코드가 포함됩니다.

    # Create a Dataframe from our Menu file from our Blob Stage
    df_blob_stage_read = session.read.schema(menu_schema).csv('@tasty_bytes_sample_data.public.blob_stage/raw_pos/menu/')
    
    Copy

    이 줄은 df_blob_stage_read DataFrame을 생성하는 역할을 합니다. 이 DataFrame은 지정된 menu_schema 스키마를 사용하여 지정된 스테이지에 있는 CSV 파일에서 데이터를 읽도록 구성됩니다. 스키마에는 데이터 열의 유형과 이름에 대한 정보가 포함됩니다.

    # Save our Dataframe as a Menu table in our Tasty Bytes Database and Raw POS Schema
    df_blob_stage_read.write.mode("overwrite").save_as_table("tasty_bytes_sample_data.raw_pos.menu")
    
    Copy

    이 코드는 save_as_table 메서드를 사용하여 menu 테이블을 생성하고 스테이지의 데이터를 테이블에 로드합니다.

  5. 워크시트의 이 단계에는 다음 코드가 포함됩니다.

    # Create a new Dataframe reading from our Menu table and filtering for the Freezing Point brand
    df_menu_freezing_point = session.table("tasty_bytes_sample_data.raw_pos.menu").filter(col("truck_brand_name") == 'Freezing Point')
    
    Copy

    이 줄은 df_menu_freezing_point DataFrame을 생성하고 menu 테이블을 쿼리하도록 구성하는 역할을 합니다. 필터 메서드는 조건식으로 실행할 SQL을 준비합니다. 이 조건식은 menu 테이블의 행을 필터링하여 truck_brand_name 열이 Freezing Point 와 동일한 행을 반환합니다(WHERE 절과 유사함).

    # return our Dataframe
    return df_menu_freezing_point
    
    Copy

    이 줄은 쿼리를 실행할 준비가 되도록 df_menu_freezing_point DataFrame을 반환하는 역할을 합니다. DataFrames는 느리게 평가됩니다. 즉, 이 줄은 실행할 쿼리를 서버로 보내지 않습니다.

준비가 되면 Run 을 선택하여 코드를 실행하고 출력을 확인하십시오. Run 을 선택하면 Python 워크시트는 SQL 문을 생성하고 실행하는 Python 코드를 실행합니다. 반환된 DataFrame에 대한 쿼리가 실행되고 결과가 워크시트에 표시됩니다.

출력은 다음 이미지와 유사합니다.

MENU_ID, MENU_TYPE_ID, MENU_TYPE, TRUCK_BRAND_NAME 및 MENU_ITEM_ID 열이 포함된 테이블 출력. 첫 번째 행에는 10001, 1, Ice Cream, Freezing Point, 10이라는 값이 있습니다.

4단계. 정리, 요약 및 추가 리소스

축하합니다! 평가판 계정에 대해 이 자습서를 성공적으로 완료했습니다.

잠시 시간을 내어 이 자습서에 살펴본 내용에 대한 간략한 요약과 주요 사항을 복습하십시오. 이 자습서에서 생성한 오브젝트를 모두 삭제하여 정리해 보십시오. Snowflake 설명서의 다른 항목을 검토하여 자세히 알아보십시오.

자습서 오브젝트 정리(선택 사항)

이 자습서에서 생성한 오브젝트가 더 이상 필요하지 않으면 DROP <오브젝트> 명령으로 시스템에서 제거할 수 있습니다. 생성한 데이터베이스를 제거하려면 다음 명령을 실행하십시오.

DROP DATABASE IF EXISTS tasty_bytes_sample_data;
Copy

요약 및 주요 사항

요약하자면, Snowsight 에 미리 로드된 Python 워크시트를 사용하여 Python 코드에서 다음 단계를 완료했습니다.

  1. Python 애플리케이션용 Snowpark 모듈을 가져옵니다.

  2. Python 함수를 만듭니다.

  3. 데이터베이스와 스키마를 만듭니다.

  4. Amazon S3 버킷에 데이터를 보관하는 스테이지를 만듭니다.

  5. 스테이지의 데이터 원본을 지정하는 DataFrame을 만듭니다.

  6. 스테이지에 있는 파일의 데이터가 포함된 테이블을 생성합니다.

  7. 새 테이블을 쿼리하고 데이터를 필터링하는 DataFrame을 설정합니다.

다음은 데이터 로드 및 쿼리에 대해 기억해야 할 몇 가지 주요 사항입니다.

  • Snowpark를 사용하여 Python 코드에서 SQL 문을 실행했습니다.

  • CSV 파일에서 데이터를 로드하는 스테이지를 만들었습니다.

  • 데이터를 저장하기 위한 데이터베이스와 데이터베이스 오브젝트를 논리적으로 그룹화하기 위한 스키마를 생성했습니다.

  • DataFrame을 사용하여 쿼리에 대한 데이터 원본 및 필터 데이터를 지정했습니다.

다음에는 무엇을 해야 합니까?

다음 리소스를 활용하여 Snowflake에 대해 계속 알아보십시오.

  • Snowflake에서 제공하는 다른 자습서를 완료하십시오.

  • 주요 Snowflake 개념 및 기능과 함께 쿼리와 데이터 삽입/업데이트를 수행하기 위해 사용하는 Snowflake Python 클래스와 메서드를 익히십시오.

  • Snowflake에서 제공하는 Tasty Bytes Quickstarts를 사용해 보십시오.