DBeaverの構造比較でRedshiftのスキーマを比較してみた

環境間のテーブル比較にDBeaverの標準機能が使えました

はじめに

データアナリティクス事業本部のおざわです。

データ分析基盤の構築では、開発用環境、検証用環境のように目的に応じて環境を分けるのが一般的かと思います。環境が複数に分かれている状況で、環境をまたいでテーブルやスキーマを手軽に比較できないか調べたところ、DBeaverに標準搭載されている「シンプルな構造比較」が使えたので共有したいと思います。

今回はRedshiftのクラスタを2つ用意してから、テーブルをいくつか作って比較してみます。

1. Redshift環境の構築

Redshift Serverlessのクラスタを2つ構築します。テスト用なのでパブリックアクセスを有効にし、Redshiftのセキュリティグループのインバウンドルールを修正して手元の環境から接続できるようにしています。

このブログにあるCloudFormationテンプレートを使っています。

サンプルのテーブルには、こちらのtickitdbを使用しました。

比較用にRedshift query editorで一方の環境にテーブルやカラムの追加、定義の変更等を行いました。

2. DBeaverからの接続

手元の環境はMacで、使用したDBeaverクライアントのバージョンはこちらです。

バージョン23.1.5.202308201919

ワークグループの設定に記載されているJDBC URLで自宅環境のDBeaverから接続します。

3. スキーマの比較

接続できたのでスキーマの比較をしてみます。

3.1. スキーマ選択

比較したいスキーマをDBeaverで選択します。

選択したら右クリックしてメニューから「比較/移行」→「シンプルな構造比較」を選択します。ちなみに今回実施するスキーマ単位の比較だけでなく、データベース、テーブル単位の比較も可能です。また、比較対象のオブジェクトは、2つ以上でも比較することができます。

3.2. レポート設定

今回はスキーマ間の差異だけを見たいので「Show only differences」を選択して「Compare」をクリックします。 すべての情報を出力する場合はこのチェックを外してください。

3.3. 結果出力

少し待つとブラウザで以下のような比較結果が出力されました。今回はデータが入っていない状態で、テーブル数も変更した箇所も少ないのでシンプルなかんじです。

おわりに

以上、スキーマやテーブルの比較にDBeaverの機能が使えたよ、という共有でした。

比較結果の情報が多くて見づらい場合は、HTMLをまるっとコピーしてスプレッドシートに貼り付けてもよいと思います。一点、フィルタをかけるときには「テーブル」や「テーブル名」ではなく「表」でフィルタをかけるのをおすすめします。「表」を選択しないと上の「sales2」テーブルのように片側にしか存在しないテーブルが表示されないので見落とす可能性があります(汗