MySQL でフェデレーテッド クエリを実行する
この記事では、 によって管理されていない データに対してフェデレーション クエリを実行するためにレイクハウスフェデレーションをセットアップする方法について説明します。MySQLDatabricksレイクハウスフェデレーションの詳細については、 「レイクハウスフェデレーションとは何ですか?」を参照してください。 。
レイクハウスフェデレーションを使用して MySQL データベースに接続するには、Databricks Unity Catalog メタストアに以下を作成する必要があります。
MySQL データベース への接続 。
Unity Catalog で MySQL データベースをミラーリングする フォーリンカタログ で、クエリー 構文 Unity Catalog データガバナンス ツールを使用してデータベースへの Databricks ユーザー アクセスを管理できます。
始める前に
ワークスペースの要件:
ワークスペースで Unity Catalogが有効になっています。
コンピュート 要件:
コンピュート・リソースからターゲット・データベース・システムへのネットワーク接続。 「レイクハウスフェデレーションのネットワーキングに関する推奨事項」を参照してください。
Databricks コンピュートは、Databricks Runtime 13.3 LTS 以上、および共有またはシングル ユーザー アクセス モードを使用する必要があります。
SQLウェアハウスはProまたはServerlessで、2023.40以上を使用している必要があります。
必要な権限:
接続を作成するには、メタストア管理者であるか、ワークスペースにアタッチされている Unity Catalog メタストアに対する
CREATE CONNECTION
権限を持つユーザーである必要があります。フォーリンカタログを作成するには、メタストアに対する
CREATE CATALOG
権限を持ち、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG
権限を持っている必要があります。
追加のアクセス許可要件は、以降の各タスクベースのセクションで指定されています。
接続を作成する
接続では、外部データベース システムにアクセスするためのパスと資格情報を指定します。 接続を作成するには、カタログ エクスプローラーを使用するか、Databricks ノートブックまたは Databricks SQL クエリー エディターで CREATE CONNECTION
SQL コマンドを使用できます。
注:
Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections を参照してください。 および Unity Catalog コマンド。
必要な権限: メタストア管理者または CREATE CONNECTION
権限を持つユーザー。
Databricks ワークスペースで、[ カタログ] をクリックします 。
[ カタログ ] ウィンドウの上部にある [ 追加 ] アイコンをクリックし、メニューから [ 接続の追加 ] を選択します。
または、クイック アクセスページで[外部データ >]ボタンをクリックし、 [接続]タブに移動して[接続の作成] をクリックします。
わかりやすい 接続名を入力します。
[ 接続の種類 ] として [MySQL] を選択します。
MySQL インスタンスの次の接続プロパティを入力します。
ホスト: たとえば、
mysql-demo.lb123.us-west-2.rds.amazonaws.com
ポート: たとえば、
3306
ユーザー: たとえば、
mysql_user
パスワード: たとえば、
password123
(オプション)[ 接続のテスト ] をクリックして、動作することを確認します。
(オプション)コメントを追加します。
[作成]をクリックします。
ノートブックまたは Databricks SQL クエリー エディターで次のコマンドを実行します。
CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
資格情報などの機密性の高い値には、プレーンテキスト文字列の代わりに 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 コマンドでプレーンテキスト文字列を使用する必要がある場合は、 $
などの特殊文字を\
でエスケープして、文字列が切り捨てられるのを避けてください。 たとえば、 \$
です。
シークレットの設定に関する情報については、「 シークレット管理」を参照してください。
フォーリンカタログの作成
フォーリンカタログは、外部データ システム内のデータベースをミラーリングするため、Databricks と Unity Catalogを使用して、そのデータベース内のデータへのアクセスを管理できます。 フォーリンカタログを作成するには、すでに定義されている DATA への接続を使用します。
フォーリンカタログを作成するには、カタログ エクスプローラーを使用するか、Databricks ノートブックまたは 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
特権。
Databricks ワークスペースで、[カタログ]をクリックしてカタログ・エクスプローラーを開きます。
[ カタログ ] ウィンドウの上部にある [ 追加 ] アイコンをクリックし、メニューから [ カタログの追加 ] を選択します。
または、[ クイック アクセス ] ページで [ カタログ ] ボタンをクリックし、[ カタログの作成 ] ボタンをクリックします。
「カタログの作成」のフォーリンカタログの作成手順に従ってください。
ノートブックまたは Databricks SQL エディターで次の SQL コマンドを実行します。 括弧内の項目はオプションです。 プレースホルダー値を置き換えます。
<catalog-name>
: Databricksのカタログの名前。<connection-name>
: データソース、パス、およびアクセス資格情報を指定する 接続オブジェクト 。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>;
サポートされているプッシュダウン
次のプッシュダウンは、すべてのコンピュートでサポートされています。
フィルター
予測
極限
関数: 部分的、フィルター式のみ。 (文字列関数、数学関数、日付、時刻、タイムスタンプ関数、および Alias、Cast、SortOrder などのその他のさまざまな関数)
次のプッシュダウンは、Databricks Runtime 13.3 LTS 以降および SQL ウェアハウスでサポートされています。
集計
Boolean演算子
次の数学関数 (ANSI が無効になっている場合はサポートされません): +、-、*、%、/
制限付きで使用する場合の並べ替え
次のプッシュダウンはサポートされていません。
結合
Windows の機能
データ型マッピング
MySQL から Spark に読み込む場合、データ型は次のようにマップされます。
MySQL タイプ |
Spark タイプ |
---|---|
bigint (signedでない場合)、10 進数 |
DecimalType |
tinyint*, int, integer, mediumint, smallint |
IntegerType |
bigint(signed) |
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
と tinyint(1) unsigned
はブール値として扱われ、 BooleanType
に変換されます。 MySQL ドキュメントの Connector/J リファレンス を参照してください。
** MySQL から読み取ると、MySQL Timestamp
は Spark TimestampType
( preferTimestampNTZ = false
の場合) にマップされます (デフォルト)。 MySQL Timestamp
は、preferTimestampNTZ = true
の場合TimestampNTZType
にマップされます。