
# ICEBERG表服务函数
#### iceberg_expire_snapshots
**描述**：Iceberg每个commit都会生成一个新快照，同时保留旧数据和元数据，以便进行快照隔离和time travel。expire snapshots可以用来清理不再需要的旧快照以及仅被不需要快照包含的数据文件，以提高查询、成本效率。
**注意** **事项**：
- 要明确旧快照的清理、保留策略。执行旧快照清理后，被删除的旧快照数据将无法再通过常规查询访问，如果有正在运行的查询依赖于即将过期的快照数据，可能会导致查询失败或结果不准确。
- 执行expire snapshots，retain_last、older_than、snapshot_ids可能会出现条件互相冲突的场景，iceberg不是严格按照传入条件处理的，会尽可能多地保留snapshots。
**语法**：
```
iceberg_expire_snapshots('schema.table','older_than')
iceberg_expire_snapshots('schema.table','older_than', retain_last, 'snapshot_ids')
```
**入参说明**：
| **名称**       | **类型**    | **默认值** | **是否必填** | **说明**                                                                                                           |
|:---|:---|:---|:---|:---|
| table        | string    | 无       | 是        | 要操作的表                                                                                                            |
| older_than   | timestamp | 5天前     | 是        | 超过该时限的快照将被删除 注意：需要输入确定具体时区，避免误解。可以在输入时指定，或者通过set timezone=xxx指定。 |
| retain_last  | int       | 1       | 否        | 保留多少个snapshots。                                                                                                  |
| snapshot_ids | string    | 无       | 否        | 以分号（;）分隔, 可以传入多个snapshot_id。                                                                                     |
   
**返回值**：
| 名称                                  | 说明                       |
|:---|:---|
| deleted_data_files_count            | 被删除的数据文件数量。              |
| deleted_position_delete_files_count | 被删除的position delete文件数量。 |
| deleted_equality_delete_files_count | 被删除的equality delete文件数量。 |
| deleted_manifest_files_count        | 被删除的清单文件数量。              |
| deleted_manifest_lists_count        | 被删除的快照文件数量。              |
| deleted_statistics_files_count      | 被删除的统计文件数量。              |
   
#### iceberg_rewrite_manifests
**描述**：Iceberg表跟踪每个数据文件，数据文件越多，存储在快照文件中的元数据就越多，rewrite manifests可以重写表的清单，优化扫描规划。
注意事项：该操作会生成新的清单文件，可能影响正在进行的查询和写入操作，导致元数据冲突，应避免与其他操作并发执行。
**语法**：
```
iceberg_rewrite_manifests('schema.table')
```
**入参说明**：
| **名称** | **类型** | **默认值** | **是否必填** | **说明** |
|:---|:---|:---|:---|:---|
| table  | string | 无       | 是        | 要操作的表。 |
   
**返回值**：
| 名称                        | 说明          |
|:---|:---|
| rewritten_manifests_count | 被重写的清单文件数量。 |
| added_manifests_count     | 新增的清单文件数量。  |
   
#### iceberg_remove_orphanfiles
描述：对于未被任何Iceberg元数据文件引用的文件，我们称之为孤立文件，这类文件可能由失败的事务、并发操作未能成功提交、旧快照清理失败、元数据清理失败等原因造成，通常可以删除。
注意事项：确保无并发写操作，删除过程中，如果有运行中的写入任务，可能会误删正在生成的文件（未提交的临时文件）。
**语法**：
```
iceberg_remove_orphanfiles('schema.table')
iceberg_remove_orphanfiles('schema.table', 'older_than', 'location')
```
**入参说明**：
| **名称**     | **类型**    | **默认值** | **是否必填** | **说明**                 |
|:---|:---|:---|:---|:---|
| table      | string    | 无       | 是        | 要操作的表                  |
| older_than | timestamp | 三天前     | 否        | 早于older_than的孤立文件将被删除。 |
| location   | string    | 表根目录    | 否        | location下的孤立文件将被删除。    |
   
**返回值**：
| 名称                   | 说明             |
|:---|:---|
| orphan_file_location | 被认定为孤立文件的文件路径。 |
   
#### iceberg_add_files
**描述：**将目标文件夹下的所有文件添加到iceberg表中。
该语法会递归扫描目标文件夹下的所有文件，并添加到iceberg表中。
所有文件必须满足：
- 必须为parquet文件格式。
- parquet文件中的列名、列类型、列个数（包括分区列）必须与目标表一致。
- 单个parquet文件中的所有数据必须隶属于同一个分区。
**语法**：
```
iceberg_add_files(table,foldername,iscopy)
```
**入参说明**：
- table：regclass类型，表名。
- foldername：text类型，文件夹路径列表，支持多个路径，以逗号分隔。
- iscopy：bool类型，是否拷贝。
**返回值：**bool，是否执行成功。
#### iceberg_show_snapshots
**描述：**查询指定ICEBERG表的快照信息。
**语法**：
```
iceberg_show_snapshots(table)
```
**入参说明**：table：regclass类型，表名。
**返回值：**
- sequence_number：int64类型，快照序号。
- snapshot_id：int64类型，快照ID。
- create_time：timestamptz类型，快照创建时间。
- parent_id：int64类型，快照的父亲节点，如果为0，表示无父亲节点。
- operation：text类型，本次快照的操作类型。
- manifestlist：text类型，快照对应的manifest list路径。
- summary：text类型，快照统计信息。
 
