Snowflake からのデータの読み取りと書き込み
Azure Databricks には、Databricks Runtime 内に、Snowflake に対するデータの読み取りと書き込みをサポートする Snowflake コネクタが用意されています。
重要
この記事で説明する構成は試験段階です。 実験用の機能は現状のまま提供されていて、カスタマー テクニカル サポートを通じて Databricks でサポートされているわけではありません。 クエリフェデレーションの完全なサポートを得るには、代わりにレイクハウス フェデレーション を使用する必要があります。これにより、Azure Databricks ユーザーは Unity Catalog 構文とデータ ガバナンス ツールを利用できます。
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 のユーザー名とパスワードをノートブックで公開しないようにします。
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 からデータを読み書きするときにデータ型が変更される可能性があります。 たとえば、INTEGER
と DECIMAL
は Snowflake では意味が同じであるため、Snowflake に書き込むときに INTEGER
データが DECIMAL
に変換されることがあります (「Snowflake の数値データ型」を参照してください)。
Snowflake のテーブルのスキーマのフィールドが常に大文字であるのはなぜですか。
Snowflake では、既定で大文字のフィールドを使用します。これは、テーブルのスキーマが大文字に変換されることを意味します。