データファイルが配置されている環境がOBServerから直接アクセスできない場合、つまりObserverとのネットワークが切断されているか、ファイルをOBServerのローカルパスにコピーすることが困難な場合、obloaderを使用してデータをOceanBaseに書き込むことができます。
OBServer側でSQLを実行してLOAD DATAやLOAD DATA FROM FILESを実行する方法とは異なり、obloaderはクライアントプロセス内でファイルを読み取り、RPCを介してストレージ層と通信します。これにより、オフラインパッケージや異なるサブネット間でのデータ配信などのシナリオに適しています。
注意
obloaderのダイレクトロードは、OBServerまたはODPへの接続をサポートします。バージョン要件:
- OBServerへの接続:OBServerはV4.2.0以上。
- ODPへの接続:ODPはV4.3.0以上、かつOBServerはV4.2.1以上。
適用シナリオ
- ファイルとOBServerが接続できない場合:エクスポートファイルが業務マシン、ジャンクションマシン、または隔離されたサブネットにあり、OBServerとデータファイルのアドレス間のネットワークが切断されているため、OBServerが直接ファイルを読み取るインポート方法を使用することができません。
ファイルがすでにOBServerがアクセス可能なパスやオブジェクトストレージに配置されている場合は、LOAD DATA FROM FILES、LOAD DATA INFILEおよびデータインポートの概要に記載されているパス選択肢を優先的に評価できます。
コマンドラインオプション
データ導入ツールのドキュメントと実際の環境設定をご確認ください。
コマンドラインオプション |
説明 |
クラウドデータベースOceanBase & ODP |
OceanBaseデータベース & ODP |
OceanBaseデータベース & OBServer |
|---|---|---|---|---|
| --direct | ダイレクトロードの使用を示します。 | 必須 | 必須 | 必須 |
| --parallel | サーバーサイドの並列度。デフォルト値は1です。テナントのCPU構成と一致させることを推奨します。 パフォーマンスの安定性を保証するため、このオプションの指定を推奨します。 |
オプション | オプション | オプション |
| --rpc-port | サーバーサイドの内部RPCポート。取得方法:
|
必須 | 必須 | 必須 |
| -u(--user) | データベースのユーザー名。 | 必須 | 必須 | 必須 |
| -P(--port) | SQLポート番号。 | 必須 | 必須 | 必須 |
| -t(--tenant) | クラスタのテナント名。 | オプション 未入力の場合、パーティション計算をスキップする可能性があります |
必須 | 必須 |
| -c(--cluster) | データベースのクラスタ名。 | オプション | 必須 | - |
| --public-cloud | クラウドデータベースOceanBaseの実行環境を指定します。 | 必須 | - | - |
| --no-sys | sysテナントに依存しないことを示します。OceanBaseデータベースV4.0.0以前のバージョンでのみ使用します。 | オプション | オプション | オプション |
| --sys-user | sysテナントに依存するユーザーを示します。未入力の場合、デフォルトはrootです。OceanBaseデータベースV4.0.0以前のバージョンでのみ使用します。 | オプション --no-sysと排他 |
オプション --no-sysと排他 |
オプション --no-sysと排他 |
| --sys-password | sysテナントに依存するパスワードを示します。OceanBaseデータベースV4.0.0以前のバージョンでのみ使用します。 | オプション --no-sysと排他 |
オプション --no-sysと排他 |
オプション --no-sysと排他 |
実行例
CSVファイルが保存されているマシンで実行します(例はODP経由、Oracleテナントモードの場合です。実際のアドレス、ポート、ユーザー、パスに置き換えてください):
bin/obloader -h <ODPまたはOBServerアドレス> -P 2883 -u <ユーザー> -t <テナント名> -c <クラスタ名> -p \
-D <データベース名> --table LINEITEM --external-data --csv \
-f /data/tpch/bak/ \
--truncate-table --column-separator='|' \
--thread 16 --rpc-port 2885 --direct --parallel=16
ダイレクトロードは、SQLポートではなくRPCポートにアクセスします。デフォルトでは、OBServerのSQLポートは2881、RPCポートは2882です。ODP V4.3.0では、RPCポートのデフォルトは2885です。 obloaderがODPをバイパスして直接OBServerに接続し、RPCポートを明示的に指定する場合、ダイレクトロードのパスを経由できます。
ただし、本番環境では通常、クライアントがODPをバイパスして直接OBServerに接続することは推奨されません。ODP経由でアクセスする場合、データのリーダーレプリカの位置はクライアントに対して透過的であり、ルーティングはODPが一元的に処理します。一方、特定のOBServerに直接接続する場合、ターゲットデータのリーダーレプリカが現在のノードにないと、書き込み処理においてノード間のトランザクション調整が必要となり、ネットワークおよびトランザクションのオーバーヘッドが増加する可能性があります。
-fは、ローカルの読み取り可能なデータディレクトリを指定します。ツールはクライアントからファイルを読み取り、RPCダイレクトロードを介して書き込みます。必ずしも OBServerがこのパスにアクセスできる必要はありません。--rpc-portは、現在の接続先(ODPまたはOBServer)の RPCリスニング ポートと一致させてください。SQLポートと混同しないでください。- 特定のOBServerに直接接続する場合、データのリーダーレプリカがそのノードと一致しているかどうかを確認する必要があります。マシン間 のダイレクトロードは追加のコストを伴う可能性があります。アクセス可能な場合は、ODP経由でのアクセスを優先 し、本番業務のアクセス方法に合わせてください。具体的なルーティングとネットワークポリシーは、運用保守規範に準じます。
データ量がTBレベルに達すると、ダイレクトロードはスループットに有利です。テナントのリソースと データインポートの概要、フルダイレクトロード の注意事項(テーブルロック、メジャーコンパクションなど)を組み合わせて、ウィンドウを計画します。
ダイレクトロードモード設定ファイル(オプション)
{ob-loader-dumper}/conf/session.config.json で direct_path_load セクションを設定できます。これはRPCタイムアウト、リトライ、タスクタイムアウトなどに使用されます。例:
"direct_path_load": {
"rpc_connect_timeout": "15000",
"rpc_execute_timeout": "20000",
"runtime_retry_times": "5",
"runtime_retry_intervals": "50",
"task_timeout": "2592000000000",
"heartbeat_timeout": "60000000"
}
フィールド |
意味 |
|---|---|
rpc_connect_timeout |
RPC接続タイムアウト(ミリ秒)。 |
rpc_execute_timeout |
RPC実行タイムアウト(ミリ秒)。 |
runtime_retry_times |
実行失敗時の最大リトライ回数。何らかの理由で操作が失敗した場合、このパラメータに基づいてリトライが行われます。 |
runtime_retry_intervals |
リトライ間隔(ミリ秒)。リトライ操作を行う前に待機する時間長。 |
task_timeout |
タスクタイムアウト(マイクロ秒);0は制限なしを意味します。設定された時間内に操作が完了しない場合、タイムアウトと見なされます。 |
heartbeat_timeout |
ハートビートタイムアウト(マイクロ秒)。インポート操作のアクティブ状態を検出するために使用されます。0は無効を意味します。 |
注意事項
ダイレクトロード書き込みでは、データ転送にRPCポートを使用し、SQLプロトコルポートは使用しません。
テーブル単位で一括コミットされ、セッションレベル/トランザクションレベルのコミット操作ではありません。
現在、リトライや断点からの再開はサポートされていません。
現在、bit型データはサポートされていません。
現在、仮想生成列はサポートされていません。
データ量が少ないインポートタスクについては、ダイレクトロードの使用は推奨されません。
--replace-dataコマンドラインオプションを指定しても、一意インデックスの競合は処理できません。パラメータ
--threadコマンドラインオプションと--parallelコマンドラインオプションの違い:--threadは、クライアントからサーバーへの接続プールを表し、クライアントが管理します。--parallelは、OBServerが呼び出せるワーカースレッド数で、データの書き込みとソートに使用されます。使用する際は、
--threadと--parallelを一致させることを推奨します。