メインコンテンツまでスキップ

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

Databricks は、Snowflake からのデータの読み取りと書き込みをサポートするために、Databricks Runtime に Snowflake コネクタを提供します。

備考

実験段階

この記事で説明する構成は 試験段階です。 試験的な機能は現状のまま提供され、 Databricks を通じて顧客のテクニカル サポートを通じてサポートされることはありません。 クエリ フェデレーションを完全にサポートするには、代わりに レイクハウスフェデレーションを使用して、 Databricks ユーザーが Unity Catalog 構文ツールとデータガバナンス ツールを利用できるようにする必要があります。

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

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

次のノートブックは、Snowflake に対してデータを書き込んだり、Snowflake からデータを読み取ったりする方法の簡単な例を示しています。 詳細については、 Spark 用 Snowflake コネクタ をご参照ください。

ヒント

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

Snowflake Python ノートブック

Open notebook in new tab

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

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

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

Open notebook in new tab

よくある質問(FAQ)

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

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

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

Snowflakeは、すべての INTEGER タイプを NUMBERとして表し、Snowflakeにデータを書き込んだり、Snowflakeからデータを読み取ったりすると、データ型が変わる可能性があります。 たとえば、SnowflakeではINTEGERDECIMALは意味的に同等であるため、INTEGERデータをSnowflakeに書き込むときにDECIMALに変換できます( Snowflakeの数値データ型 を参照)。

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

Snowflakeはデフォルトで大文字のフィールドを使用するため、テーブルスキーマは大文字に変換されます。