ローカルファイルシステムからデータをロードする
StarRocks はローカルファイルシステムからデータをロードするための2つの方法を提供しています。
- Stream Load を使用した同期ロード
- Broker Load を使用した非同期ロード
それぞれのオプションには独自の利点があります。
- Stream Load は CSV および JSON ファイル形式をサポートします。この方法は、個々のサイズが 10 GB を超えない少数のファイルからデータをロードしたい場合に推奨されます。
- Broker Load は Parquet、ORC、CSV、および JSON ファイル形式をサポートします(JSON ファイル形式は v3.2.3 以降でサポートされています)。この方法は、個々のサイズが 10 GB を超える多数のファイルからデ ータをロードしたい場合、またはファイルがネットワーク接続ストレージ(NAS)デバイスに保存されている場合に推奨されます。ローカルファイルシステムからデータをロードするために Broker Load を使用することは v2.5 以降でサポートされています。
CSV データについては、以下の点に注意してください。
- カンマ(,)、タブ、またはパイプ(|)などの UTF-8 文字列をテキスト区切り文字として使用できます。長さは 50 バイトを超えないようにしてください。
- Null 値は
\Nを使用して示されます。たとえば、データファイルが 3 つの列で構成されており、そのデータファイルのレコードが最初と 3 番目の列にデータを保持し、2 番目の列にデータがない場合、この状況では 2 番目の列に\Nを使用して null 値を示す必要があります。つまり、レコードはa,\N,bとしてコンパイルされる必要があります。a,,bは、レコードの 2 番目の列が空の文字列を保持していることを示します。
Stream Load と Broker Load はどちらもデータロード時にデータ変換をサポートし、データロード時に UPSERT および DELETE 操作によるデータ変更をサポートします。詳細については、Transform data at loading および Change data through loading を参照してください。
始める前に
権限の確認
StarRocks のテーブルにデータを ロード するには、その StarRocks テーブルに対して INSERT 権限を持つユーザーである必要があります。INSERT 権限がない場合は、GRANT に記載されている手順に従って、StarRocks クラスターに接続するために使用するユーザーに INSERT 権限を付与してください。構文は GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>} です。
ネットワーク設定の確認
ロードしたいデータが存在するマシンが、StarRocks クラスタの FE および BE ノードに http_port(デフォルト: 8030)および be_http_port(デフォルト: 8040)を介してアクセスできることを確認してください。
Stream Load を介したローカルファイルシステムからのロード
Stream Load は HTTP PUT ベースの同期ロード方法です。ロードジョブを送信すると、StarRocks はジョブを同期的に実行し、ジョブが終了した後にその結果を返します。ジョブの結果に基づいて、ジョブが成功したかどうかを判断できます。
注意
Stream Load を使用して StarRocks テーブルにデータをロードした後、そのテーブルに作成されたマテリアライズドビューのデータも更新されます。
動作の仕組み
クライアントで HTTP に従って FE にロードリクエストを送信できます。FE は HTTP リダイレクトを使用して特定の BE または CN にロードリクエストを転送します。また、クライアントで選択した BE または CN に直接ロードリクエストを送信することもできます。
FE にロードリクエストを送信する場合、FE はポーリングメカニズムを使用して、どの BE または CN がロードリクエストを受信して処理するコーディネーターとして機能するかを決定します。ポーリングメカニズムは、StarRocks クラスタ内での負荷分散を実現するのに役立ちます。したがって、FE にロードリクエストを送信することをお勧めします。
ロードリクエストを受信した BE または CN は、コーディネーター BE または CN として機能し、使用されるスキーマに基づいてデータを分割し、データの各部分を他の関連する BE または CN に割り当てます。ロードが終了すると、コーディネーター BE または CN はロードジョブの結果をクライアントに返します。コーディネーター BE または CN をロード中に停止すると、ロードジョブは失敗します。
以下の図は、Stream Load ジョブのワークフローを示しています。

制限
Stream Load は、JSON 形式の列を含む CSV ファイルのデータロードをサポートしていません。