この記事では、Azure Databricks で管理されていない PostgreSQL データに対してフェデレーション クエリを実行できるように、レイクハウス フェデレーションを設定する方法について説明します。 Lakehouse フェデレーションの詳細については、「Lakehouse フェデレーションとは?」を参照してください。
レイクハウス フェデレーションを使って PostgreSQL データベースに対する自分のクエリの実行に接続するには、Azure Databricks の Unity Catalog メタストアで以下を作成する必要があります。
- PostgreSQL データベースへの "接続"。
- Unity Catalog で PostgreSQL データベースをミラーリングする "外部カタログ"。これにより、Unity Catalog のクエリ構文とデータ ガバナンス ツールを使って、Azure Databricks ユーザーのデータベースへのアクセスを管理できるようになります。
ワークスペースの要件:
- Unity Catalog を使用できるワークスペース。
コンピューティングの要件:
- Databricks Runtime クラスターまたは SQL ウェアハウスから対象となる データベース システムに接続するためのネットワーク接続。 「レイクハウス フェデレーションのためのネットワークに関する推奨事項」を参照してください。
- Azure Databricks クラスターでは、Databricks Runtime 13.3 LTS 以降と共有またはシングル ユーザー アクセス モードを使用する必要があります。
- SQL ウェアハウスは Pro またはサーバーレスである必要があり、かつ 2023.40 以上を使用する必要があります。
必要なアクセス許可:
- 接続を作成するには、メタストア管理者であるか、ワークスペースにアタッチされている Unity Catalog メタストアに対する
CREATE CONNECTION
特権を持つユーザーである必要があります。
- 外部カタログを作成するには、メタストアに対する
CREATE CATALOG
権限を持ち、接続の所有者であるか、接続に対する CREATE FOREIGN CATALOG
特権を持っている必要があります。
追加の権限要件は、以下の各タスク ベースのセクションで規定されています。
接続では、外部データベース システムにアクセスするためのパスと資格情報を指定します。 接続を作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで CREATE CONNECTION
SQL コマンドを使用します。
必要な権限: メタストア管理者、または CREATE CONNECTION
特権を持つユーザー。
Azure Databricks ワークスペースで、
[カタログ] をクリックします。
[カタログ] ペインの上部にある
[追加] アイコンをクリックし、メニューから [接続の追加] を選択します。
または、[クイック アクセス] ページで、[外部データ >] ボタンをクリックし、[接続] タブに移動し、[接続の作成] をクリックします。
わかりやすい接続名を入力します。
PostgreSQL の [接続の種類] を選択します。
PostgreSQL インスタンスの接続プロパティを以下のように入力します。
- ホスト: たとえば、
postgres-demo.lb123.us-west-2.rds.amazonaws.com
- ポート: たとえば、
5432
- ユーザー: たとえば、
postgres_user
- パスワード: たとえば、
password123
(省略可能) [接続のテスト] をクリックして、動作することを確認します。
(省略可能) コメントを追加します。
Create をクリックしてください。
ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。
CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
資格情報などの機密性の高い値には、プレーンテキストの文字列ではなく Azure 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>')
)
シークレットの設定については、「シークレットの管理」を参照してください。
外部カタログは、外部データ システム内のデータベースをミラーリングし、Azure Databricks と Unity Catalog を使ってそのデータベース内のデータに対するクエリの実行とアクセス管理ができるようにします。 外部カタログを作成するには、定義済みのデータ ソースへの接続を使用します。
外部カタログを作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは SQL クエリ エディターで CREATE FOREIGN CATALOG
SQL コマンドを使用します。
必要なアクセス許可: メタストアに対する CREATE CATALOG
アクセス許可と、接続の所有権または接続に対する CREATE FOREIGN CATALOG
特権。
Azure Databricks ワークスペースで、
[カタログ] をクリックしてカタログ エクスプローラーを開きます。
[カタログ] ペインの上部にある
[追加] アイコンをクリックし、メニューから [カタログの追加] を選択します。
または、[クイック アクセス] ページで、[カタログ] ボタンをクリックし、[カタログの作成] ボタンをクリックします。
「カタログを作成する」で外部カタログを作成する手順に従います。
ノートブックまたは 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>');
すべてのコンピューティングで以下のプッシュダウンがサポートされています:
- フィルター
- プロジェクション
- 制限
- 関数: 部分的。フィルター式の場合のみ。 (文字列関数、数学関数、エイリアス、キャスト、SortOrder などのその他の関数)
Databricks Runtime 13.3 LTS 以上および SQL ウェアハウスでは、以下のプッシュダウンがサポートされています。
- 次の集計関数: MIN、MAX、COUNT、SUM、AVG、VAR_POP、VAR_SAMP、STDDEV_POP、STDDEV_SAMP、GREATEST、LEAST、COVAR_POP、COVAR_SAMP、CORR、REGR_INTERCEPT、REGR_R2、REGR_SLOPE、REGR_SXY
- 次のブール関数: =、<、<、=>、>=、<=>
- 次の数学関数 (ANSI が無効な場合はサポートされません): +、-、*、%、/
- その他の演算子 | と ~
- 制限付きで使用した場合の並べ替え
以下のプッシュダウンはサポートされていません。
PostgreSQL から Spark に読み取ると、データ型は以下のようにマップされます。
PostgreSQL の型 |
Spark の型 |
numeric |
DecimalType |
int2 |
ShortType |
int4 (署名されていない場合) |
IntegerType |
int8、oid、xid、int4 (署名されている場合) |
LongType |
float4 |
FloatType |
double precision、 float8 |
DoubleType |
char |
CharType |
name、varchar、tid |
VarcharType |
bpchar、character varying、json、money、point、super、text |
StringType |
bytea、geometry、varbyte |
BinaryType |
bit、bool |
BooleanType |
date |
DateType |
tabstime、time、time with time zone、timetz、time without time zone、timestamp with time zone、timestamp、timestamptz、timestamp without time zone* |
TimestampType/TimestampNTZType |
Postgresql 配列型** |
ArrayType |
* Postgresql から読み取ると、preferTimestampNTZ = false
の場合 (既定値)、Postgresql のTimestamp
は Spark の TimestampType
にマップされます。 Postgresql の Timestamp
は、preferTimestampNTZ = true
の場合、TimestampNTZType
にマップされます。
**一部の配列型がサポートされています。