ロードによるデータ変更
StarRocks が提供する主キーテーブルを使用すると、Stream Load、Broker Load、またはRoutine Loadジョブを実行して StarRocks テーブルにデータ変更を加えることができます。これらのデータ変更には、挿入、更新、削除が含まれます。ただし、主キーテーブルは、Spark LoadやINSERTを使用したデータ変更をサポートしていません。
StarRocks は部分更新と条件付き更新もサポートしています。
StarRocks のテーブルにデータを ロード するには、その StarRocks テーブルに対して INSERT 権限を持つユーザーである必要があります。INSERT 権限がない場合は、GRANT に記載されている手順に従って、StarRocks クラスターに接続するために使用するユーザーに INSERT 権限を付与してください。構文は GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>} です。
このトピックでは、CSV データを例にして、ロードを通じて StarRocks テーブルにデータ変更を加える方法を説明します。サポートされるデータファイル形式は、選択したロード方法によって異なります。
注意
CSV データの場合、UTF-8 文字列(カンマ(,)、タブ、パイプ(|)など)をテキスト区切り文字として使用できますが、その長さは 50 バイトを超えないようにしてください。
実装
StarRocks が提供する主キーテーブルは、UPSERT および DELETE 操作をサポートしており、INSERT 操作と UPDATE 操作を区別しません。
ロードジョブを作成する際に、StarRocks はジョブ作成ステートメントまたはコマンドに __op という名前のフィールドを追加することをサポートしています。__op フィールドは、実行したい操作の種類を指定するために使用されます。
注意
テーブルを作成する際に、そのテーブルに
__opという名前の列を追加 する必要はありません。
__op フィールドの定義方法は、選択したロード方法によって異なります。
-
Stream Load を選択した場合、
columnsパラメータを使用して__opフィールドを定義します。 -
Broker Load を選択した場合、SET 句を使用して
__opフィールドを定義します。 -
Routine Load を選択した場合、
COLUMNS列を使用して__opフィールドを定義します。
データ変更に基づいて __op フィールドを追加するかどうかを決定できます。__op フィールドを追加しない場合、操作の種類はデフォルトで UPSERT になります。主なデータ変更シナリオは次のとおりです。
-
ロードしたいデータファイルが UPSERT 操作のみを含む場合、
__opフィールドを追加する必要はありません。 -
ロードしたいデータファイルが DELETE 操作のみを含む場合、
__opフィールドを追加し、操作の種類を DELETE として指定する必要があります。 -
ロードしたいデータファイルが UPSERT および DELETE 操作の両方を含む場合、
__opフィールドを追加し、データファイルに0または1の値を持つ列が含まれていることを確認する必要があります。0の値は UPSERT 操作を示し、1の値は DELETE 操作を示します。