すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:特定の列のデータの更新

最終更新日:Apr 28, 2025

Delta テーブルの特定の列のデータを更新できます。テーブルにデータを挿入する場合、またはテーブルのデータを更新する場合は、変更する列と新しいデータを SQL 文で指定するだけで済みます。この方法では、テーブルのすべての列に対して操作を実行する必要はありません。データの挿入中、値のない列には自動的に NULL が入力されます。データの更新中、値のない列は変更されません。これは、ほとんどのシナリオで操作効率を向上させ、ストレージ コストを削減するのに役立ちます。このトピックでは、Delta テーブルの特定の列にデータを挿入または更新する方法の例を示します。

典型的なデータ ウェアハウス ビジネスには、スタースキーマを使用するデータ テーブルがあり、テーブルのプライマリ キーは同じです。後続の計算と統計のためにすべてのテーブルをプライマリ キーに基づいて 1 つの大きなワイド テーブルにマージする必要がある場合、異なるテーブルのデータを個別に関連する列に並行して書き込むことができます。システムが大きなワイド テーブルを読み取ると、システムはデータを完全なデータ行にマージして出力します。すべての列にデータを書き込む方法と比較して、特定の列のデータを更新する方法は、書き込みと読み取りのパフォーマンスを大幅に向上させ、ストレージ コストを削減できます。

注意事項

  • テーブル タイプは Delta テーブルである必要があります。

  • パーティション テーブルと非パーティション テーブルの特定の列のデータを更新できます。

SQL 文の例

サンプル コード

delta_target という名前の Delta テーブルを作成します。

CREATE TABLE delta_target
(
    key  BIGINT NOT NULL PRIMARY KEY, 
    b   STRING, 
    c   BIGINT
)
TBLPROPERTIES ("acid.partial.fields.update.enable" = "true","transactional" = "true")
;

INSERT OVERWRITE/INSERT INTO

サンプル コードは、INSERT OVERWRITE または INSERT INTO 文を使用して Delta テーブルの特定の列にデータを挿入する方法を示しています。

  • デフォルトの列は c 列です。c 列には NULL が自動的に入力されます。

    INSERT INTO TABLE delta_target(key, b) VALUES(1, '1');
    
    SELECT * FROM delta_target;

    次の結果が返されます。

    +------------+------------+------------+
    | key        | b          | c          |
    +------------+------------+------------+
    | 1          | 1          | NULL       |
    +------------+------------+------------+
  • デフォルトの列は b 列です。同じプライマリ キーを持つデータを挿入する操作は、現在のデータを更新する操作と同じです。

    INSERT INTO TABLE delta_target(key, c) VALUES(1, 1);
    
    SELECT * FROM delta_target;

    次の結果が返されます。

    +------------+------------+------------+
    | key        | b          | c          |
    +------------+------------+------------+
    | 1          | 1          | 1          |
    +------------+------------+------------+
  • デフォルトの列は c 列です。同じプライマリ キーを持つデータを挿入する操作は、現在のデータを更新する操作と同じです。

    INSERT INTO TABLE delta_target(key, b) VALUES(1, '11');
    
    SELECT * FROM delta_target;

    次の結果が返されます。

    +------------+------------+------------+
    | key        | b          | c          |
    +------------+------------+------------+
    | 1          | 11         | 1          |
    +------------+------------+------------+
  • デフォルトの列は指定されていません。挿入されたデータは異なるプライマリ キーを持っています。この場合、新しいデータが追加されます。

    INSERT INTO TABLE delta_target VALUES(2, '2', 2);
    SELECT * FROM delta_target;

    次の結果が返されます。

    +------------+------------+------------+
    | key        | b          | c          |
    +------------+------------+------------+
    | 2          | 2          | 2          |
    | 1          | 11         | 1          |
    +------------+------------+------------+

INSERT OVERWRITE および INSERT INTO の詳細については、「テーブルまたは静的パーティションにデータを挿入または上書きする(INSERT INTO および INSERT OVERWRITE)」をご参照ください。

UPDATE または DELETE

次のサンプル コードは、INSERT OVERWRITE/INSERT INTO の例に基づいて、UPDATE または DELETE 文を使用して特定の列のデータを更新する方法を示しています。

  • デフォルトの列は c 列です。key の値が 1 であるデータ行が更新されます。

    UPDATE delta_target SET b='111' WHERE key=1;
    SELECT * FROM delta_target;

    次の結果が返されます。

    +------------+------------+------------+
    | key        | b          | c          |
    +------------+------------+------------+
    | 2          | 2          | 2          |
    | 1          | 111        | 1          |
    +------------+------------+------------+
  • デフォルトの列は c 列です。key の値が 2 であるデータ行が更新されます。

    UPDATE delta_target SET b='222' WHERE key=2;
    SELECT * FROM delta_target;

    次の結果が返されます。

    +------------+------------+------------+
    | key        | b          | c          |
    +------------+------------+------------+
    | 2          | 222        | 2          |
    | 1          | 111        | 1          |
    +------------+------------+------------+

UPDATE および DELETE の詳細については、「UPDATE および DELETE」をご参照ください。

MERGE INTO

次のサンプル コードは、UPDATE および DELETE の例に基づいて、MERGE INTO 文を使用してデータをマージする方法を示しています。

-- acid2_dml_pu_source テーブルを作成します。
CREATE TABLE acid2_dml_pu_source AS 
SELECT
    key,b,c 
FROM VALUES 
(1,'10',10), 
(2,'20',20), 
(3,'30',30), 
(4,'40',40), 
(5,'50',50), 
(6,'60',60) t (key,b,c);

-- マージ操作を実行します。
MERGE INTO delta_target AS t USING acid2_dml_pu_source AS s ON s.key = t.key WHEN matched THEN UPDATE SET t.b = s.b WHEN NOT matched THEN INSERT (key, b) VALUES(s.key, s.b);

次の結果が返されます。

+------------+------------+------------+
| key        | b          | c          |
+------------+------------+------------+
| 3          | 30         | NULL       |
| 4          | 40         | NULL       |
| 5          | 50         | NULL       |
| 6          | 60         | NULL       |
| 2          | 20         | 2          |
| 1          | 10         | 1          |
+------------+------------+------------+

MERGE INTO の詳細については、「MERGE INTO」をご参照ください。