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

古川えりか
古川えりか
コンテンツスペシャリスト
PowerShell のシンプルなスクリプトで、Snowflake のデータ をMySQL データベースにレプリケーション(複製)する方法を紹介します。

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

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

それでは、Snowflake データベースに接続していきましょう。認証に加えて、以下の接続プロパティを設定します。

  • Url:お使いのSnowflake URL を指定します。例:https://orgname-myaccount.snowflakecomputing.com
    • Legacy URL を使用する場合:https://myaccount.region.snowflakecomputing.com
    • ご自身のURL は以下のステップで確認できます。
      1. Snowflake UI の左下にあるユーザー名をクリックします
      2. Account ID にカーソルを合わせます
      3. Copy Account URL アイコンをクリックして、アカウントURL をコピーします
  • Database(オプション):CData 製品によって公開されるテーブルとビューを、特定のSnowflake データベースのものに制限したい場合に設定します
  • Schema(オプション):CData 製品によって公開されるテーブルとビューを、特定のSnowflake データベーススキーマのものに制限したい場合に設定します

Snowflakeへの認証

CData 製品では、Snowflake ユーザー認証、フェデレーション認証、およびSSL クライアント認証をサポートしています。認証するには、UserPassword を設定し、AuthScheme プロパティで認証方法を選択してください。

キーペア認証

ユーザーアカウントに定義されたプライベートキーを使用してセキュアなトークンを作成し、キーペア認証で接続することも可能です。この方法で接続するには、AuthSchemePRIVATEKEY に設定し、以下の値を設定してください。

  • User:認証に使用するユーザーアカウント
  • PrivateKey:プライベートキーを含む.pem ファイルへのパスなど、ユーザーに使用されるプライベートキー
  • PrivateKeyType:プライベートキーを含むキーストアの種類(PEMKEY_FILE、PFXFILE など)
  • PrivateKeyPassword:指定されたプライベートキーのパスワード

その他の認証方法については、ヘルプドキュメントの「Snowflakeへの認証」セクションをご確認ください。

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 から使うことができるようになります。

はじめる準備はできましたか?

Snowflake Cmdlet の無料トライアルをダウンロードしてお試しください:

 ダウンロード