本記事では、OBLOADERを使用してデータをダイレクトロードする方法について説明します。OBLOADERダイレクトロードモードに関連するコマンドラインオプションは、以下のとおりです:
注意
OBLOADERダイレクトロードモードは、OBServerとODPへの接続をサポートします。対応するバージョン要件:
- OBServerに接続する場合:OBServerはV4.2.0以降のバージョンが必要です。
- ODPに接続する場合:ODPはV4.3.0以降のバージョンが、かつOBServerはV4.2.1以降のバージョンが必要です。
| コマンドラインオプション | 説明 | クラウドデータベースOceanBase & ODP | OceanBaseデータベース & ODP | OceanBaseデータベース & OBServer |
|---|---|---|---|---|
| --direct | ダイレクトロードの使用を指定。 | 必須 | 必須 | 必須 |
| --parallel | サーバーサイドの並列度。デフォルト値1、テナントCPU仕様との一致を推奨。 パフォーマンスの安定性を保証するため、このオプションの指定を推奨します。 |
任意 | 任意 | 任意 |
| --rpc-port | サーバーサイドのinner rpc port。取得方法:
|
必須 | 必須 | 必須 |
| -u(--user) | データベースのユーザー名。 | 必須 | 必須 | 必須 |
| -P(--port) | SQLポート番号。 | 必須 | 必須 | 必須 |
| -t(--tenant) | クラスタのテナント名。 | 任意 未指定の場合、パーティション計算がスキップされる可能性があります |
必須 | 必須 |
| -c(--cluster) | データベースのクラスタ名。 | 任意 | 必須 | - |
| --public-cloud | クラウドデータベースOceanBase実行環境を指定。 | 必須 | - | - |
| --no-sys | sysテナントに依存しないことを指定。OceanBaseデータベースV4.0.0以前のバージョンでのみ使用。 | 任意 | 任意 | 任意 |
| --sys-user | sysテナントに依存するuserを指定。未指定の場合、デフォルトはroot。OceanBaseデータベースV4.0.0以前のバージョンでのみ使用。 | 任意 --no-sysと相互排他 |
任意 --no-sysと相互排他 |
任意 --no-sysと相互排他 |
| --sys-password | sysテナントに依存するパスワードを指定。OceanBaseデータベースV4.0.0以前のバージョンでのみ使用。 | 任意 --no-sysと相互排他 |
任意 --no-sysと相互排他 |
任意 --no-sysと相互排他 |
インポートのサンプル
以下のコマンドを使用して、データをOceanBaseデータベースにインポートします:
bin/obloader -h xx.x.x.xx -P 2883 -u TPCH -t oboracle -c OB4216 -p -D TPCH --table LINEITEM --external-data --csv -f /data/1/tpch/s4/bak/ --truncate-table --column-separator='|' --thread 16 --rpc-port=2885 --direct --parallel=16
ダイレクトロードは、OBServerのSQLポート(デフォルト2881)ではなく、RPCポート(デフォルト2882)に接続します。OBLOADERは、ODPをバイパスしてOBServerに直接接続する場合、追加でRPCポートを指定することでダイレクトロードを実現できます。ODP V4.3.0のRPCポートは2885です。ただし、本番環境では、クライアントがODPをバイパスすることは推奨されません。これは、本来ビジネスデータのリーダーレプリカの位置がアプリケーションクライアントに対して透過的であるため(クライアントはデータがどのOBServerノードにあるかを知る必要がなく、ODPがSQLルーティングを担当)です。OBServerに直接接続してバイパス書き込みを行う際に、リーダーレプリカがそのノードにない場合は、クロスマシントランザクションが発生します。
上記のコマンドは、/data/1/tpch/s4/bak/ ディレクトリ下のサポートされているすべてのCSVデータファイルをテーブル LINEITEM にインポートします。データファイルのサイズがTB単位以上になる場合、ダイレクトロードを使用して効率を向上させてください。より大きなテナントリソース構成と組み合わせることで、より高い効率を実現できます。
ダイレクトロードモード関連パラメータ
{ob-loader-dumper}/conf ディレクトリの session.config.json ファイルでダイレクトロードパラメータを設定できます。
例:
"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を一致させることを推奨します。