자습서 1: 데이터베이스, 스키마, 테이블, 웨어하우스 만들기¶
소개¶
이 자습서에서는 Snowflake Python APIs 을 사용하여 Snowflake 리소스 오브젝트를 관리하는 기본 사항에 대해 알아봅니다. API를 시작하려면 Snowflake 데이터베이스, 스키마, 테이블 및 가상 웨어하우스를 생성하고 관리합니다.
전제 조건¶
참고
Snowflake Python APIs 자습서의 일반 설정 의 단계를 이미 완료했다면 이러한 사전 요구 사항을 건너뛰고 이 자습서의 첫 번째 단계로 진행할 수 있습니다.
이 자습서를 시작하기 전에 다음 단계가 포함된 공통 설정 지침을 완료해야 합니다.
개발 환경을 설정합니다.
Snowflake Python APIs 패키지를 설치합니다.
Snowflake 연결을 구성합니다.
Python API 자습서에 필요한 모든 모듈을 가져옵니다.
API
Root
오브젝트를 생성합니다.
이러한 필수 요건을 완료하면 API를 사용할 준비가 된 것입니다.
데이터베이스, 스키마, 테이블 만들기¶
root
오브젝트를 사용하여 Snowflake 계정에서 데이터베이스, 스키마 및 테이블을 생성할 수 있습니다.
데이터베이스를 생성하려면 노트북의 다음 셀에서 다음 코드를 실행합니다.
database = root.databases.create( Database( name="PYTHON_API_DB"), mode=CreateMode.or_replace )
이 코드는 기능적으로 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
인 생성한 오브젝트에 저장하여 프로그래밍 방식으로 데이터베이스를 관리합니다.
Snowsight 에서 Snowflake 계정의 데이터베이스 섹션으로 이동합니다. 코드가 성공하면
PYTHON_API_DB
데이터베이스가 목록에 표시됩니다.팁
VS Code를 사용하는 경우, Snowflake 확장 프로그램 을 설치하여 편집기 내에서 모든 Snowflake 오브젝트를 살펴봅니다.
PYTHON_API_DB
데이터베이스에 스키마를 생성하려면 다음 셀에서 다음 코드를 실행합니다.schema = database.schemas.create( Schema( name="PYTHON_API_SCHEMA"), mode=CreateMode.or_replace, )
이전에 생성한
database
오브젝트에서.schemas.create()
를 호출한다는 점에 유의하십시오.방금 생성한 스키마에서 테이블을 생성하려면 다음 셀에서 다음 코드를 실행합니다.
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 )
이 코드는
PYTHON_API_SCHEMA
스키마에 두 개의 열과 해당 데이터 타입이 지정된 테이블을 생성하며,TEMPERATURE
를int
로,LOCATION
을string
으로 지정합니다.이 마지막 두 코드 예제는
PYTHON_API_DB
데이터베이스를 생성한 첫 번째 단계의 패턴을 따르기 때문에 익숙할 것입니다.오브젝트가 생성되었는지 확인하려면 Snowsight 에서 Snowflake 계정으로 돌아갑니다.
오브젝트 데이터 검색하기¶
Snowflake에서 오브젝트에 대한 메타데이터를 검색할 수 있습니다.
이전에 생성한
PYTHON_API_TABLE
테이블에 대한 세부 정보를 검색하려면 다음 노트북 셀에서 다음 코드를 실행합니다.table_details = table.fetch()
fetch()
는TableModel
오브젝트를 반환합니다.그런 다음 결과 오브젝트에서
.to_dict()
를 호출하여 자세한 정보를 볼 수 있습니다.테이블 세부 정보를 출력하려면 다음 셀에서 다음 코드를 실행합니다.
table_details.to_dict()
노트북에는 다음과 유사한
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", }
표시된 것처럼 이 사전에는 이전에 생성한
PYTHON_API_TABLE
테이블에 대한 정보가columns
,owner
,database
,schema
등에 대한 자세한 정보와 함께 포함되어 있습니다.
오브젝트 메타데이터는 애플리케이션에서 비즈니스 논리를 구축할 때 유용합니다. 예를 들어, 오브젝트에 대한 특정 정보에 따라 실행되는 논리를 구축할 수 있습니다. 이러한 시나리오에서는 fetch()
를 사용하여 오브젝트 메타데이터를 검색할 수 있습니다.
프로그래밍 방식으로 테이블 변경¶
프로그래밍 방식으로 테이블에 열을 추가할 수 있습니다. 현재 PYTHON_API_TABLE
테이블에는 두 개의 열 TEMPERATURE
및 LOCATION
이 있습니다. 이 시나리오에서는 int
유형의 ELEVATION
라는 새 열을 추가하고 이를 테이블의 기본 키로 설정하려고 합니다.
다음 셀에서 다음 코드를 실행합니다.
table_details.columns.append( TableColumn( name="elevation", datatype="int", nullable=False, constraints=[PrimaryKey()], ) )
참고
이 코드는 열을 생성하지 않습니다. 대신 이 열 정의는
TableModel
에서 테이블의 열을 나타내는 배열에 추가됩니다. 이 배열을 보려면 테이블 메타데이터 보기 지침에 설명된 대로columns
의 값을 검토합니다.테이블을 수정하고 열을 추가하려면 다음 셀에서 다음 코드를 실행합니다.
table.create_or_alter(table_details)
이 줄에서는
PYTHON_API_TABLE
을 나타내는 오브젝트에서create_or_alter()
를 호출하고table_details
의 업데이트된 값을 전달합니다. 이 줄은PYTHON_API_TABLE
에ELEVATION
열을 추가합니다.열이 추가되었는지 확인하려면 다음 셀에서 다음 코드를 실행합니다.
table.fetch().to_dict()
출력은 다음과 유사한 형태여야 합니다.
{ "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"} ] }
이제
ELEVATION
열을 포함하는columns
의 값과constraints
의 값을 검토합니다.새 열이 있는지 확인하려면 Snowsight 에서 Snowflake 계정으로 돌아가서 테이블을 살펴봅니다.
웨어하우스 생성 및 관리¶
Snowflake Python APIs 을 사용하여 가상 웨어하우스를 관리할 수도 있습니다. 예를 들어, 특정 쿼리를 실행하기 위해 일시적으로 다른 웨어하우스를 생성해야 할 수도 있습니다. 이 시나리오에서는 API를 사용하여 웨어하우스를 생성, 일시 중단 또는 삭제할 수 있습니다.
세션과 관련된 웨어하우스 컬렉션을 검색하려면 다음 셀에서 다음 코드를 실행합니다.
warehouses = root.warehouses
결과
warehouses
오브젝트를 사용하여 세션에서 웨어하우스를 관리합니다.새 웨어하우스를 정의하고 생성하려면 다음 셀에서 다음 코드를 실행합니다.
python_api_wh = Warehouse( name="PYTHON_API_WH", warehouse_size="SMALL", auto_suspend=500, ) warehouse = warehouses.create(python_api_wh,mode=CreateMode.or_replace)
이 코드에서는
Warehouse
를 인스턴스화하고 웨어하우스의 이름, 크기, 자동 일시 중단 정책을 지정하여 새 웨어하우스를 정의합니다. 자동 일시 중단 시간 제한는 초 단위입니다. 이 경우, 8.33분 동안 아무런 활동이 없으면 웨어하우스가 일시 중단됩니다.그런 다음 웨어하우스 컬렉션에서
create()
를 호출하여 웨어하우스를 생성합니다. 결과warehouse
오브젝트에 참조를 저장합니다.Snowsight 에서 Snowflake 계정으로 이동하여 웨어하우스가 생성되었는지 확인합니다.
웨어하우스에 대한 정보를 검색하려면 다음 셀에서 다음 코드를 실행합니다.
warehouse_details = warehouse.fetch() warehouse_details.to_dict()
이 코드는 이전 단계에서 테이블 메타데이터를 가져오는 데 사용한 것과 동일한 패턴을 따르므로 익숙해 보일 것입니다. 출력은 다음과 유사해야 합니다.
{ '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' }
선택 사항: 세션에 여러 개의 웨어하우스가 있는 경우 API를 사용하여 반복하거나 특정 웨어하우스를 검색할 수 있습니다.
다음 셀에서 다음 코드를 실행합니다.
warehouse_list = warehouses.iter(like="PYTHON_API_WH") result = next(warehouse_list) result.to_dict()
이 코드에서는 웨어하우스 컬렉션에서
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' }
웨어하우스의 크기를
LARGE
로 변경하여 프로그래밍 방식으로 수정하려면 다음 셀에서 다음 코드를 실행합니다.warehouse = root.warehouses.create(Warehouse( name="PYTHON_API_WH", warehouse_size="LARGE", auto_suspend=500, ), mode=CreateMode.or_replace)
웨어하우스 크기가
LARGE
로 업데이트되었는지 확인하려면 다음 중 하나를 수행합니다.다음 셀에서 다음 코드를 실행합니다.
warehouse.fetch().size
Snowsight 에서 Snowflake 계정으로 이동하여 변경된 웨어하우스 크기를 확인합니다.
선택 사항: 웨어하우스를 계속 사용하고 싶지 않으면 삭제합니다. 다음 셀에서 다음 코드를 실행합니다.
warehouse.drop()
웨어하우스 삭제를 확인하려면 Snowsight 에서 Snowflake 계정으로 돌아갑니다.
다음에는 무엇을 해야 합니까?¶
축하합니다! 이 자습서에서는 Snowflake Python APIs 을 사용하여 Snowflake 리소스 오브젝트를 관리하는 기본 사항에 대해 알아봅니다.
요약¶
이 과정에서 다음 단계를 완료했습니다.
Snowflake Python APIs 을 설치합니다.
Snowflake에 연결을 설정합니다.
데이터베이스, 스키마, 테이블을 만듭니다.
오브젝트 정보를 검색합니다.
프로그래밍적으로 오브젝트를 변경합니다.
웨어하우스를 생성, 중단 및 삭제합니다.
다음 자습서¶
이제 작업 및 작업 그래프를 생성하고 관리하는 방법을 보여주는 자습서 2: 작업 및 작업 그래프(DAG) 만들기 및 관리 로 이동할 수 있습니다.
추가 리소스¶
API를 사용하여 Snowflake에서 다른 유형의 오브젝트를 관리하는 더 많은 예제는 다음 개발자 가이드를 참조하십시오.
가이드 |
설명 |
---|---|
API를 사용하여 사용자, 역할 및 보조금을 생성하고 관리합니다. |
|
API를 사용하여 외부 볼륨, 파이프, 스테이지를 포함한 데이터 로딩 및 언로딩 리소스를 생성하고 관리합니다. |
|
API를 사용하여 작업과 작업 그래프를 생성, 실행, 관리합니다. |
|
API를 사용하여 컴퓨팅 풀, 이미지 리포지토리, 서비스, 서비스 함수 등 Snowpark Container Services의 구성 요소를 관리합니다. |