この記事では、ワークスペースの SQL ウェアハウスで使用できるデータ アクセス設定について説明します。
注意
Databricks では、Unity カタログ ボリュームまたは外部の場所を使用してクラウド オブジェクト ストレージに接続することをお勧めします。 Unity Catalog は、アカウントの複数のワークスペースにまたがってデータ アクセスを管理および監査するための中心的な場所を提供することで、データのセキュリティとガバナンスを簡素化します。 「Unity カタログとは」と「外部の場所」を参照してください。
重要
これらの設定を変更すると、実行中のすべての SQL ウェアハウスが再起動します。
要件
- これらの設定を構成するには、Azure Databricks ワークスペース管理者である必要があります。
サービス プリンシパルの構成
サービス プリンシパルを使用して Azure Data Lake Storage ストレージ アカウントへの SQL ウェアハウスへのアクセスを構成するには、次の手順に従います。
Microsoft Entra ID (旧称 Azure Active Directory) アプリケーション を登録し、次のプロパティを記録します:
- アプリケーション (クライアント) ID: Microsoft Entra ID アプリケーションを一意に識別する ID。
- ディレクトリ (テナント) ID: Microsoft Entra ID のインスタンスを一意に識別する ID (Azure Databricks ではディレクトリ (テナント) ID と呼ばれます)。
- クライアント シークレット: このアプリケーション登録用に作成されたクライアント シークレットの値。 アプリケーションは、このシークレット文字列を使用して、その ID を証明します。
お使いのストレージ アカウントで、前の手順で登録したアプリケーションのロールの割り当てを追加して、ストレージ アカウントへのアクセス権を付与します。
Azure Key Vault ベースまたは Databricks スコープのシークレット スコープを作成し、 Manage シークレット スコープを参照し、スコープ名プロパティの値を記録します。
- スコープ名: 作成されたシークレット スコープの名前。
Azure Key Vault を使用する場合は、Value フィールドの Client シークレットを使用して、Azure Key Vault にシークレットを作成します。 例については、「 手順 4: クライアント シークレットを Azure Key Vault に追加するを参照してください。 選択したシークレット名を記録しておきます。
- シークレット名: 作成された Azure Key Vault シークレットの名前。
Databricks に基づくスコープを使用している場合は、Databricks CLI を使用して新しいシークレットを作成し、それを使用して、手順 1 で取得したクライアント シークレットを格納します。 この手順で入力した秘密鍵を記録しておきます。
- 秘密鍵: 作成された Databricks に基づくシークレットのキー。
注意
必要に応じて、追加のシークレットを作成して、手順 1 で取得したクライアント ID を格納できます。
ワークスペースの上部バーでユーザー名を選択し、ドロップダウンから [設定] を選択します。
[コンピューティング] タブを選択します。
SQL ウェアハウスの横にある [管理] を選択します。
[データ アクセス構成] フィールドで、[サービス プリンシパルの追加] ボタンをクリックします。
Azure Data Lake Storage ストレージ アカウントのプロパティを構成します。
[追加] をクリックします。
[Data Access Configuration] (データ アクセス構成) テキストボックスに新しいエントリが追加されていることがわかります。
[保存] をクリックします。
[Data Access Configuration] (データ アクセス構成) テキストボックスのエントリを直接編集することもできます。
SQL ウェアハウスのデータ アクセス プロパティを構成する
データ アクセス プロパティを使用してすべてのウェアハウスを構成するには、次のようにします。
ワークスペースの上部バーでユーザー名を選択し、ドロップダウンから [設定] を選択します。
[コンピューティング] タブを選択します。
SQL ウェアハウスの横にある [管理] を選択します。
[データアクセス構成] ボックスで、メタストア プロパティを含むキーと値のペアを指定します。
重要
Spark にシークレット値を公開せずに、Spark の構成プロパティをシークレットの値に設定するには、値を
{{secrets/<secret-scope>/<secret-name>}}
に設定します。<secret-scope>
をシークレットのスコープに、<secret-name>
をシークレットの名前に置き換えます。 値は{{secrets/
で始まり、}}
で終わる必要があります。 この構文の詳細については、「 Manage シークレット」を参照してください。[保存] をクリックします。
Databricks Terraform プロバイダー と databricks_sql_global_config を使用して、データ アクセス プロパティを構成することもできます。
サポートされているプロパティ
*
で終わるエントリの場合、そのプレフィックス内のすべてのプロパティがサポートされます。たとえば、
spark.sql.hive.metastore.*
は、spark.sql.hive.metastore.jars
とspark.sql.hive.metastore.version
の両方のほかに、spark.sql.hive.metastore
で始まる他のプロパティもサポートされていることを示します。値に機密情報が含まれるプロパティの場合、機密情報を シークレット に格納し、プロパティの値をシークレット名に設定するには、次の構文を使用します:
secrets/<secret-scope>/<secret-name>
。
SQL ウェアハウスでは、次のプロパティがサポートされます。
spark.sql.hive.metastore.*
spark.sql.warehouse.dir
spark.hadoop.datanucleus.*
spark.hadoop.fs.*
spark.hadoop.hive.*
spark.hadoop.javax.jdo.option.*
spark.hive.*
これらのプロパティの設定方法の詳細については、「外部 Apache Hive メタストア」を参照してください。