Lakebase のデータをPowerShell でMySQL にレプリケーションする方法
CData Cmdlets for Lakebase を使えば、PowerShell からLakebase のデータ データにリアルタイムで連携できます。データ同期などのタスクの連携にぴったりの製品です。 本記事では、PowerShell からCData Cmdlets for Lakebase およびCData Cmdlets for MySQL を使って、同期スクリプトを作成して実行します。
まずは、PowerShell でLakebase への接続を行います。レプリケーションは4つのステップがあります。
Databricks Lakebase に接続するには、以下のプロパティを設定します。
- DatabricksInstance: Databricks インスタンスまたはサーバーホスト名を指定します。形式は instance-abcdef12-3456-7890-abcd-abcdef123456.database.cloud.databricks.com です。
- Server: Lakebase データベースをホストするサーバーのホスト名または IP アドレスを指定します。
- Port(オプション): Lakebase データベースをホストするサーバーのポート番号を指定します。デフォルトは 5432 です。
- Database(オプション): Lakebase サーバーへの認証後に接続するデータベースを指定します。デフォルトでは認証ユーザーのデフォルトデータベースに接続します。
OAuth クライアント認証
OAuth クライアント資格情報を使用して認証するには、サービスプリンシパルで OAuth クライアントを構成します。手順の概要は以下のとおりです。
- 新しいサービスプリンシパルを作成・構成する
- サービスプリンシパルに権限を割り当てる
- サービスプリンシパル用の OAuth シークレットを作成する
詳細については、ヘルプドキュメントの「Setting Up OAuthClient Authentication」セクションをご参照ください。
OAuth PKCE 認証
PKCE(Proof Key for Code Exchange)を使用した OAuth code タイプで認証するには、以下のプロパティを設定します。
- AuthScheme: OAuthPKCE を指定します。
- User: 認証ユーザーのユーザー ID を指定します。
詳細については、ヘルプドキュメントをご参照ください。
Lakebase のデータの取得
-
モジュールのインストール:
Install-Module LakebaseCmdlets
-
Lakebase への接続:
$lakebase = Connect-Lakebase -DatabricksInstance $DatabricksInstance -Server $Server -Port $Port -Database $Database
-
取得ターゲットのリソースの取得:
$data = Select-Lakebase -Connection $lakebase -Table "Orders"
Invoke-Lakebase cmdlet を使って、SQL-92 クエリを使用することもできます:
$data = Invoke-Lakebase -Connection $lakebase -Query 'SELECT * FROM Orders WHERE ShipCountry = @ShipCountry' -Params @{'@ShipCountry'='USA'} -
戻り値からカラム名のリストを保存します。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name
Lakebase のデータをMySQL データベースにレプリケーション
カラム名を指定できるようにして、データをMySQL データベースにレプリケーションします。
-
モジュールのインストール:
Install-Module MySQLCmdlets
-
MySQL DB に、MySQL Server 名、ユーザー、パスワード、レプリケーション先のデータベース名を指定して、接続します:
$mysql = Connect-MySQL -User $User -Password $Password -Database $Database -Server $Server -Port $Port
-
Lakebase、保存された値、そしてAdd-MySQL Cmdlet を使って、MySQL にデータを1レコードずつ挿入します。この例では、MySQL 側のテーブルは、Lakebase のリソース(Orders)と同じテーブル名を持っている必要があります。
$data | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "Orders" -Columns $columns -Values $values }
次回以降のレプリケーションをシンプルに実現
-
一度PowerShell でLakebase とMySQL に接続したら、次からは1行のコマンドでレプリケーションを実施できます:
Select-Lakebase -Connection $lakebase -Table "Orders" | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "Orders" -Columns $columns -Values $values } -
別のPowerShell モジュールで、Lakebase を別のデータベースに複製する場合、Select-Lakebase cmdlet のデータから、カラム、接続およびテーブルを除外しておきましょう。これらのデータはデータ移動のときだけ必要となるためです。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name | ? {$_ -NotIn @('Columns','Connection','Table')}
おわりに
これで、Lakebase のデータをMySQL に複製できました。分析、BI などでLakebase のデータをMySQL から使うことができるようになります。