Kettleは、純粋なJavaで開発されたオープンソースのETLツールであり、データベース間のデータ移行に使用されます。Linux、Windows、Unixなど、さまざまなプラットフォームで動作します。Kettleはグラフィカルインターフェースとコマンドラインスクリプトを提供し、JDBCまたはJNDI方式でOceanBaseデータベースに接続して、データの抽出、変換、ロード操作を実現できます。
バージョン互換性
コンポーネント |
バージョン要件 |
|---|---|
| Kettle | ≥ V9.2 |
| OceanBase JDBCドライバー | ≥ V2.4.0 |
前提条件
Kettleを使用する前に、以下のことを確認してください:
- Kettleがインストール済みであること。Kettleのインストールについては、Hitachi Vantara公式ダウンロードページを参照してください。
- JDK V1.8以降がインストールされていること。JDKのインストールについては、Oracle公式ドキュメントを参照してください。
- OceanBaseデータベースのデプロイが完了し、MySQLモードのユーザーテナントが作成されていること。テナント作成の詳細については、テナントの作成を参照してください。
手順
ステップ1:OceanBaseデータベースの接続文字列を取得する
OceanBaseデータベースのデプロイ担当者から接続文字列を取得します。例:
obclient -h$host -P$port -u$user_name -p$password -D$database_name
パラメータ説明:
$host:接続IPアドレス。ODP接続の場合はODPアドレスを使用し、直接接続の場合はOBServer IPを使用します。$port:接続ポート。ODPのデフォルトは2883、直接接続のデフォルトは2881です。$database_name:データベース名。注意
テナントに接続するユーザーには、データベースに対する
CREATE、INSERT、DROPおよびSELECT権限が付与されていなければなりません。その他のユーザー権限の詳細については、MySQLモードの権限分類を参照してください。$user_name:接続アカウント。ODP形式:ユーザー@テナント#クラスタまたはクラスタ:テナント:ユーザー。直接接続形式:ユーザー@テナント。$password:アカウントのパスワード。
接続文字列の詳細については、OBClientを使用してOceanBaseテナントに接続するを参照してください。
例:
obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** -Dtest
ステップ2:OceanBaseドライバーファイルをインポートする
- OceanBase JDBCドライバーをダウンロードします。ダウンロード先については、OceanBase公式ドキュメントを参照してください。
- 取得したドライバーJARファイル(例:
oceanbase-client-2.4.0.jar)をKettleのインストールディレクトリ内のlibフォルダにコピーします。
ステップ3:JDBC接続を設定する
- Kettleを起動する:Kettleのインストールディレクトリに移動し、
spoon.bat(Windows)をダブルクリックするか、./spoon.sh(Linux)を実行してグラフィカルインターフェースを起動します。 - データベース接続を作成する:ファイル > 新規作成 > 変換 > 新規作成 > データベース接続 をクリックします。
- 接続パラメータを設定する:
- 接続名:接続名を入力します。例:
oceanbase。 - 接続タイプ:
Native(JDBC)を選択します。 - データベースタイプ:
Generic databaseを選択します。 - カスタム接続URL:JDBC接続文字列を入力します。形式は
jdbc:oceanbase://$host:$port/$database_name?characterEncoding=UTF-8です。 - カスタムドライバークラス名:
com.oceanbase.jdbc.Driverを入力します。 - ユーザー名:
$user_nameを入力します。 - パスワード:
$passwordを入力します。
- 接続名:接続名を入力します。例:
- テストボタンをクリックして接続を検証します。「データベースに正しく接続されました」と表示されれば、接続は成功です。
ステップ4:JNDI接続を設定する(オプション)
JNDI方式でOceanBaseに接続する必要がある場合は、以下の手順を実行してください:
OceanBase JDBCドライバーのJARファイルをKettleのインストールディレクトリ内の
libフォルダにコピーします。Kettleのインストールディレクトリ内の
simple-jndi/jdbc.propertiesファイルを開き、以下の設定を追加します:ob_ora/type=javax.sql.DataSource ob_ora/driver=com.alipay.oceanbase.jdbc.Driver ob_ora/url=jdbc:oceanbase://$host:$port/$database_name ob_ora/user=$user_name ob_ora/password=$passwordKettleでデータベース接続を作成する際、接続タイプを
JNDIに選択し、JNDI名に設定ファイルで定義された名前(例:ob_ora)を入力します。テストボタンをクリックして接続を検証します。
結果の検証
接続に成功した後、Kettleで以下の操作を実行して機能を検証できます。
- データベース操作:テーブルの作成、テーブルの削除、列の追加、列の削除、列の変更、インデックスの追加、インデックスの削除。
- データ操作:データの挿入(単一、バッチ)、データの削除(単一、バッチ)、データの変更(単一、バッチ)、データのクエリ(単一、バッチ)。
よくある質問
Q1:Kettleを使用してデータ移行する際、Number型の列で精度が失われる問題を解決するにはどうすればよいですか?
原因:Kettleは使用するデータベースに応じて異なる処理戦略を採用するため、Oracleとの互換性がなく、データ移行プロセスで精度が失われます。
解決策:OceanBase接続プラグインを使用します。このプラグインはOracle接続プラグインから派生しており、Kettleに対してOceanBaseドライバーがOracleデータベースに接続していると認識させることで、Oracleの処理戦略を適用します。OceanBaseテクニカルサポートにお問い合わせください。
Q2:Oracleモードで列を変更する際にエラーが発生した場合、どのように対処すればよいですか?
原因:Oracleモードでは、列の変更操作が内部エラーをトリガーする可能性があり、エラーメッセージは ORA-00600: internal error code, arguments: -4007, Truncate the data of column schema not supported となります。
解決策:OceanBaseテクニカルサポートにお問い合わせください。