# 向Paimon表中写入数据
**INSERT INTO**
```
INSERT INTO my_table VALUES (1, 'Alice', '2024-01-01'); 
INSERT INTO my_table SELECT * FROM source_table;
```
**INSERT OVERWRITE**
```
-- 覆盖整个表
INSERT OVERWRITE my_table SELECT ...;  
-- 覆盖指定分区
INSERT OVERWRITE my_table PARTITION (key1 = value1, key2 = value2) SELECT ...;
```
**动态覆盖分区**
Spark默认使用静态覆盖模式。启用动态覆盖需设置：
```
SET spark.sql.sources.partitionOverwriteMode=dynamic; 
INSERT OVERWRITE my_table VALUES (3, 'p1');
```
**TRUNCATE TABLE**
```
TRUNCATE TABLE my_table;
```
**UPDATE（仅主键表）**
```
UPDATE my_table SET name = 'Alice Updated' WHERE id = 1;  
-- 更新struct字段
UPDATE t SET s.c2 = 'a_new' WHERE s.c1 = 1;
```
**注意**：主键表不支持更新主键列的值。
**DELETE（仅主键表）**
```
DELETE FROM my_table WHERE currency = 'UNKNOWN';
```
**MERGE INTO（仅主键表）**
```
MERGE INTO target
USING source
ON target.a = source.a
WHEN MATCHED THEN
    UPDATE SET *
WHEN NOT MATCHED THEN
    INSERT *;
```
带条件的MERGE INTO：
```
MERGE INTO target
USING source
ON target.a = source.a
WHEN MATCHED AND target.a = 5 THEN
    UPDATE SET b = source.b + target.b
WHEN MATCHED AND source.c > 'c2' THEN
    UPDATE SET *
WHEN MATCHED THEN
    DELETE
WHEN NOT MATCHED AND c > 'c9' THEN
    INSERT (a, b, c) VALUES (a, b * 1.1, c)
WHEN NOT MATCHED THEN
    INSERT *;
```
**注意**：在UPDATE子句中，主键表不支持更新主键列的值。
