Microsoft Azure Synapse でフェデレーション クエリを実行する
この記事では、Azure Databricks で管理されていない Azure Synapse (SQL Data Warehouse) データに対してフェデレーション クエリを実行できるように、レイクハウス フェデレーションを設定する方法について説明します。 Lakehouse フェデレーションの詳細については、「Lakehouse フェデレーションとは?」を参照してください。
レイクハウス フェデレーションを使用して Azure Synapse (SQL Data Warehouse) データベースに接続するには、Azure Databricks Unity Catalog メタストア内に以下を作成する必要があります。
- Azure Synapse (SQL Data Warehouse) データベースへの接続。
- Unity Catalog で Azure Synapse (SQL Data Warehouse) データベースをミラーリングする 外部カタログ。これにより、Unity Catalog のクエリ構文とデータ ガバナンス ツールを使って、Azure Databricks ユーザーのデータベースへのアクセスを管理できるようになります。
開始する前に
ワークスペースの要件:
- Unity Catalog を使用できるワークスペース。
コンピューティングの要件:
- コンピューティング リソースからターゲット データベース システムへのネットワーク接続。 「レイクハウス フェデレーションのためのネットワークに関する推奨事項」を参照してください。
- Azure Databricks コンピューティングでは、Databricks Runtime 13.3 LTS 以降と、共有またはシングル ユーザーのアクセス モードを使う必要があります。
- SQL ウェアハウスはプロまたはサーバーレスである必要があり、2023.40 以降を使用する必要があります。
必要なアクセス許可:
- 接続を作成するには、メタストア管理者であるか、ワークスペースにアタッチされている Unity Catalog メタストアに対する
CREATE CONNECTION
特権を持つユーザーである必要があります。 - 外部カタログを作成するには、メタストアに対する
CREATE CATALOG
権限を持ち、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG
特権を持っている必要があります。
追加の権限要件は、以下の各タスク ベースのセクションで規定されています。
接続を作成する
接続では、外部データベース システムにアクセスするためのパスと資格情報を指定します。 接続を作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで CREATE CONNECTION
SQL コマンドを使用します。
Note
Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections および Unity Catalog コマンドを参照してください。
必要な権限: メタストア管理者、または CREATE CONNECTION
特権を持つユーザー。
カタログ エクスプローラー
Azure Databricks ワークスペースで、
[カタログ] をクリックします。
[カタログ] ペインの上部にある
[追加] アイコンをクリックし、メニューから [接続の追加] を選択します。
または、[クイック アクセス] ページで、[外部データ >] ボタンをクリックし、[接続] タブに移動し、[接続の作成] をクリックします。
接続 のセットアップ ウィザードの [接続の基本] ページで、わかりやすい 接続名入力します。
SQLDW の [接続の種類] を選択します。
(省略可能) コメントを追加します。
[次へ] をクリックします。
[認証] ページで、Azure Synapse インスタンスの次の接続プロパティを入力します。
- ホスト: たとえば、
sqldws-demo.database.windows.net
。 - ポート: たとえば、
1433
- User
- パスワード
- 信頼サーバー証明書の: これは既定で選択解除されています。 選択すると、トランスポート層は SSL を使用してチャネルを暗号化し、証明書チェーンをバイパスして信頼を検証します。 信頼性の検証をバイパスする必要がある場合を除き、この設定は既定値のままにします。
- ホスト: たとえば、
[接続の作成] をクリックします。
[カタログの基本] ページで、外国カタログの名前を入力してください。 外部カタログは、外部データ システム内のデータベースをミラーリングし、Azure Databricks と Unity Catalog を使ってそのデータベース内のデータに対するクエリの実行とアクセス管理ができるようにします。
(省略可能) [接続のテスト] をクリックして、動作することを確認します。
[カタログの作成] をクリックします。
[Access] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。 [すべてのワークスペースがアクセスできる] を選択することも、[ワークスペースに割り当てる] をクリックし、ワークスペースを選択して [割り当て] をクリックすることもできます。
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。 テキスト ボックスへのプリンシパルの入力を始めた後、返された結果でプリンシパルをクリックします。
カタログに対する特権を付与します。 [許可] をクリックします。
- カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。 テキスト ボックスにプリンシパルを入力し始め、表示された結果の中からプリンシパルをクリックします。
- 各プリンシパルに付与する 特権プリセット を選択します。 既定では、すべてのアカウント ユーザーに
BROWSE
が付与されます。- ドロップダウン メニューから [データ 閲覧者 を選択して、カタログ内のオブジェクトに対する
read
権限を付与します。 - ドロップダウン メニュー データ エディター を選択して、カタログ内のオブジェクトに対する
read
権限とmodify
権限を付与します。 - 付与する特権を手動で選択します。
- ドロップダウン メニューから [データ 閲覧者 を選択して、カタログ内のオブジェクトに対する
- [許可] をクリックします。
次をクリックします。
[メタデータ] ページで、タグのキーと値のペアを指定します。 詳細については、「Unity カタログのセキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。
(省略可能) コメントを追加します。
[保存] をクリックします。
SQL
ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。
CREATE CONNECTION <connection-name> TYPE sqldw
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
資格情報などの機密性の高い値には、プレーンテキストの文字列ではなく Azure Databricks のシークレットを使用することをお勧めします。 次に例を示します。
CREATE CONNECTION <connection-name> TYPE sqldw
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
シークレットの設定については、「シークレットの管理」を参照してください。
外部カタログを作成する
Note
UI を使用してデータ ソースへの接続を作成する場合は、外部カタログの作成が含まれるので、この手順は省略できます。
外部カタログは、外部データ システム内のデータベースをミラーリングし、Azure Databricks と Unity Catalog を使ってそのデータベース内のデータに対するクエリの実行とアクセス管理ができるようにします。 外部カタログを作成するには、定義済みのデータ ソースへの接続を使用します。
外部カタログを作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは SQL クエリ エディターで CREATE FOREIGN CATALOG
SQL コマンドを使用します。
Databricks REST API または Databricks CLI を使用してカタログを作成することもできます。 POST /api/2.1/unity-catalog/catalogs および Unity Catalog コマンドを参照してください。
必要なアクセス許可: メタストアに対する CREATE CATALOG
アクセス許可と、接続の所有権または接続に対する CREATE FOREIGN CATALOG
特権。
カタログ エクスプローラー
Azure Databricks ワークスペースで、
[カタログ] をクリックしてカタログ エクスプローラーを開きます。
[カタログ] ペインの上部にある
[追加] アイコンをクリックし、メニューから [カタログの追加] を選択します。
または、[クイック アクセス] ページで、[カタログ] ボタンをクリックし、[カタログの作成] ボタンをクリックします。
「カタログを作成する」で外部カタログを作成する手順に従います。
SQL
ノートブックまたは SQL クエリ エディターで次のコマンドを実行します。 角かっこ内の項目は省略可能です。 プレースホルダー値を次のように置き換えます。
<catalog-name>
: Azure Databricks 内のカタログの名前。<connection-name>
: データ ソース、パス、アクセス資格情報を指定する接続オブジェクト。<database-name>
: Azure Databricks でカタログとしてミラーリングするデータベースの名前。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
サポートされているプッシュダウン
以下のプッシュダウンがサポートされています。
- フィルター
- プロジェクション
- 制限
- 集計 (Average、Count、Max、Min、StddevPop、StddevSamp、Sum、VarianceSamp)
- 関数 (算術と、Alias、Cast、SortOrder などのその他の関数)
- 並べ替え
以下のプッシュダウンはサポートされていません。
- 結合
- Windows 関数
データ型マッピング
Synapse/SQL Data Warehouse から Spark に読み取ると、データ型は次のようにマップされます:
Synapse 型 | Spark の型 |
---|---|
decimal、money、numeric、smallmoney | DecimalType |
smallint | ShortType |
tinyint | ByteType |
int | IntegerType |
bigint | LongType |
real | FloatType |
float | DoubleType |
char、nchar、ntext、nvarchar、text、uniqueidentifier、varchar、xml | StringType |
binary、geography、geometry、image、timestamp、udt、varbinary | BinaryType |
bit | BooleanType |
date | DateType |
datetime、datetime、smalldatetime、time | TimestampType/TimestampNTZType* |
*Synapse/SQL Data Warehouse (SQLDW) から読み取ると、datetimes
(既定値) の場合、SQLDW TimestampType
は Spark preferTimestampNTZ = false
にマップされます。 datetimes
の場合、SQLDW TimestampNTZType
は preferTimestampNTZ = true
にマップされます。