Run queries using Lakehouse Federation | Databricks on AWS [2023/7/21時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
プレビュー
本機能はパブリックプレビューです。
本書では、複数の外部データソースに対してクエリーを実行するためにDatabricksを活用できるようにするクエリーフェデレーションプラットフォームであるレイクハウスフェデレーションを紹介します。また、お使いのUnity Catalogメタストアでどのようにレイクハウスフェデレーションの接続をセットアップし、どのように外部テーブルを作成するのかを説明します。
レイクハウスフェデレーションとは?
レイクハウスフェデレーションは、Databricksにおけるクエリーフェデレーションプラットフォームです。クエリーフェデレーションという用語は、すべてのデータを統合システムに移行する必要なしに、ユーザーやシステムが複数のデータソースに対してクエリーを実行できるようにする機能のコレクションを意味します。
Databricksでは、クエリーフェデレーションの管理にUnity Catalogを活用します。Pro SQLウェアハウス、サーバレスSQLウェアハウス、Databricksランタイムクラスターに含まれているドライバーを用いて、著名なデータベースソリューションに対する読み取り専用の接続を設定することができます。Unity Catalogのデータガバナンスツールやデータリネージツールは、Databricksワークスペースでユーザーによって実行されたすべての統合クエリーに対して、データアクセスが管理され、監査されることを確実にします。
なぜレイクハウスフェデレーションを使うのか?
レイクハウスは、データの冗長性や分断を削減するために集中管理されたストレージを重要視しますが、皆様の企業においては数多くのデータシステムがプロダクションにあり、多くの理由から接続されたシステムにあるデータにクエリーを行いたいと考えるかもしれません:
- アドホックのレポート。
- POCの取り組み。
- 新規のETLパイプラインやレポートにおける探索フェーズ。
- インクリメンタルな移行におけるサークロードのサポート。
これらのシナリオのそれぞれにおいて、クエリーフェデレーションによってその場でクエリーを行い、複雑で時間を要するETL処理を回避することができるので、皆様は迅速に洞察を得られるようになります。
簡単に言えば、レイクハウスフェデレーションは以下のようなユースケースを想定しています:
- Databricksにデータを取り込みたくない。
- 外部データベースシステムの計算資源を活用してクエリーを実行したい。
- きめ細かいアクセスコントロール、データリネージ、検索のようなUnity Catalogのインタフェースやデータガバナンスを活用したい。
このセクションでは、外部データシステムのデータにアクセスするための他のDatabricksツールとレイクハウスフェデレーションを比較します。
レイクハウスフェデレーション vs. Delta Sharing
Delta Sharingはデータファイルを直接共有できる際には優れているものと言えます。レイクハウスフェデレーションは、直接の共有ができない際に外部システムの計算資源にアクセスできるようにします。
レイクハウスフェデレーション vs. Unity Catalo外部テーブル
Amazon S3やGoogle Cloud Storage、Azure Data Lake Storage Gen2のようなシンプルなファイルシステムから直接アクセスできるデータに関しては、Unity Cataloで外部テーブルを作成すべきです。しかし、複雑なクエリーを実行する必要がある、あるいは、外部データベースシステムの計算資源にアクセスししたい場合にはレイクハウスフェデレーションを使うべきです。
レイクハウスフェデレーション vs. レガシーなクエリーフェデレーション
Set up query federation for non-Unity-Catalog workspacesやDatabricksにおける外部データの取り扱いに記載されているようなレガシーなクエリーフェデレーションの設定では、Databricksでカタログとしてデータベース全体を利用できるようにするのではなく、個々のテーブルごとに接続を設定しなくてはなりません。これらは、レイクハウスフェデレーションのUnity Catalogによるデータガバナンスツールや、データベース全体を取り込む能力を提供しません。そして、これらはレイクハウスフェデレーションのクエリープッシュダウンやパフォーマンス機能を提供しません。
しかし、Unity Catalogを使っていない、あるいはユーザー名やパスワード以外の認証方法を用いている場合には、レガシーなクエリーフェデレーションがベストな選択肢となるかもしれません。
現在のクエリーフェデレーションの設定をレイクハウスフェデレーションに移行したいのであれば、Migrate legacy query federation connections to Lakehouse Federationをご覧ください。
レイクハウスフェデレーションのセットアップの概要
レイクハウスフェデレーションを用いて、データセットを読み取り専用でクエリーできるようにするには、以下を作成します:
- 接続、これは外部データベースシステムにアクセスするためのパスと資格情報を指定するUnity Catalogにおけるセキュリティ保護可能なオブジェクトです。
- 外部カタログ、これは外部データシステムのデータベースをミラーリングするUnity Catalogにおけるセキュリティ保護可能オブジェクトであり、Unity Catalogを用いてアクセスを管理して、お使いのDatabricksワークスペースのデータシステムで読み取り専用のクエリーを実行できるようになります。
サポートされるデータソース
レイクハウスフェデレーションは以下のデータベースタイプに対する接続をサポートしています:
- MySQL
- PostgreSQL
- Amazon Redshift
- Snowflake
- Microsoft SQL Server
- Azure SQL Data Warehouse (SQLDW)
- Databricks
始める前に
ワークスペースの要件:
- ワークスペースでUnity Catalogが有効化されている。
計算資源の要件:
- お使いのDatabricksランタイムクラスターやSQLウェアハウスからターゲットのデータベースシステムへのネットワーク接続が確立されている。Networking recommendations for Lakehouse Federationをご覧ください。
- Databricksクラスターでは、Databricksランタイム13.1以降と共有クラスターアクセスモードを使用していること。
- SQLウェアハウスはProあるいはサーバレスであること。
権限の要件:
- 接続を作成するには、メタストア管理者であるか、ワークスペースにアタッチされているUnity Catalogメタストアに対する
CREATE CONNECTION
権限が付与されているユーザーである必要があります。 - 外部カタログを作成するには、メタストアに対する
CREATE CATALOG
権限を持っているか、接続のオーナーあるいは接続に対してCREATE FOREIGN CATALOG
権限を持っている必要があります。
以降のタスクベースのセクションで、その他に必要な権限が指定されています。
接続の作成
接続では、外部データベースシステムにアクセスするためのパスや資格情報を指定します。接続を作成するには、データエクスプローラ、あるいはDatabricksノートブックやDatabricks SQLのクエリーエディタでCREATE CONNECTION
SQLコマンドを使用することができます。
必要な権限: メタストア管理者あるいはCREATE CONNECTION
権限を持つユーザー。
データエクスプローラ
-
左のペーンでExternal Dataメニューを展開してConnectionsを選択します。
-
Create connectionをクリックします。
-
わかりやすいConnection nameをクリックします。
-
Connection type (MySQLやPostgreSQLのようなデータベースプロバイダー)を選択します。
-
(ホスト情報、パス、アクセス資格情報のような)接続プロパティを入力します。
それぞれの接続タイプでは、異なる接続情報が必要となります。お使いの接続タイプに関するマニュアルをご覧ください。
-
(オプション)動作を確認するためにTest connectionをクリックします。
-
(オプション)コメントを入力します。
-
Createをクリックします。
SQL
ノートブックあるいはDatabricks SQLのクエリーエディタで以下のコマンドを実行します。この例は、PostgreSQLデータベースに対する接続となっています。オプションは接続タイプごとに異なります。お使いの接続タイプに関するマニュアルをご覧ください。
CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
資格情報のようなセンシティブな値は平文ではなく、Databricksシークレットを使うことをお勧めします。
CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
既存の接続の管理に関しては、Manage connections for Lakehouse Federationをご覧ください。
外部カタログの作成
外部カタログは、DatabricksとUnity Catalogを用いて外部データベースにクエリーを実行したり、アクセスを管理できるように、外部データシステムのデータベースをミラーリングします。外部カタログを作成するには、定義済みのデータソースへの接続を使用します。
外部カタログを作成するには、データエクスプローラ、あるいはDatabricksノートブックやDatabricks SQLのクエリーエディタでCREATE FOREIGN CATALOG
SQLコマンドを使用することができます。
必要な権限: メタストアにおけるCREATE CATALOG
権限を持ち、接続の所有者であるか、接続に対してCREATE FOREIGN CATALOG
権限を持つユーザー。
データエクスプローラ
-
Create Catalogボタンをクリックします。
-
Create a new catalogダイアログで、カタログ名を入力し、ForeignのTypeを選択します。
-
Unity Catalogのカタログとしてミラーしたいデータベースへのアクセスを提供するConnectionを選択します。
-
カタログとしてミラーしたいDatabaseの名前を入力します。
データソースによって要件は異なります:
- MySQLでは2階層の名前空間を使用するので、データベース名は不要です。
- 他のDatabricksワークスペースのカタログに対する接続では、データベース名ではなくDatabricksのCatalog名を入力します。
-
Createをクリックします。
SQL
以下のSQLコマンドをノートブックかDatabricks SQLのエディタで実行します。ブラケットのアイテムはオプションです。プレースホルダーの値を置き換えてください:
-
<catalog-name>
: Databricksにおけるカタログの名称。 -
<connection-name>
: データソース、パス、アクセス資格情報を指定する接続オブジェクト。 -
<database-name>
: Databricksのカタログとしてミラーしたいデータベース名。2階層の名前空間を使用するMySQLでは不要です。 -
<external-catalog-name>
: Databricks-to-Databricksのみ。ミラーリングする外部Databricksワークスペースのカタログ名。Create a foreign catalogをご覧ください。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database `<database-name>`);
外部カタログの管理と操作に関しては、Manage and work with foreign catalogsをご覧ください。
制限
-
このリリースでは、クエリーは読み取り専用です。
-
接続のスロットリングは、Databricks SQLの同時実行クエリー制限によって決定されます。接続あたりのウェアハウス数には制限はありません。
-
プッシュダウンのカバー範囲は、このリリースにおいて制限がある場合があります。サポートされるプッシュダウンのリストは、それぞれの接続タイプのセットアップマニュアルを参照ください。
-
接続タイプ: Databricksでは追加の接続タイプに取り組んでいます。
間も無く追加される接続タイプに関して知りたい場合、接続タイプのリクエストを行いたい場合には、Databricksにコンタクトしてください。
-
サーバレスSQLウェアハウスにおけるPrivate Linkと静的IPレンジのサポートは、このリリースでは利用できません。サポート計画に関しては、Databricksにコンタクトしてください。
-
このリリースではOauthはサポートされません。サポート計画に関しては、Databricksにコンタクトしてください。
-
外部スキーマや外部テーブルを直接作成することはできません。サポート計画に関しては、Databricksにコンタクトしてください。
-
MySQLコネクターは、このリリースではケースセンシティブテーブルをサポートしません。すべてのテーブル名はUnity Catalogで小文字に変換されるので、検索の際には小文字の名称を使わなくてはならないことを意味します。サポート計画に関しては、Databricksにコンタクトしてください。
-
Unity Catalogにおいて不正なテーブル名、スキーマ名はサポートされず、外部カタログ作成時にUnity Catalogによって無視されます。名前付けのルールの一覧や制限については、Limitationsをご覧ください。