Loading concepts
このトピックでは、データロードに関する一般的な概念と情報を紹介します。
Privileges
StarRocks テーブルにデータを ロード するには、その StarRocks テーブルに対して INSERT 権限を持つユーザーである必要があります。INSERT 権限を持っていない場合は、 GRANT に記載されている手順に従って、StarRocks クラスターに接続するために使用するユーザーに INSERT 権限を付与してください。構文は GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>}
です。
Labeling
StarRocks にデータをロードするには、ロードジョブを実行します。各ロードジョブには、ユーザーが指定するか StarRocks が自動生成する一意のラベルが付けられ、ジョブを識別します。各ラベルは 1 つのロードジョブにのみ使用できます。ロードジョブが完了すると、そのラベルは他のロードジョブには再利用できません。失敗したロードジョブのラベルのみ再利用可能です。
Atomicity
StarRocks が提供するすべてのロード方法は、原子性を保証します。原子性とは、ロードジョブ内の適格なデータがすべて正常にロードされるか、まったくロードされないかのいずれかであることを意味します。一部の適格なデータがロードされ、他のデータがロードされないということはありません。適格なデータには、データ型変換エラーなどの品質問題によりフィルタリングされたデータは含まれません。
Protocols
StarRocks は、ロードジョブを送信するために使用できる 2 つの通信プロトコルをサポートしています: MySQL と HTTP。StarRocks がサポートするすべてのロード方法のうち、HTTP を使用するのは Stream Load のみであり、他のすべては MySQL を使用します。
Data types
StarRocks は、すべてのデータ型のデータロードをサポートしています。特定のデータ型のロードに関する制限に注意する必要があります。詳細については、Data types を参照してください。
Strict mode
Strict mode は、データロードのために設定できるオプションのプロパティです。ロードの動作と最終的にロードされるデータに影響を与えます。詳細については、Strict mode を参照してください。
Loading modes
StarRocks は、同期ロードモードと非同期ロードモードの 2 つのロードモードをサポートしています。
外部プログラムを使用してデータをロードする場合、ロード方法を決定する前に、ビジネス要件に最も適したロードモードを選択する必要があります。
Synchronous loading
同期ロードモードでは、ロードジョブを送信した後、StarRocks はジョブを同期的に実行してデータをロードし、ジョブが終了した後にジョブの結果を返します。ジョブの結果に基づいて、ジョブが成功したかどうかを確認できます。
StarRocks は、同期ロードをサポートする 2 つのロード方法を提供しています: Stream Load と INSERT。
同期ロードのプロセスは次のとおりです。
-
ロードジョブを作成します。
-
StarRocks によって返されたジョブの結果を確認します。
-
ジョブの結果に基づいて、ジョブが成功したかどうかを確認します。ジョブの結果がロード失敗を示している場合は、ジョブを再試行できます。
Asynchronous loading
非同期ロードモードでは、ロードジョブを送信した後、StarRocks はすぐにジョブ作成結果を返します。
-
結果がジョブ作成の成功を示している場合、StarRocks はジョブを非同期で実行します。ただし、それはデータが正常にロードされたことを意味するわけではありません。ステートメントやコマンドを使用してジョブのステータスを確認し、ジョブのステータスに基づいてデータが正常にロードされたかどうかを判断する必要があります。
-
結果がジョブ作成の失敗を示している場合、失敗情報に基づいてジョブを再試行する必要があるかどうかを判断できます。
テーブルに対して異なる書き込みクォーラムを設定できます。つまり、StarRocks がロードタスクを成功と判断する前に、ロード成功を返す必要があるレプリカの数を指定できます。write_quorum
プロパティを追加して CREATE TABLE する際に書き込みクォーラムを指定するか、ALTER TABLE を使用して既存のテーブルにこのプロパティを追加できます。
StarRocks は、非同期ロードをサポートする 4 つのロード方法を提供しています: Broker Load、Pipe、Routine Load、および Spark Load。
非同期ロードのプロセスは次のとおりです。
-
ロードジョブを作成します。
-
StarRocks によって返されたジョブ作成結果を確認し、ジョブが正常に作成されたかどうかを判断します。
-
ジョブ作成が成功した場合、ステップ 3 に進みます。
-
ジョブ作成が失敗した場合、ステップ 1 に戻ります。
-
-
ステートメントやコマンドを使用してジョブのステータスを確認し、ジョブのステータスが FINISHED または CANCELLED になるまで待ちます。
Workflow of Broker Load or Spark Load
Broker Load または Spark Load ジョブのワークフローは、次の図に示すように 5 つのステージで構成されています。
ワークフローは次のとおりです。
-
PENDING
ジョブは FE によってスケジュールされるのを待つキューに入っています。
-
ETL
FE はデータを前処理し、クレンジング、パーティショニング、ソート、集計を行います。
ETL ステージは Spark Load ジョブにのみ存在します。Broker Load ジョブはこのステージをスキップします。
-
LOADING
FE はデータをクレンジングおよび変換し、データを BEs または CNs に送信します。すべてのデータがロードされると、データは効果を発揮するのを待つキューに入ります。この時点で、ジョブのステータスは LOADING のままです。
-
FINISHED
ロードが完了し、関与するすべてのデータが効果を発揮すると、ジョブのステータスは FINISHED になります。この時点で、データはクエリ可能です。FINISHED は最終的なジョブ状態です。
-
CANCELLED
ジョブのステータスが FINISHED になる前に、いつでもジョブをキャンセルできます。さらに、StarRocks はロードエラーが発生した場合にジョブを自動的にキャンセルできます。ジョブがキャンセルされると、ジョブのステータスは CANCELLED になり、キャンセル前に行われたすべてのデータ更新が元に戻されます。CANCELLED も最終的なジョブ状態です。
Workflow of Pipe
Pipe ジョブのワークフローは次のとおりです。
-
ジョブは MySQL クライアントから FE に送信されます。
-
FE は、指定されたパスに保存されているデータファイルをその数またはサイズに基づいて分割し、ジョブをより小さな連続タスクに分解します。タスクは作成後、スケジュールを待つキューに入ります。
-
FE はキューからタスクを取得し、INSERT INTO SELECT FROM FILES ステートメントを呼び出して各タスクを実行します。
-
データロードが完了します:
-
ジョブ作成時に
"AUTO_INGEST" = "FALSE"
が指定されている場合、指定されたパスに保存されているすべてのデータファイルのデータがロードされた後にジョブが終了します。 -
ジョブ作成時に
"AUTO_INGEST" = "TRUE"
が指定されている場合、FE はデータファイルの変更を監視し続け、データファイルから新しいまたは更新されたデータを自動的に StarRocks の宛先テーブルにロードします。
-
Workflow of Routine Load
Routine Load ジョブのワークフローは次のとおりです。
-
ジョブは MySQL クライアントから FE に送信されます。
-
FE はジョブを複数のタスクに分割します。各タスクは、複数のパーティションからデータをロードするように設計されています。
-
FE はタスクを指定された BEs または CNs に配布します。
-
BEs または CNs はタスクを実行し、タスクが完了した後に FE に報告します。
-
FE は、BEs からの報告に基づいて、後続のタスクを生成し、失敗したタスクがある場合は再試行し、またはタスクのスケジューリングを一時停止します。