Snowflake에서 데이터 읽기 및 쓰기
Azure Databricks는 Snowflake에서 데이터를 읽고 쓸 수 있도록 Databricks Runtime에 Snowflake 커넥터를 제공합니다.
Important
이 문서에서 설명한 구성은 실험적입니다. 실험적 기능은 있는 그대로 제공되며 Databricks에서 고객 기술 지원을 통해 지원하지 않습니다. 전체 쿼리 페더레이션 지원을 받으려면 Azure Databricks 사용자가 Unity 카탈로그 구문 및 데이터 거버넌스 도구를 활용하는 데 도움이 되는 Lakehouse Federation을 대신 사용해야 합니다.
Azure Databricks에서 Snowflake 테이블 쿼리
Snowflake에 대한 연결을 구성한 다음 데이터를 쿼리할 수 있습니다. 시작하기 전에 클러스터가 실행되는 Databricks Runtime 버전을 확인합니다. 다음 코드는 Python, SQL, Scala의 예제 구문을 제공합니다.
Python
# The following example applies to Databricks Runtime 11.3 LTS and above.
snowflake_table = (spark.read
.format("snowflake")
.option("host", "hostname")
.option("port", "port") # Optional - will use default port 443 if not specified.
.option("user", "username")
.option("password", "password")
.option("sfWarehouse", "warehouse_name")
.option("database", "database_name")
.option("schema", "schema_name") # Optional - will use default schema "public" if not specified.
.option("dbtable", "table_name")
.load()
)
# The following example applies to Databricks Runtime 10.4 and below.
snowflake_table = (spark.read
.format("snowflake")
.option("dbtable", table_name)
.option("sfUrl", database_host_url)
.option("sfUser", username)
.option("sfPassword", password)
.option("sfDatabase", database_name)
.option("sfSchema", schema_name)
.option("sfWarehouse", warehouse_name)
.load()
)
SQL
/* The following example applies to Databricks Runtime 11.3 LTS and above. */
DROP TABLE IF EXISTS snowflake_table;
CREATE TABLE snowflake_table
USING snowflake
OPTIONS (
host '<hostname>',
port '<port>', /* Optional - will use default port 443 if not specified. */
user '<username>',
password '<password>',
sfWarehouse '<warehouse_name>',
database '<database-name>',
schema '<schema-name>', /* Optional - will use default schema "public" if not specified. */
dbtable '<table-name>'
);
SELECT * FROM snowflake_table;
/* The following example applies to Databricks Runtime 10.4 LTS and below. */
DROP TABLE IF EXISTS snowflake_table;
CREATE TABLE snowflake_table
USING snowflake
OPTIONS (
dbtable '<table-name>',
sfUrl '<database-host-url>',
sfUser '<username>',
sfPassword '<password>',
sfDatabase '<database-name>',
sfSchema '<schema-name>',
sfWarehouse '<warehouse-name>'
);
SELECT * FROM snowflake_table;
Scala
# The following example applies to Databricks Runtime 11.3 LTS and above.
val snowflake_table = spark.read
.format("snowflake")
.option("host", "hostname")
.option("port", "port") /* Optional - will use default port 443 if not specified. */
.option("user", "username")
.option("password", "password")
.option("sfWarehouse", "warehouse_name")
.option("database", "database_name")
.option("schema", "schema_name") /* Optional - will use default schema "public" if not specified. */
.option("dbtable", "table_name")
.load()
# The following example applies to Databricks Runtime 10.4 and below.
val snowflake_table = spark.read
.format("snowflake")
.option("dbtable", table_name)
.option("sfUrl", database_host_url)
.option("sfUser", username)
.option("sfPassword", password)
.option("sfDatabase", database_name)
.option("sfSchema", schema_name)
.option("sfWarehouse", warehouse_name)
.load()
Notebook 예제: Spark용 Snowflake 커넥터
다음 Notebooks는 Snowflake에 데이터를 쓰고 읽는 방법에 대한 간단한 예를 제공합니다. 자세한 내용은 Spark용 Snowflake 커넥터를 참조하세요.
팁
Notebooks에 나와 있는 비밀을 사용하여 Notebooks에 Snowflake 사용자 이름과 암호가 노출되지 않도록 합니다.
Snowflake Python Notebook
Notebook 예제: Snowflake에 모델 학습 결과 저장
다음 Notebook은 Spark용 Snowflake 커넥터 사용에 대한 모범 사례를 안내합니다. Snowflake에 데이터를 쓰고, 몇 가지 기본 데이터 조작에 Snowflake를 사용하고, Azure Databricks에서 기계 학습 모델을 학습하고, 결과를 Snowflake에 다시 씁니다.
Snowflake Notebook에 ML 학습 결과 저장
질문과 대답(FAQ)
Snowflake에서 내 Spark DataFrame 열이 같은 순서로 표시되지 않는 이유는 무엇인가요?
Spark용 Snowflake 커넥터는 기록되는 테이블의 열 순서를 존중하지 않습니다. DataFrame과 Snowflake 열 간의 매핑을 명시적으로 지정해야 합니다. 이 매핑을 지정하려면 columnmap 매개 변수를 사용합니다.
Snowflake에 기록된 INTEGER
데이터가 DECIMAL
로 다시 읽히는 이유는 무엇인가요?
Snowflake는 모든 INTEGER
유형을 NUMBER
로 나타내므로 Snowflake에 데이터를 쓰고 읽을 때 데이터 형식이 변경될 수 있습니다. 예를 들어 INTEGER
및 DECIMAL
은 Snowflake에서 의미상 동일하기 때문에 INTEGER
데이터는 Snowflake에 쓸 때 DECIMAL
로 변환될 수 있습니다(Snowflake 숫자 데이터 형식 참조).
Snowflake 테이블 스키마의 필드가 항상 대문자인 이유는 무엇인가요?
Snowflake는 기본적으로 대문자 필드를 사용하므로 테이블 스키마가 대문자로 변환됩니다.