Snowpark API

Snowpark 라이브러리는 Snowflake에서 규모에 맞게 데이터를 쿼리하고 처리하기 위한 직관적인 라이브러리를 제공합니다. 세 가지 언어 중 하나의 라이브러리를 사용하여 애플리케이션 코드가 실행되는 시스템으로 데이터를 이동하지 않고 Snowflake에서 데이터를 처리하는 애플리케이션을 만들고 탄력적인 서버리스 Snowflake 엔진의 일부로 규모에 맞게 적절히 처리할 수 있습니다.

Snowflake는 현재 Java, Python, Scala의 세 언어를 위한 Snowpark 라이브러리를 제공합니다.

개발자 가이드

다음 표에 나열된 언어를 위한 Snowpark 라이브러리를 사용할 수 있습니다.

언어

개발자 가이드

API 참조

Java

Java용 Snowpark 개발자 가이드

Java용 Snowpark 라이브러리 API 참조

Python

Python용 Snowpark 개발자 가이드

Python용 Snowpark 라이브러리 API 참조

Scala

Scala용 Snowpark 개발자 가이드

Scala용 Snowpark 라이브러리 API 참조

다운로드

지원되는 세 언어의 Snowpark 라이브러리를 다운로드할 수 있습니다. 다운로드는 Snowpark 클라이언트 다운로드 (Snowflake 개발자 센터)를 참조하십시오.

주요 기능

다음 섹션에서 설명하는 바와 같이, Snowpark에는 다른 클라이언트 라이브러리와 구별되는 몇 가지 특징이 있습니다.

Spark 커넥터와 비교할 때의 이점

Spark용 Snowflake 커넥터 사용과 비교 시, Snowpark로 개발하면 다음과 같은 이점이 있습니다.

  • 성능이나 기능을 훼손하지 않으면서 다양한 언어에 맞게 구축된 라이브러리와 패턴을 사용하여 Snowflake 내에서 데이터와의 상호 작용을 지원합니다.

  • Jupyter, VS Code 또는 IntelliJ와 같은 로컬 도구를 사용하여 Snowpark 코드 작성을 지원합니다.

  • Snowflake UDF를 포함한 모든 작업에 대해 푸시다운을 지원합니다. 즉, Snowpark는 모든 데이터 변환과 힘든 일을 Snowflake 데이터 클라우드로 푸시다운하여 크기에 관계없이 모든 데이터로 효율적으로 작업할 수 있습니다.

  • 계산을 위해 Snowflake 외부에 별도의 클러스터가 필요하지 않습니다. 모든 계산은 Snowflake 내에서 수행됩니다. 규모 및 컴퓨팅 관리는 Snowflake에서 처리합니다.

기본 구문으로 SQL 문을 작성하는 기능

Snowpark API는 SQL 문을 빌드하기 위한 프로그래밍 언어 구문을 제공합니다. 예를 들어 API는 'select column_name' 을 문자열로 작성하는 대신, 반환할 열 이름을 지정하는 데 사용할 수 있는 select 메서드를 제공합니다.

실행할 SQL 문을 지정하는 데 여전히 문자열을 사용할 수 있지만, Snowpark에서 제공하는 기본 언어 구문을 사용하면 지능형 코드 완성 및 형식 검사와 같은 기능의 이점을 누릴 수 있습니다.

다음 예제의 Python 코드는 id, nameserial_number 열을 지정하여 sample_product_data 테이블에서 선택 작업을 수행합니다.

>>> # Import the col function from the functions module.
>>> from snowflake.snowpark.functions import col

>>> # Create a DataFrame that contains the id, name, and serial_number
>>> # columns in the "sample_product_data" table.
>>> df = session.table("sample_product_data").select(col("id"), col("name"), col("serial_number"))
>>> df.show()
Copy

데이터 전송 감소

Snowpark 작업은 서버에서 지연 실행되는데, 이는 라이브러리를 사용하여 많은 작업을 단일 작업으로 일괄 처리하면서 파이프라인에서 가능한 한 늦은 시점까지 데이터 변환 실행을 지연할 수 있다는 뜻입니다. 따라서 클라이언트와 Snowflake 데이터베이스 간에 전송되는 데이터양이 줄어듭니다. 성능도 향상됩니다.

Snowpark의 핵심 추상화는 데이터 세트를 나타내는 DataFrame으로, 해당 데이터에서 작동하는 메서드를 제공합니다. 클라이언트 코드에서 DataFrame 오브젝트를 구성하고, 사용하려는 데이터(예: 데이터가 포함된 열, 행에 적용할 필터 등)를 검색하도록 설정합니다.

DataFrame 오브젝트를 생성할 때 데이터는 검색되지 않습니다. 대신, 데이터를 검색할 준비가 되면 DataFrame 오브젝트를 평가하고 실행을 위해 해당 SQL 문을 Snowflake 데이터베이스로 보내는 작업을 수행할 수 있습니다.

다음 예제의 Python 코드는 테이블에 대한 쿼리를 설정합니다. collect 메서드를 호출하여 쿼리를 실행하고 결과를 검색합니다.

>>> # Create a DataFrame with the "id" and "name" columns from the "sample_product_data" table.
>>> # This does not execute the query.
>>> df = session.table("sample_product_data").select(col("id"), col("name"))

>>> # Send the query to the server for execution and
>>> # return a list of Rows containing the results.
>>> results = df.collect()
Copy

UDF를 인라인 방식으로 생성하는 기능

Snowpark 앱에서 인라인으로 UDF(사용자 정의 함수)를 생성할 수 있습니다. Snowpark는 코드가 규모에 맞게 데이터에서 작동할 수 있는 서버로 코드를 푸시할 수 있습니다. 이는 UDF로 생성하면 Snowflake가 Snowflake 내에서 규모에 맞게 코드 논리를 병렬화하고 적용할 수 있는 루프 또는 배치 기능에 유용합니다.

클라이언트 코드를 작성하는 데 사용하는 것과 동일한 언어로 함수를 작성할 수 있습니다(예: Scala에서 익명 함수를 사용하거나 Python에서 람다 함수를 사용). 이러한 함수를 사용하여 Snowflake 데이터베이스의 데이터를 처리하려면 사용자 지정 코드에서 사용자 정의 함수(UDF)를 정의하고 호출합니다.

Snowpark는 UDF에 대한 사용자 지정 코드를 Snowflake 데이터베이스에 자동으로 푸시합니다. 클라이언트 코드에서 UDF를 호출하면 사용자 지정 코드가 서버(데이터가 있는 곳)에서 실행됩니다. 데이터에 대한 함수를 실행하기 위해 데이터를 클라이언트로 전송할 필요가 없습니다.

다음 예시의 Python 코드는 my_udf 라는 UDF를 생성하고 이를 add_one 변수에 할당합니다.

>>> from snowflake.snowpark.types import IntegerType
>>> add_one = udf(lambda x: x+1, return_type=IntegerType(), input_types=[IntegerType()], name="my_udf", replace=True)
Copy