다음을 통해 공유


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 가져오기

Notebook 예제: Snowflake에 모델 학습 결과 저장

다음 Notebook은 Spark용 Snowflake 커넥터 사용에 대한 모범 사례를 안내합니다. Snowflake에 데이터를 쓰고, 몇 가지 기본 데이터 조작에 Snowflake를 사용하고, Azure Databricks에서 기계 학습 모델을 학습하고, 결과를 Snowflake에 다시 씁니다.

Snowflake Notebook에 ML 학습 결과 저장

Notebook 가져오기

질문과 대답(FAQ)

Snowflake에서 내 Spark DataFrame 열이 같은 순서로 표시되지 않는 이유는 무엇인가요?

Spark용 Snowflake 커넥터는 기록되는 테이블의 열 순서를 존중하지 않습니다. DataFrame과 Snowflake 열 간의 매핑을 명시적으로 지정해야 합니다. 이 매핑을 지정하려면 columnmap 매개 변수를 사용합니다.

Snowflake에 기록된 INTEGER 데이터가 DECIMAL로 다시 읽히는 이유는 무엇인가요?

Snowflake는 모든 INTEGER 유형을 NUMBER로 나타내므로 Snowflake에 데이터를 쓰고 읽을 때 데이터 형식이 변경될 수 있습니다. 예를 들어 INTEGERDECIMAL은 Snowflake에서 의미상 동일하기 때문에 INTEGER 데이터는 Snowflake에 쓸 때 DECIMAL로 변환될 수 있습니다(Snowflake 숫자 데이터 형식 참조).

Snowflake 테이블 스키마의 필드가 항상 대문자인 이유는 무엇인가요?

Snowflake는 기본적으로 대문자 필드를 사용하므로 테이블 스키마가 대문자로 변환됩니다.