DatabricksでのSpark用Snowflakeの構成¶
Databricksバージョン4.2のネイティブSnowflakeコネクターを使用すると、DatabricksアカウントでライブラリをインポートせずにSnowflakeとの間でデータを読み書きできます。Databricksの古いバージョンでは、SparkコネクターのライブラリをDatabricksクラスターにインポートする必要がありました。
コネクターは、ユーザーが各システムで実行する処理の部分を指定する必要なく、SparkとSnowflakeに処理を自動的に分散します。クエリは、Snowflakeの自動クエリプッシュダウン最適化の恩恵も受けます。
このトピックの内容:
前提条件¶
Databricksアカウントがあり、Databricks Runtimeバージョン4.2以降を使用している必要があります。追加条件:
DatabricksシークレットマネージャーでSnowflakeユーザーログイン名とパスワードを既に設定している必要があります。
dbutils.secrets.get(...)
を呼び出してログインとパスワードを読み取ります。Databricksシークレットマネージャーの詳細については、https://docs.databricks.com/user-guide/secrets/index.htmlをご参照ください。
Snowflakeアカウントが必要です。このアカウントから読み書きを行うには、次の情報が必要です。
Snowflakeアカウント用の URL。
アカウントに接続するユーザーのログイン名とパスワード。
接続後にセッションに使用するデフォルトのデータベースとスキーマ。
接続後にセッションに使用するデフォルトの仮想ウェアハウス。
接続で使用されるロールには、Databricksを介して読み書きを行うテーブルを含むスキーマに対する USAGE および CREATE STAGE 権限が必要です。
Databricks Snowflakeコネクタードキュメントへのアクセス¶
Databricks Snowflakeコネクターの主要なドキュメントは、Databricksウェブサイトで入手できます。ドキュメントには、ScalaまたはPythonノートブックがSparkからSnowflakeにデータを送信したり、SparkからSnowflakeにデータを送信するために使用するコマンドを示す例が含まれています。
詳細については、 データソース--- Snowflake をご参照ください。
長時間実行クエリ用の外部ロケーションの準備¶
一部のジョブが36時間を超える場合は、SnowflakeとSpark間のデータ交換に使用する外部の場所を準備することを検討します。詳細については、 「ファイル用の外部の場所の準備」をご参照ください。
Databricksのクエリプッシュダウン¶
Sparkクエリは、Snowflakeの自動クエリプッシュダウン最適化の恩恵を受けることで、パフォーマンスが向上します。デフォルトでは、SnowflakeクエリプッシュダウンはDatabricksで有効化されています。
クエリプッシュダウンの詳細については、 Sparkクエリ処理をSnowflake にプッシュする (Snowflakeブログ)をご参照ください。