本記事では、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 | サーバー側の内部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と互斥 |
インポート例
以下のコマンドを使用して、データを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を一致させることを推奨します。