PowerShell でシンプルなスクリプトを記述し、JSON services をMySQL データベースにレプリケーション(複製)。
CData Cmdlets for JSON をつかって、PowerShell からリアルタイムJSON services に連携できます。データ同期などのタスクの連携にぴったりの製品です。 本記事では、PowerShell からCData Cmdlets for JSON およびCData Cmdlets for MySQL を使って、同期スクリプトを作成して実行します。
まずは、PowerShell でJSON への接続を行います。レプリケーションは4つのステップがあります。
データソースへの認証については、ヘルプドキュメントの「はじめに」を参照してください。本製品は、JSON API を双方向データベーステーブルとして、JSON ファイルを読み取り専用ビュー(ローカル ファイル、一般的なクラウドサービスに保存されているファイル、FTP サーバー)としてモデル化します。HTTP Basic、Digest、NTLM、OAuth、FTP などの主要な認証スキームがサポートされています。詳細はヘルプドキュメントの「はじめに」を参照してください。
URI を設定して認証値を入力したら、DataModel を設定してデータ表現とデータ構造をより厳密に一致させます。
DataModel プロパティは、データをどのようにテーブルに表現するかを制御するプロパティで、次の基本設定を切り替えます。
- Document(デフォルト):JSON データのトップレベルのドキュメントビューをモデル化します。本製品 は、ネストされたオブジェクト配列を集約されたJSON オブジェクトとして返します。
- FlattenedDocuments:ネストされた配列オブジェクトと親オブジェクトを、単一テーブルに暗黙的に結合します。
- Relational:階層データから個々の関連テーブルを返します。テーブルには、親ドキュメントにリンクする主キーと外部キーが含まれています。
リレーショナル表現の設定についての詳細は、ヘルプドキュメントの「JSON データのモデリング」を参照してください。また、以下の例で使用されているサンプルデータも確認できます。データには人や所有する車、それらの車に行われたさまざまなメンテナンスサービスのエントリが含まれています。
JSON データの取得
-
モジュールのインストール:
Install-Module JSONCmdlets
-
JSON への接続:
$json = Connect-JSON -URI $URI -DataModel $DataModel
-
取得ターゲットのリソースの取得:
$data = Select-JSON -Connection $json -Table "people"
Invoke-JSON cmdlet を使って、SQL-92 クエリを使用することもできます:
$data = Invoke-JSON -Connection $json -Query 'SELECT * FROM people WHERE [ personal.name.last ] = @[ personal.name.last ]' -Params @{'@[ personal.name.last ]'='Roberts'}
-
戻り値からカラム名のリストを保存します。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name
JSON データをMySQL データベースに入れます
カラム名を指定できるようにして、データをMySQL データベースにレプリケーションします。
-
モジュールのインストール:
Install-Module MySQLCmdlets
-
MySQL DB に、MySQL Server 名、ユーザー、パスワード、レプリケーション先のデータベース名を指定して、接続します:
$mysql = Connect-MySQL -User $User -Password $Password -Database $Database -Server $Server -Port $Port
-
JSON、保存された値、そしてAdd-MySQL Cmdlet を使って、MySQL にデータを1レコードずつ挿入します。この例では、MySQL 側のテーブルは、JSON のリソース(people)と同じテーブル名を持っている必要があります。
$data | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "people" -Columns $columns -Values $values }
これで、JSON データをMySQL に複製できました。これで、分析、BI などでJSON データをMySQL から使うことができるようになります。
Notes
-
一度PowerShell でJSON とMySQL に接続したら、次からは1行のコマンドでレプリケーションを実施できます:
Select-JSON -Connection $json -Table "people" | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "people" -Columns $columns -Values $values }
-
別のPowerShell モジュールで、JSON を別のデータベースに複製する場合、Select-JSON cmdlet のデータから、カラム、接続およびテーブルを除外する方がいいでしょう。これらのデータは、CData cmdlet からデータを移動する際にのみ必要なものだからです。:
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name | ? {$_ -NotIn @('Columns','Connection','Table')}