자습서 1: 데이터베이스, 스키마, 테이블, 웨어하우스 만들기

소개

이 자습서에서는 Snowflake Python APIs 을 사용하여 Snowflake 리소스 오브젝트를 관리하는 기본 사항에 대해 알아봅니다. API를 시작하려면 Snowflake 데이터베이스, 스키마, 테이블 및 가상 웨어하우스를 생성하고 관리합니다.

전제 조건

참고

Snowflake Python APIs 자습서의 일반 설정 의 단계를 이미 완료했다면 이러한 사전 요구 사항을 건너뛰고 이 자습서의 첫 번째 단계로 진행할 수 있습니다.

이 자습서를 시작하기 전에 다음 단계가 포함된 공통 설정 지침을 완료해야 합니다.

  • 개발 환경을 설정합니다.

  • Snowflake Python APIs 패키지를 설치합니다.

  • Snowflake 연결을 구성합니다.

  • Python API 자습서에 필요한 모든 모듈을 가져옵니다.

  • API Root 오브젝트를 생성합니다.

이러한 필수 요건을 완료하면 API를 사용할 준비가 된 것입니다.

데이터베이스, 스키마, 테이블 만들기

root 오브젝트를 사용하여 Snowflake 계정에서 데이터베이스, 스키마 및 테이블을 생성할 수 있습니다.

  1. 데이터베이스를 생성하려면 노트북의 다음 셀에서 다음 코드를 실행합니다.

    database = root.databases.create(
      Database(
        name="PYTHON_API_DB"),
        mode=CreateMode.or_replace
      )
    
    Copy

    이 코드는 기능적으로 SQL 명령 CREATE OR REPLACE DATABASE PYTHON_API_DB 와 동일하며, 계정에 이름이 PYTHON_API_DB 인 데이터베이스를 생성합니다. 이 코드는 Snowflake에서 오브젝트를 관리하기 위한 일반적인 패턴을 따릅니다.

    • root.databases.create() 는 Snowflake에 데이터베이스를 생성합니다. 이 함수는 Database 오브젝트와 모드의 두 가지 인자를 받습니다.

    • Database(name="PYTHON_API_DB") 를 사용하여 Database 오브젝트를 전달하고 name 인자를 사용하여 데이터베이스의 이름을 설정합니다. 노트북의 3번째 줄에서 Database 를 가져왔다는 점을 기억하십시오.

    • 생성 모드는 mode 인자를 전달하여 지정합니다. 이 경우 CreateMode.or_replace 로 설정했지만 다음 값도 유효합니다.

      • CreateMode.if_not_exists: 기능은 SQL의 CREATE IF NOT EXISTS 와 동등합니다.

      • CreateMode.error_if_exists: 해당 오브젝트가 Snowflake에 이미 존재하는 경우 예외를 발생시킵니다. 모드가 지정되지 않으면 이 값이 기본값입니다.

    • 데이터베이스에 대한 참조를 이름이 database 인 생성한 오브젝트에 저장하여 프로그래밍 방식으로 데이터베이스를 관리합니다.

  2. Snowsight 에서 Snowflake 계정의 데이터베이스 섹션으로 이동합니다. 코드가 성공하면 PYTHON_API_DB 데이터베이스가 목록에 표시됩니다.

    VS Code를 사용하는 경우, Snowflake 확장 프로그램 을 설치하여 편집기 내에서 모든 Snowflake 오브젝트를 살펴봅니다.

  3. PYTHON_API_DB 데이터베이스에 스키마를 생성하려면 다음 셀에서 다음 코드를 실행합니다.

    schema = database.schemas.create(
      Schema(
        name="PYTHON_API_SCHEMA"),
        mode=CreateMode.or_replace,
      )
    
    Copy

    이전에 생성한 database 오브젝트에서 .schemas.create() 를 호출한다는 점에 유의하십시오.

  4. 방금 생성한 스키마에서 테이블을 생성하려면 다음 셀에서 다음 코드를 실행합니다.

    table = schema.tables.create(
      Table(
        name="PYTHON_API_TABLE",
        columns=[
          TableColumn(
            name="TEMPERATURE",
            datatype="int",
            nullable=False,
          ),
          TableColumn(
            name="LOCATION",
            datatype="string",
          ),
        ],
      ),
    mode=CreateMode.or_replace
    )
    
    Copy

    이 코드는 PYTHON_API_SCHEMA 스키마에 두 개의 열과 해당 데이터 타입이 지정된 테이블을 생성하며, TEMPERATUREint 로, LOCATIONstring 으로 지정합니다.

    이 마지막 두 코드 예제는 PYTHON_API_DB 데이터베이스를 생성한 첫 번째 단계의 패턴을 따르기 때문에 익숙할 것입니다.

  5. 오브젝트가 생성되었는지 확인하려면 Snowsight 에서 Snowflake 계정으로 돌아갑니다.

오브젝트 데이터 검색하기

Snowflake에서 오브젝트에 대한 메타데이터를 검색할 수 있습니다.

  1. 이전에 생성한 PYTHON_API_TABLE 테이블에 대한 세부 정보를 검색하려면 다음 노트북 셀에서 다음 코드를 실행합니다.

    table_details = table.fetch()
    
    Copy

    fetch()TableModel 오브젝트를 반환합니다.

  2. 그런 다음 결과 오브젝트에서 .to_dict() 를 호출하여 자세한 정보를 볼 수 있습니다.

    테이블 세부 정보를 출력하려면 다음 셀에서 다음 코드를 실행합니다.

    table_details.to_dict()
    
    Copy

    노트북에는 다음과 유사한 PYTHON_API_TABLE 테이블에 대한 메타데이터가 포함된 사전이 표시되어야 합니다.

    {
        "name": "PYTHON_API_TABLE",
        "kind": "TABLE",
        "enable_schema_evolution": False,
        "change_tracking": False,
        "data_retention_time_in_days": 1,
        "max_data_extension_time_in_days": 14,
        "default_ddl_collation": "",
        "columns": [
            {"name": "TEMPERATURE", "datatype": "NUMBER(38,0)", "nullable": False},
            {"name": "LOCATION", "datatype": "VARCHAR(16777216)", "nullable": True},
        ],
        "created_on": datetime.datetime(
            2024, 5, 9, 8, 59, 15, 832000, tzinfo=datetime.timezone.utc
        ),
        "database_name": "PYTHON_API_DB",
        "schema_name": "PYTHON_API_SCHEMA",
        "rows": 0,
        "bytes": 0,
        "owner": "ACCOUNTADMIN",
        "automatic_clustering": False,
        "search_optimization": False,
        "owner_role_type": "ROLE",
    }
    
    Copy

    표시된 것처럼 이 사전에는 이전에 생성한 PYTHON_API_TABLE 테이블에 대한 정보가 columns, owner, database, schema 등에 대한 자세한 정보와 함께 포함되어 있습니다.

오브젝트 메타데이터는 애플리케이션에서 비즈니스 논리를 구축할 때 유용합니다. 예를 들어, 오브젝트에 대한 특정 정보에 따라 실행되는 논리를 구축할 수 있습니다. 이러한 시나리오에서는 fetch() 를 사용하여 오브젝트 메타데이터를 검색할 수 있습니다.

프로그래밍 방식으로 테이블 변경

프로그래밍 방식으로 테이블에 열을 추가할 수 있습니다. 현재 PYTHON_API_TABLE 테이블에는 두 개의 열 TEMPERATURELOCATION 이 있습니다. 이 시나리오에서는 int 유형의 ELEVATION 라는 새 열을 추가하고 이를 테이블의 기본 키로 설정하려고 합니다.

  1. 다음 셀에서 다음 코드를 실행합니다.

    table_details.columns.append(
        TableColumn(
          name="elevation",
          datatype="int",
          nullable=False,
          constraints=[PrimaryKey()],
        )
    )
    
    Copy

    참고

    이 코드는 열을 생성하지 않습니다. 대신 이 열 정의는 TableModel 에서 테이블의 열을 나타내는 배열에 추가됩니다. 이 배열을 보려면 테이블 메타데이터 보기 지침에 설명된 대로 columns 의 값을 검토합니다.

  2. 테이블을 수정하고 열을 추가하려면 다음 셀에서 다음 코드를 실행합니다.

    table.create_or_alter(table_details)
    
    Copy

    이 줄에서는 PYTHON_API_TABLE 을 나타내는 오브젝트에서 create_or_alter() 를 호출하고 table_details 의 업데이트된 값을 전달합니다. 이 줄은 PYTHON_API_TABLEELEVATION 열을 추가합니다.

  3. 열이 추가되었는지 확인하려면 다음 셀에서 다음 코드를 실행합니다.

    table.fetch().to_dict()
    
    Copy

    출력은 다음과 유사한 형태여야 합니다.

    {
        "name": "PYTHON_API_TABLE",
        "kind": "TABLE",
        "enable_schema_evolution": False,
        "change_tracking": False,
        "data_retention_time_in_days": 1,
        "max_data_extension_time_in_days": 14,
        "default_ddl_collation": "",
        "columns": [
            {"name": "TEMPERATURE", "datatype": "NUMBER(38,0)", "nullable": False},
            {"name": "LOCATION", "datatype": "VARCHAR(16777216)", "nullable": True},
            {"name": "ELEVATION", "datatype": "NUMBER(38,0)", "nullable": False},
        ],
        "created_on": datetime.datetime(
            2024, 5, 9, 8, 59, 15, 832000, tzinfo=datetime.timezone.utc
        ),
        "database_name": "PYTHON_API_DB",
        "schema_name": "PYTHON_API_SCHEMA",
        "rows": 0,
        "bytes": 0,
        "owner": "ACCOUNTADMIN",
        "automatic_clustering": False,
        "search_optimization": False,
        "owner_role_type": "ROLE",
        "constraints": [
            {"name": "ELEVATION", "column_names": ["ELEVATION"], "constraint_type": "PRIMARY KEY"}
        ]
    }
    
    Copy

    이제 ELEVATION 열을 포함하는 columns 의 값과 constraints 의 값을 검토합니다.

  4. 새 열이 있는지 확인하려면 Snowsight 에서 Snowflake 계정으로 돌아가서 테이블을 살펴봅니다.

웨어하우스 생성 및 관리

Snowflake Python APIs 을 사용하여 가상 웨어하우스를 관리할 수도 있습니다. 예를 들어, 특정 쿼리를 실행하기 위해 일시적으로 다른 웨어하우스를 생성해야 할 수도 있습니다. 이 시나리오에서는 API를 사용하여 웨어하우스를 생성, 일시 중단 또는 삭제할 수 있습니다.

  1. 세션과 관련된 웨어하우스 컬렉션을 검색하려면 다음 셀에서 다음 코드를 실행합니다.

    warehouses = root.warehouses
    
    Copy

    결과 warehouses 오브젝트를 사용하여 세션에서 웨어하우스를 관리합니다.

  2. 새 웨어하우스를 정의하고 생성하려면 다음 셀에서 다음 코드를 실행합니다.

    python_api_wh = Warehouse(
        name="PYTHON_API_WH",
        warehouse_size="SMALL",
        auto_suspend=500,
    )
    
    warehouse = warehouses.create(python_api_wh,mode=CreateMode.or_replace)
    
    Copy

    이 코드에서는 Warehouse 를 인스턴스화하고 웨어하우스의 이름, 크기, 자동 일시 중단 정책을 지정하여 새 웨어하우스를 정의합니다. 자동 일시 중단 시간 제한는 초 단위입니다. 이 경우, 8.33분 동안 아무런 활동이 없으면 웨어하우스가 일시 중단됩니다.

    그런 다음 웨어하우스 컬렉션에서 create() 를 호출하여 웨어하우스를 생성합니다. 결과 warehouse 오브젝트에 참조를 저장합니다.

  3. Snowsight 에서 Snowflake 계정으로 이동하여 웨어하우스가 생성되었는지 확인합니다.

  4. 웨어하우스에 대한 정보를 검색하려면 다음 셀에서 다음 코드를 실행합니다.

    warehouse_details = warehouse.fetch()
    warehouse_details.to_dict()
    
    Copy

    이 코드는 이전 단계에서 테이블 메타데이터를 가져오는 데 사용한 것과 동일한 패턴을 따르므로 익숙해 보일 것입니다. 출력은 다음과 유사해야 합니다.

    {
      'name': 'PYTHON_API_WH',
      'auto_suspend': 500,
      'auto_resume': 'true',
      'resource_monitor': 'null',
      'comment': '',
      'max_concurrency_level': 8,
      'statement_queued_timeout_in_seconds': 0,
      'statement_timeout_in_seconds': 172800,
      'tags': {},
      'warehouse_type': 'STANDARD',
      'warehouse_size': 'Small'
    }
    
    Copy
  5. 선택 사항: 세션에 여러 개의 웨어하우스가 있는 경우 API를 사용하여 반복하거나 특정 웨어하우스를 검색할 수 있습니다.

    다음 셀에서 다음 코드를 실행합니다.

    warehouse_list = warehouses.iter(like="PYTHON_API_WH")
    result = next(warehouse_list)
    result.to_dict()
    
    Copy

    이 코드에서는 웨어하우스 컬렉션에서 like 를 호출하고 iter() 인자를 전달하면 지정된 문자열과 이름이 일치하는 모든 웨어하우스를 반환합니다. 이 경우 이전에 정의한 웨어하우스의 이름을 전달하지만 이 인자는 일반적으로 대소문자를 구분하지 않는 문자열로 필터 역할을 하며 %_ 같은 SQL 와일드카드 문자를 지원합니다.

    셀을 실행한 후 다음 코드와 유사한 출력은 일치하는 웨어하우스가 성공적으로 반환되었음을 보여줍니다.

    {
      'name': 'PYTHON_API_WH',
      'auto_suspend': 500,
      'auto_resume': 'true',
      'resource_monitor': 'null',
      'comment': '',
      'max_concurrency_level': 8,
      'statement_queued_timeout_in_seconds': 0,
      'statement_timeout_in_seconds': 172800,
      'tags': {},
      'warehouse_type': 'STANDARD',
      'warehouse_size': 'Small'
    }
    
    Copy
  6. 웨어하우스의 크기를 LARGE 로 변경하여 프로그래밍 방식으로 수정하려면 다음 셀에서 다음 코드를 실행합니다.

    warehouse = root.warehouses.create(Warehouse(
        name="PYTHON_API_WH",
        warehouse_size="LARGE",
        auto_suspend=500,
    ), mode=CreateMode.or_replace)
    
    Copy
  7. 웨어하우스 크기가 LARGE 로 업데이트되었는지 확인하려면 다음 중 하나를 수행합니다.

    • 다음 셀에서 다음 코드를 실행합니다.

      warehouse.fetch().size
      
      Copy
    • Snowsight 에서 Snowflake 계정으로 이동하여 변경된 웨어하우스 크기를 확인합니다.

  8. 선택 사항: 웨어하우스를 계속 사용하고 싶지 않으면 삭제합니다. 다음 셀에서 다음 코드를 실행합니다.

    warehouse.drop()
    
    Copy
  9. 웨어하우스 삭제를 확인하려면 Snowsight 에서 Snowflake 계정으로 돌아갑니다.

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

축하합니다! 이 자습서에서는 Snowflake Python APIs 을 사용하여 Snowflake 리소스 오브젝트를 관리하는 기본 사항에 대해 알아봅니다.

요약

이 과정에서 다음 단계를 완료했습니다.

  • Snowflake Python APIs 을 설치합니다.

  • Snowflake에 연결을 설정합니다.

  • 데이터베이스, 스키마, 테이블을 만듭니다.

  • 오브젝트 정보를 검색합니다.

  • 프로그래밍적으로 오브젝트를 변경합니다.

  • 웨어하우스를 생성, 중단 및 삭제합니다.

다음 자습서

이제 작업 및 작업 그래프를 생성하고 관리하는 방법을 보여주는 자습서 2: 작업 및 작업 그래프(DAG) 만들기 및 관리 로 이동할 수 있습니다.

추가 리소스

API를 사용하여 Snowflake에서 다른 유형의 오브젝트를 관리하는 더 많은 예제는 다음 개발자 가이드를 참조하십시오.

가이드

설명

Python을 사용하여 Snowflake 사용자, 역할 및 권한 관리

API를 사용하여 사용자, 역할 및 보조금을 생성하고 관리합니다.

Python을 사용하여 데이터 로딩 및 언로딩 리소스 관리

API를 사용하여 외부 볼륨, 파이프, 스테이지를 포함한 데이터 로딩 및 언로딩 리소스를 생성하고 관리합니다.

Python을 사용하여 Snowflake 작업 및 작업 그래프 관리하기

API를 사용하여 작업과 작업 그래프를 생성, 실행, 관리합니다.

Python을 사용하여 Snowpark 컨테이너 서비스(서비스 함수 포함) 관리하기

API를 사용하여 컴퓨팅 풀, 이미지 리포지토리, 서비스, 서비스 함수 등 Snowpark Container Services의 구성 요소를 관리합니다.