Snowflakeからのデータの読み取りと書き込み
Databricks は、Snowflake からのデータの読み取りと書き込みをサポートするために、Databricks Runtime に Snowflake コネクタを提供します。
実験段階
この記事で説明する構成は 試験段階です。 試験的な機能は現状のまま提供され、 Databricks を通じて顧客のテクニカル サポートを通じてサポートされることはありません。 クエリ フェデレーションを完全にサポートするには、代わりに レイクハウスフェデレーションを使用して、 Databricks ユーザーが Unity Catalog 構文ツールとデータガバナンス ツールを利用できるようにする必要があります。
Databricks で Snowflake テーブルをクエリする
Snowflakeへの接続を構成してから、データをクエリできます。 開始する前に、クラスターを実行する Databricks Runtime のバージョンを確認してください。 次のコードは、Python、SQL、および Scala の構文の例を示しています。
- Python
- SQL
- Scala
# 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()
)
/* 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;
# 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 に対してデータを書き込んだり、Snowflake からデータを読み取ったりする方法の簡単な例を示しています。 詳細については、 Spark 用 Snowflake コネクタ をご参照ください。
Snowflakeのユーザー名とパスワードをノートブックで公開しないようにするには、 ノートブックに示されているシークレットを使用します。
Snowflake Python ノートブック
ノートブックの例: モデルのトレーニング結果を Snowflake に保存する
次のノートブックでは、Spark 用 Snowflake コネクタを使用するためのベストプラクティスについて説明します。 Snowflake にデータを書き込み、基本的なデータ操作に Snowflake を使用し、Databricks で機械学習モデルをトレーニングし、結果を Snowflake に書き戻します。
ML トレーニング結果を Snowflake ノートブックに格納する
よくある質問(FAQ)
SnowflakeでSpark DataFrameの列が同じ順序で表示されないのはなぜですか?
Spark用Snowflakeコネクタは、書き込まれるテーブル内の列の順序を尊重しません。DataFrame 列と Snowflake 列間のマッピングを明示的に指定する必要があります。 このマッピングを指定するには、 columnmap パラメーターを使用します。
Snowflakeに書き込まれた INTEGER
データが DECIMAL
として読み返されるのはなぜですか?
Snowflakeは、すべての INTEGER
タイプを NUMBER
として表し、Snowflakeにデータを書き込んだり、Snowflakeからデータを読み取ったりすると、データ型が変わる可能性があります。 たとえば、SnowflakeではINTEGER
とDECIMAL
は意味的に同等であるため、INTEGER
データをSnowflakeに書き込むときにDECIMAL
に変換できます( Snowflakeの数値データ型 を参照)。
Snowflakeテーブルスキーマのフィールドが常に大文字であるのはなぜですか?
Snowflakeはデフォルトで大文字のフィールドを使用するため、テーブルスキーマは大文字に変換されます。