Change data through loading
データの変更による変更
StarRocksが提供するPrimary Key tablesを使用すると、Stream Load、Broker Load、またはRoutine Load ジョブを実行してStarRocksのテーブルにデータの変更(挿入、更新、削除)を行うことができます。しかし、Primary Key tablesではSpark LoadまたはINSERTを使用してデータを変更することはサポートされていません。
StarRocksは部分的な更新 と条件付きの更新もサポートしています。
このトピックでは、CSVデータを使用してStarRocksのテーブルへのデータの変更方法を説明します。選択するロード方法によってサポートされるデータファイルの形式は異なります。
注意
CSVデータの場合、50バイトを超えないUTF-8の文字列(カンマ(,)、タブ、またはパイプ(|)など)をテキスト区切り記号として使用することができます。
実装
StarRocksが提供するPrimary Key tablesは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
フィールドを追加する必要はありません。 - ロードするデータファイルが削除操作のみを含む場合、
__op
フィールドを追加し、オペレーションタイプをDELETEに指定する必要があります。 - ロードするデータファイルにUPSERTおよびDELETE操作の両方が含まれる場合、
__op
フィールドを追加し、データファイルに値が0
または1
の列が含まれていることを確認する必要があります。0
の値はUPSERT操作を、1
の値はDELETE操作を示します。
注意事項
- データファイルの各行の列の数が同じであることを確認してください。
- データ変更に関与するカラムには、主キーカラムを含める必要があります。
事前条件
Broker Load
HDFSからデータをロードする または クラウドストレージからデータをロードする の「背景情報」のセクションを参照してください。
Routine load
Routine Loadを選択する場合は、Apache Kafka®クラスタでトピックが作成されていることを確認してください。以下のトピックを作成したと仮定します: topic1
、topic2
、topic3
、topic4
。
基本操作
このセクションでは、StarRocksテーブルへのデータ変更の例を提供します。詳細な構文とパラメータの説明については、STREAM LOAD、BROKER LOAD、およびCREATE ROUTINE LOADを参照してください。
UPSERT
ロードするデータファイルがUPSERT操作のみを含む場合、__op
フィールドを追加する必要はありません。
注意
__op
フィールドを追加した場合:
- UPSERTとしてオペレーションタイプを指定することができます。
__op
フィールドを空のままにしておくことができます。なぜなら、オペレーションタイプはデフォルトでUPSERTになるからです。
データの例
-
データファイルを準備します。a. ローカルのファイルシステムに
example1.csv
という名前のCSVファイルを作成します。このファイルは、ユーザーID、ユーザー名、ユーザースコアを順に表す3つの列で構成されています。101,Lily,100
102,Rose,100b.
example1.csv
のデータをKafkaクラスタのtopic1
に公開します。 -
StarRocksテーブルを準備します。a. StarRocksのデータベース
test_db
にtable1
というPrimary Keyテーブルを作成します。このテーブルは、id
、name
、score
の3つの列で構成されており、id
がプライマリキーです。CREATE TABLE `table1`
(
`id` int(11) NOT NULL COMMENT "user ID",
`name` varchar(65533) NOT NULL COMMENT "user name",
`score` int(11) NOT NULL COMMENT "user score"
)
ENGINE=OLAP
PRIMARY KEY(`id`)
DISTRIBUTED BY HASH(`id`);注意
v2.5.7以降、StarRocksはテーブルの作成またはパーティションの追加時にバケット数(BUCKETS)を自動で設定することができます。バケット数を手動で設定する必要はありません。詳細については、バケット数の決定を参照してください。
b.
table1
にレコードを追加します。INSERT INTO table1 VALUES
(101, 'Lily',80);
データのロード
example1.csv
の中の id
が 101
のレコードを table1
に更新し、example1.csv
の中の id
が 102
のレコードを table1
に挿入するため、ロードジョブを実行します。
- Stream Loadジョブを実行します。
-
__op
フィールドを含めたくない場合、次のコマンドを実行します:curl --location-trusted -u <username>:<password> \
-H "Expect:100-continue" \
-H "label:label1" \
-H "column_separator:," \
-T example1.csv -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/table1/_stream_load
-