製品をチェック

製品の情報と30日間無償トライアル

Snowflake 連携ソリューション 相談したい

Snowflake のデータをPowerShell でMySQL にレプリケーションする方法

PowerShell のシンプルなスクリプトで、Snowflake のデータ をMySQL データベースにレプリケーション(複製)する方法を紹介します。

古川えりか
コンテンツスペシャリスト

最終更新日:2023-09-26
snowflake ロゴ

CData

powershell ロゴ画像
MySQL ロゴ

こんにちは!ドライバー周りのヘルプドキュメントを担当している古川です。

CData Cmdlets for Snowflake を使えば、PowerShell からSnowflake のデータ データにリアルタイムで連携できます。データ同期などのタスクの連携にぴったりの製品です。 本記事では、PowerShell からCData Cmdlets for Snowflake およびCData Cmdlets for MySQL を使って、同期スクリプトを作成して実行します。

まずは、PowerShell でSnowflake への接続を行います。レプリケーションは4つのステップがあります。

Snowflake への接続には以下の情報が必要となります。

  1. User およびPassword をSnowflake ユーザーに設定し、AuthScheme をPASSWORD もしくはOKTA に設定します。
  2. URL をSnowflake インスタンスのURL に設定します(i.e.: https://myaccount.snowflakecomputing.com)。
  3. Warehouse をSnowflake warehouse に設定します。
  4. (Optional) Account URL が上記の形式に当てはまらない場合、Snowflake のアカウントに設定します。
  5. (Optional) Database およびSchema は、参照できるテーブルやビューを制限する場合に指定します。

詳細はヘルプドキュメントを参照してください。

Snowflake のデータの取得

  1. モジュールのインストール:

    Install-Module SnowflakeCmdlets
  2. Snowflake への接続:

    $snowflake = Connect-Snowflake -User $User -Password $Password -Server $Server -Database $Database -Warehouse $Warehouse -Account $Account
  3. 取得ターゲットのリソースの取得:

    $data = Select-Snowflake -Connection $snowflake -Table "Products"

    Invoke-Snowflake cmdlet を使って、SQL-92 クエリを使用することもできます:

    $data = Invoke-Snowflake -Connection $snowflake -Query 'SELECT * FROM Products WHERE Id = @Id' -Params @{'@Id'='1'}
  4. 戻り値からカラム名のリストを保存します。

    $columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name

Snowflake のデータをMySQL データベースにレプリケーション

カラム名を指定できるようにして、データをMySQL データベースにレプリケーションします。

  1. モジュールのインストール:

    Install-Module MySQLCmdlets
  2. MySQL DB に、MySQL Server 名、ユーザー、パスワード、レプリケーション先のデータベース名を指定して、接続します:

    $mysql = Connect-MySQL -User $User -Password $Password -Database $Database -Server $Server -Port $Port
  3. Snowflake、保存された値、そしてAdd-MySQL Cmdlet を使って、MySQL にデータを1レコードずつ挿入します。この例では、MySQL 側のテーブルは、Snowflake のリソース(Products)と同じテーブル名を持っている必要があります。

    $data | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "Products" -Columns $columns -Values $values }

次回以降のレプリケーションをシンプルに実現

  • 一度PowerShell でSnowflake とMySQL に接続したら、次からは1行のコマンドでレプリケーションを実施できます:

    Select-Snowflake -Connection $snowflake -Table "Products" | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "Products" -Columns $columns -Values $values }
  • 別のPowerShell モジュールで、Snowflake を別のデータベースに複製する場合、Select-Snowflake cmdlet のデータから、カラム、接続およびテーブルを除外しておきましょう。これらのデータはデータ移動のときだけ必要となるためです。

    $columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name | ? {$_ -NotIn @('Columns','Connection','Table')}

おわりに

これで、Snowflake のデータをMySQL に複製できました。分析、BI などでSnowflake のデータをMySQL から使うことができるようになります。

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。