Snowflake からのデータの読み取りと書き込み

Azure Databricks には、Databricks Runtime 内に、Snowflake に対するデータの読み取りと書き込みをサポートする Snowflake コネクタが用意されています。

注意

Snowflake データに対するクエリを管理する場合は、Lakehouse フェデレーションが適している可能性があります。 「Lakehouse フェデレーションとは」を参照してください。

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()

ノートブックの例: Spark 用の Snowflake コネクタ

次のノートブックでは、Snowflake のデータを読み書きする方法の簡単な例を紹介しています。 詳細については、「Spark コネクタの使用」を参照してください。 特に、すべての構成オプションについては、「コネクタの構成オプションの設定」を参照してください。

ヒント

ノートブックに示されているシークレットを使用して、 Snowflake のユーザー名とパスワードをノートブックで公開しないようにします。

Snowflake Python ノートブック

ノートブックを入手

ノートブックの例: モデルのトレーニング結果を Snowflake に保存する

次のノートブックでは、Spark 用の Snowflake コネクタを使用するためのベスト プラクティスについて説明します。 データを Snowflake に書き込み、いくつかの基本的なデータ操作に Snowflake を使用し、Azure Databricks で機械学習モデルをトレーニングし、その結果を Snowflake に書き込みます。

ML トレーニング結果を Snowflake ノートブックに格納する

ノートブックを入手

よく寄せられる質問 (FAQ)

Spark DataFrame の列が Snowflake では同じ順序で表示されないのはなぜですか。

Spark 用の Snowflake コネクタでは、書き込まれるテーブル内の列の順序は考慮されません。DataFrame の列と Snowflake の列の間のマッピングを明示的に指定する必要があります。 このマッピングを指定するには columnmap パラメーターを使用します。

Snowflake に書き込まれる INTEGER データが DECIMAL として読み戻されるのはなぜですか

Snowflake では、すべての INTEGER 型を NUMBER として表します。これにより、Snowflake からデータを読み書きするときにデータ型が変更される可能性があります。 たとえば、INTEGERDECIMAL は Snowflake では意味が同じであるため、Snowflake に書き込むときに INTEGER データが DECIMAL に変換されることがあります (「Snowflake の数値データ型」を参照してください)。

Snowflake のテーブルのスキーマのフィールドが常に大文字であるのはなぜですか。

Snowflake では、既定で大文字のフィールドを使用します。これは、テーブルのスキーマが大文字に変換されることを意味します。