次の方法で共有


MySQL でフェデレーション クエリを実行する

重要

この機能はパブリック プレビュー段階にあります。

この記事では、Azure Databricks で管理されていない MySQL データに対してフェデレーション クエリを実行できるように、レイクハウス フェデレーションを設定する方法について説明します。 Lakehouse フェデレーションの詳細については、「Lakehouse フェデレーションとは」を参照してください。

レイクハウス フェデレーションを使ってお使いの MySQL データベースに接続するには、Azure Databricks の Unity Catalog メタストアで以下を作成する必要があります。

  • MySQL データベースへの "接続"。
  • Unity Catalog で MySQL データベースをミラーリングする "外部カタログ"。これにより、Unity Catalog のクエリ構文とデータ ガバナンス ツールを使って、Azure Databricks ユーザーのデータベースへのアクセスを管理できるようになります。

開始する前に

ワークスペースの要件:

  • Unity Catalog を使用できるワークスペース。

コンピューティングの要件:

  • Databricks Runtime クラスターまたは SQL ウェアハウスから対象となる データベース システムに接続するためのネットワーク接続。 「レイクハウス フェデレーションのためのネットワークに関する推奨事項」を参照してください。
  • Azure Databricks クラスターでは、Databricks Runtime 13.3 LTS 以降、および共有またはシングルユーザー アクセス モードを使用する必要があります。
  • SQL ウェアハウスは、Pro またはサーバーレスである必要があります。

必要なアクセス許可:

  • 接続を作成するには、メタストア管理者であるか、ワークスペースにアタッチされている Unity Catalog メタストアに対する CREATE CONNECTION 特権を持つユーザーである必要があります。
  • 外部カタログを作成するには、メタストアに対する CREATE CATALOG 権限を持ち、接続の所有者であるか、接続に対する CREATE FOREIGN CATALOG 特権を持っている必要があります。

追加の権限要件は、以下の各タスク ベースのセクションで規定されています。

接続を作成する

接続では、外部データベース システムにアクセスするためのパスと資格情報を指定します。 接続を作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで CREATE CONNECTION SQL コマンドを使用します。

必要な権限: メタストア管理者、または CREATE CONNECTION 特権を持つユーザー。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、カタログ アイコンカタログ をクリックします。
  2. 左側のペインで [外部データ] メニューを展開し、[接続] を選択します。
  3. [接続の作成] をクリックします。
  4. わかりやすい接続名を入力します。
  5. MySQL の [接続の種類] を選択します。
  6. MySQL インスタンスの接続プロパティを以下のように入力します。
    • ホスト: たとえば、mysql-demo.lb123.us-west-2.rds.amazonaws.com
    • ポート: たとえば、3306
    • ユーザー: たとえば、mysql_user
    • パスワード: たとえば、password123
  7. (省略可能) [接続のテスト] をクリックして、動作することを確認します。
  8. (省略可能) コメントを追加します。
  9. Create をクリックしてください。

Sql

ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。

CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

資格情報などの機密性の高い値には、プレーンテキストの文字列ではなく Azure Databricks のシークレットを使用することをお勧めします。 次に例を示します。

CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

ノートブック SQL コマンドでプレーンテキスト文字列を使用する必要がある場合は、\$ などの特殊文字をエスケープして文字列を切り捨てないようにします。 (例: \$)。

シークレットの設定については、「シークレットの管理」を参照してください。

外部カタログを作成する

外部カタログは、外部データ システム内のデータベースをミラーリングし、Azure Databricks と Unity Catalog を使ってそのデータベース内のデータに対するクエリの実行とアクセス管理ができるようにします。 外部カタログを作成するには、定義済みのデータ ソースへの接続を使用します。

外部カタログを作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで CREATE FOREIGN CATALOG SQL コマンドを使用します。

必要な権限:CREATE CATALOG メタストアに対するアクセス許可と、接続の所有権または接続に対する CREATE FOREIGN CATALOG 特権。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、カタログ アイコンカタログ をクリックします。
  2. [カタログの作成] ボタンをクリックします。
  3. [新しいカタログの作成] ダイアログで、カタログの名前を入力し、[外部][種類] を選択 します。
  4. Unity Catalog のカタログとしてミラーリングするデータベースへのアクセスを提供する接続を選択します。
  5. [Create (作成)] をクリックします。

Sql

ノートブックまたは Databricks SQL エディターで次の SQL コマンドを実行します。 角かっこ内の項目は省略可能です。 プレースホルダー値を次のように置き換えます。

  • <catalog-name>: Azure Databricks 内のカタログの名前。
  • <connection-name>: データ ソース、パス、アクセス資格情報を指定する接続オブジェクト
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>;

サポートされているプッシュダウン

すべてのコンピューティングで以下のプッシュダウンがサポートされています:

  • フィルター
  • プロジェクション
  • 制限
  • 関数: 部分的。フィルター式の場合のみ。 (文字列関数、数学関数、データ関数、時刻関数、タイムスタンプ関数、その他 Alias、Cast、SortOrder などの関数)

Databricks Runtime 13.3 LTS 以上および SQL ウェアハウスでは、以下のプッシュダウンがサポートされています。

  • 集計
  • ブール演算子
  • 次の数学関数 (ANSI が無効な場合はサポートされません): +、-、*、%、/
  • 制限付きで使用した場合の並べ替え

以下のプッシュダウンはサポートされていません。

  • 結合
  • Windows 関数

データ型マッピング

MySQL から Spark に読み取ると、データ型は次のようにマップされます。

MySQL の型 Spark の型
bigint (署名されていない場合)、decimal DecimalType
tinyint*、int、integer、mediumint、smallint IntegerType
bigint (署名されている場合) LongType
float FloatType
double DoubleType
char、enum、set CharType
varchar VarcharType
json、longtext、mediumtext、text、tinytext StringType
binary、blob、varbinary、varchar binary BinaryType
bit、boolean BooleanType
date、year DateType
datetime、time、timestamp** TimestampType/TimestampNTZType

tinyint(1) signed はブール値として扱われ、BooleanType に変換されます。 「コネクタ/J リファレンス * MySQL から読み取ると、preferTimestampNTZ = false (既定値) の場合、MySQL Timestamp は Spark TimestampType にマップされます。」を参照してください。 MySQL の Timestamp は、preferTimestampNTZ = true の場合、TimestampNTZType にマップされます。