UPDATE
主キーテーブルの行を更新します。
StarRocks は v2.3 から UPDATE 文をサポートしており、単一テーブルの UPDATE のみをサポートし、共通テーブル式 (CTE) はサポートしていません。バージョン 3.0 から、StarRocks は構文を拡張し、複数テーブルのジョインと CTE をサポートします。更新するテーブルをデータベース内の他のテーブルとジョインする必要がある場合、FROM 句または CTE でこれらの他のテーブルを参照できます。バージョン 3.1 以降、UPDATE 文は列モードでの部分更新をサポートしており、少数の列を含むが多数の行を含むシナリオに適しており、更新速度が速くなります。
このコマンドを実行するには、更新したいテーブルに対する UPDATE 権限が必要です。
使用上の注意
複数のテーブルを含む UPDATE 文を実行する場合、StarRocks は UPDATE 文の FROM 句内のテーブル式を同等の JOIN クエリ文に変換します。したがって、UPDATE 文の FROM 句で指定するテーブル式がこの変換をサポートしていることを確認してください。例えば、UPDATE 文が 'UPDATE t0 SET v1=t1.v1 FROM t1 WHERE t0.pk = t1.pk;' の場合、FROM 句のテーブル式は 't0 JOIN t1 ON t0.pk=t1.pk;' に変換できます。StarRocks は、JOIN クエリの結果セットに基づいて更新するデータ行を一致させます。結果セットの複数の行が更新するテーブルの特定の行と一致する可能性があります。このシナリオでは、それらの複数の行の中からランダムな行の値 に基づいてその行が更新されます。
構文
単一テーブルの UPDATE
更新するテーブルのデータ行が WHERE 条件を満たす場合、これらのデータ行の指定された列に新しい値が割り当てられます。
[ WITH <with_query> [, ...] ]
UPDATE <table_name>
SET <column_name> = <expression> [, ...]
WHERE <where_condition>
複数テーブルの UPDATE
複数テーブルのジョインからの結果セットが更新するテーブルに対して一致します。更新するテーブルのデータ行が結果セットと一致し、WHERE 条件を満たす場合、これらのデータ行の指定された列に新しい値が割り当てられます。
[ WITH <with_query> [, ...] ]
UPDATE <table_name>
SET <column_name> = <expression> [, ...]
[ FROM <from_item> [, ...] ]
WHERE <where_condition>
パラメータ
with_query
UPDATE 文で名前で参照できる 1 つ以上の CTE。CTE は一時的な結果セットで、複雑な文の可読性を向上させることができます。
table_name
更新するテーブルの名前。
column_name
更新する列の名前。テーブル名を含めることはできません。例えば、'UPDATE t1 SET col = 1' は無効です。
expression
列に新しい値を割り当てる式。
from_item
データベース内の 1 つ以上の他のテーブル。これらのテーブルは、WHERE 句で指定された条件に基づいて更新するテーブルとジョインできます。結果セットの行の値は、更新するテーブルの一致する行の指定された列の値を更新するために使用されます。例えば、FROM 句が FROM t1 WHERE t0.pk = t1.pk の場合、StarRocks は UPDATE 文を実行する際に FROM 句のテーブル式を t0 JOIN t1 ON t0.pk=t1.pk に変換します。
where_condition
行を更新したい条件。この条件を満たす行のみが更新されます。このパラメータは必須です。これは、誤ってテーブル全体を更新するのを防ぐのに役立ちます。テーブル全体を更新したい場合は、'WHERE true' を使用できます。ただし、このパラメータは 列モードでの部分更新 には必須ではありません。
列モードでの部分更新 (v3.1 以降)
列モードでの部分更新は、少数の列のみを更新する必要があるが、多数の行を更新する必要があるシナリオに適しています。このようなシナリオでは、列モードを有効にすることで更新速度が速くなります。例えば、100 列のテーブルで、すべての行に対して 10 列 (全体の 10%) のみを更新する場合、列モードの更新速度は 10 倍速くなります。
システム変数 partial_update_mode は部分更新のモードを制御し、以下の値をサポートします。
-
auto(デフォルト): システムは UPDATE 文と関与する列を分析して部分更新のモードを自動的に決定します。以下の条件が満たされる場合、システムは自動的に列モードを使用します。- 更新される列の割合が全体の 30% 未満であり、更新される列の数が 4 未満である。
- 更新文が WHERE 条件を使用していない。