ノーコードでクラウド上のデータとの連携を実現。
詳細はこちら →CData
こんにちは!ドライバー周りのヘルプドキュメントを担当している古川です。
CData Cmdlets for ADLS を使えば、PowerShell からAzure Data Lake Storage データ データにリアルタイムで連携できます。データ同期などのタスクの連携にぴったりの製品です。 本記事では、PowerShell からCData Cmdlets for ADLS およびCData Cmdlets for MySQL を使って、同期スクリプトを作成して実行します。
まずは、PowerShell でAzure Data Lake Storage への接続を行います。レプリケーションは4つのステップがあります。
Gen 1 DataLakeStorage アカウントに接続するには、はじめに以下のプロパティを設定します。
Gen 1 は、認証方法としてAzure Active Directory OAuth(AzureAD)およびマネージドサービスID(AzureMSI)をサポートしています。認証方法は、ヘルプドキュメントの「Azure DataLakeStorage Gen 1 への認証」セクションを参照してください。
Gen 2 DataLakeStorage アカウントに接続するには、はじめに以下のプロパティを設定します。
Gen 2は、認証方法としてアクセスキー、共有アクセス署名(SAS)、Azure Active Directory OAuth(AzureAD)、マネージドサービスID(AzureMSI)など多様な方法をサポートしています。AzureAD、AzureMSI での認証方法は、ヘルプドキュメントの「Azure DataLakeStorage Gen 2 への認証」セクションを参照してください。
アクセスキーを使用して接続するには、AccessKey プロパティを取得したアクセスキーの値に、AuthScheme を「AccessKey」に設定します。
Azure ポータルからADLS Gen2 ストレージアカウントのアクセスキーを取得できます。
共有アクセス署名を使用して接続するには、SharedAccessSignature プロパティを接続先リソースの有効な署名に設定して、AuthScheme を「SAS」に設定します。 共有アクセス署名は、Azure Storage Explorer などのツールで生成できます。
モジュールのインストール:
Install-Module ADLSCmdlets
Azure Data Lake Storage への接続:
$adls = Connect-ADLS -Schema $Schema -Account $Account -FileSystem $FileSystem -AccessKey $AccessKey
取得ターゲットのリソースの取得:
$data = Select-ADLS -Connection $adls -Table "Resources"
Invoke-ADLS cmdlet を使って、SQL-92 クエリを使用することもできます:
$data = Invoke-ADLS -Connection $adls -Query 'SELECT * FROM Resources WHERE Type = @Type' -Params @{'@Type'='FILE'}
戻り値からカラム名のリストを保存します。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name
カラム名を指定できるようにして、データをMySQL データベースにレプリケーションします。
モジュールのインストール:
Install-Module MySQLCmdlets
MySQL DB に、MySQL Server 名、ユーザー、パスワード、レプリケーション先のデータベース名を指定して、接続します:
$mysql = Connect-MySQL -User $User -Password $Password -Database $Database -Server $Server -Port $Port
Azure Data Lake Storage、保存された値、そしてAdd-MySQL Cmdlet を使って、MySQL にデータを1レコードずつ挿入します。この例では、MySQL 側のテーブルは、Azure Data Lake Storage のリソース(Resources)と同じテーブル名を持っている必要があります。
$data | % {
$row = $_
$values = @()
$columns | % {
$col = $_
$values += $row.$($col)
}
Add-MySQL -Connection $mysql -Table "Resources" -Columns $columns -Values $values
}
一度PowerShell でAzure Data Lake Storage とMySQL に接続したら、次からは1行のコマンドでレプリケーションを実施できます:
Select-ADLS -Connection $adls -Table "Resources" | % {
$row = $_
$values = @()
$columns | % {
$col = $_
$values += $row.$($col)
}
Add-MySQL -Connection $mysql -Table "Resources" -Columns $columns -Values $values
}
別のPowerShell モジュールで、Azure Data Lake Storage を別のデータベースに複製する場合、Select-ADLS cmdlet のデータから、カラム、接続およびテーブルを除外しておきましょう。これらのデータはデータ移動のときだけ必要となるためです。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name | ? {$_ -NotIn @('Columns','Connection','Table')}
これで、Azure Data Lake Storage データをMySQL に複製できました。分析、BI などでAzure Data Lake Storage データをMySQL から使うことができるようになります。