
# 查询和写入Iceberg表
#### 查询Iceberg
可以查询Iceberg表中的数据。具体语法可参考[SELECT](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0254.html)。
![](https://support.huaweicloud.com/devg-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
Iceberg v3表支持查询系统列_rowid,_last_updated_sequence_number。
**注意事项**：
当前仅支持查询最新全量数据。
**示例**：
```
SELECT * FROM iceberg_ext order by col1;
```
#### 写入Iceberg表
可以向Iceberg表中添加一行或多行数据。具体语法可参考[INSERT](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0243.html)。
**注意事项**：
- 如果频繁插入小数据，可能会出现小文件问题，建议定期重写data/manifest文件以保障存储、查询效率。
- Manifest文件在DML语句事务提交时，引擎会自动尝试触发重写，以减少manifest小文件个数，防止查询性能劣化。
- 当前仅支持数据文件以Parquet格式写入。
**示例**：
```
INSERT INTO iceberg_ext VALUES (1, 'a', 1.1234567, 100.11, '2025-03-03', '2025-03-03 16:00:00');
INSERT OVERWRITE INTO iceberg_ext VALUES (1, 'b', 1.1234567, 100.11, '2025-03-03', '2025-03-03 16:00:00');
INSERT INTO iceberg_ext (col1, col2, col3, col4, col5, col6) SELECT col1, col2, col3, col4, col5, col6 FROM iceberg_table WHERE col1 > 18;
```
#### 删除Iceberg表数据
可以对Iceberg表中的一行或多行数据执行删除操作。具体语法可参考[DELETE](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0245.html)。
**注意事项**：
- 当前仅支持merge-on-read方式的delete操作。
- 如果有并发删除、更新时，delete时建议指定分区条件以减少并发冲突。
- 如果对分区表做整分区删除时，delete会通过标记元数据状态来加速删除操作，是否可以走优化可以通过explain delete查看关键字"Do speed up for delete"，如果启用了删除优化，删除返回的行数可能大于实际删除的行数。
**示例**：
```
DELETE FROM iceberg_ext where a = 1;
```
#### 更新Iceberg表数据
可以对Iceberg表中的一行或多行数据执行更新操作。具体语法可参考[UPDATE](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0248.html)。
**注意事项**：
- 当前仅支持merge-on-read方式的update操作。
- 如果有并发删除、更新时，update时建议指定分区条件以减少并发冲突。
**示例**：
```
UPDATE iceberg_ext set b = 1 where a = 1;
```
#### 合并Iceberg表数据
可以将Iceberg表与另外一个表进行Merge操作。具体语法可参考[MERGE INTO](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0246.html)。
**注意事项**：
当前仅支持merge-on-read方式的Merge操作。
**示例**：
```
MERGE into t_iceberg p1 using t_iceberg p2 on (p1.a = p2.c) when matched then delete;
```
