# Paimon表存储过程管理
Paimon提供了丰富的存储过程（Procedures）用于表管理，可以通过CALL语句调用。
#### compact
- **功能**：压缩数据文件，优化存储
- **参数** ：
  - table（必填）：目标表标识符
  
  - partitions：分区过滤器，逗号表示AND，分号表示OR
  
  - where：分区谓词（不能与partitions同时使用）
  
  - order_strategy：排序策略（order/zorder/hilbert/none）
  
  - order_by：排序列
  
  - options：动态选项
  
  - partition_idle_time：分区空闲时间
  
  - compact_strategy：压缩策略（full/minor）
   
- **示例** ：
  ```
  -- 基本压缩 
  CALL sys.compact(table => 'T')  
  -- 指定分区压缩 
  CALL sys.compact(table => 'T', partitions => 'p=0;p=1')  
  -- 排序压缩 
  CALL sys.compact(table => 'T', order_strategy => 'zorder', order_by => 'a,b')  
  -- 使用where条件 
  CALL sys.compact(table => 'T', where => 'p>0 and p<3', order_strategy => 'zorder', order_by => 'a,b')  
  -- minor压缩 
  CALL sys.compact(table => 'T', compact_strategy => 'minor')
  ```
  
 
#### compact_manifest
- **功能**：压缩manifest文件，优化元数据存储
- **参数** ：
  - table（必填）：目标表标识符
  
  - options：动态选项
   
- **示例** ：
  ```
  CALL sys.compact_manifest(table => 'paimon.db.table');
  ```
  
 
#### purge_files
- **功能**：清理表的所有数据文件
- **参数** ：
  - table（必填）：目标表标识符
   
- **示例** ：
  ```
  -- 危险操作：会删除所有数据 
  CALL sys.purge_files(table => 'paimon.db.table');
  ```
  
 
#### expire_snapshots
- **功能**：过期快照清理
- **参数** ：
  - table（必填）：目标表标识符
  
  - retain_max：保留的最大快照数
  
  - retain_min：保留的最小快照数
  
  - older_than：删除此时间戳之前的快照
  
  - max_deletes：一次删除的最大快照数
  
  - options：动态选项
   
- **示例** ：
  ```
  CALL sys.expire_snapshots(table => 'default.T', retain_max => 10)
  ```
  
 
#### rollback
- **功能**：回滚到指定快照或标签
- **参数** ：
  - table（必填）：目标表标识符
  
  - version：快照ID或标签名（已废弃）
  
  - snapshot：快照ID
  
  - tag：标签名
   
- **示例** ：
  ```
  -- 回滚到标签 
  CALL sys.rollback(table => 'default.T', tag => 'tag1')  
  -- 回滚到快照 
  CALL sys.rollback(table => 'default.T', snapshot => 2)  
  -- 使用version参数 
  CALL sys.rollback(table => 'default.T', version => 'my_tag') 
  CALL sys.rollback(table => 'default.T', version => 10)
  ```
  
 
#### rollback_to_watermark
- **功能**：回滚到指定水位线对应的快照
- **参数** ：
  - table（必填）：目标表标识符
  
  - watermark：水位线
   
- **示例** ：
  ```
  CALL sys.rollback_to_watermark(table => 'default.T', watermark => 1730292023000)
  ```
  
 
#### create_tag
- **功能**：基于快照创建标签
- **参数** ：
  - table（必填）：目标表标识符
  
  - tag（必填）：标签名
  
  - snapshot：快照ID
  
  - time_retained：标签保留时间
   
- **示例** ：
  ```
  -- 基于快照10创建标签 
  CALL sys.create_tag(table => 'default.T', tag => 'my_tag', snapshot => 10, time_retained => '1 d')  
  -- 基于最新快照创建标签 
  CALL sys.create_tag(table => 'default.T', tag => 'my_tag')
  ```
  
 
#### create_tag_from_timestamp
- **功能**：基于时间戳创建标签
- **参数** ：
  - table（必填）：目标表标识符
  
  - tag（必填）：标签名
  
  - timestamp（必填）：时间戳
  
  - time_retained：标签保留时间
   
- **示例** ：
  ```
  CALL sys.create_tag_from_timestamp(table => 'default.T', tag => 'my_tag', timestamp => 1724404318750, time_retained => '1 d')
  ```
  
 
#### delete_tag
- **功能**：删除标签
- **参数** ：
  - table（必填）：目标表标识符
  
  - tag（必填）：标签名（多个用逗号分隔）
   
- **示例** ：
  ```
  CALL sys.delete_tag(table => 'default.T', tag => 'my_tag')
  ```
  
 
#### rename_tag
- **功能**：重命名标签
- **参数** ：
  - table（必填）：目标表标识符
  
  - tag（必填）：原标签名
  
  - target_tag（必填）：新标签名
   
- **示例** ：
  ```
  CALL sys.rename_tag(table => 'default.T', tag => 'tag1', target_tag => 'tag2')
  ```
  
 
#### replace_tag
- **功能**：替换已有标签的信息
- **参数** ：
  - table（必填）：目标表标识符
  
  - tag（必填）：标签名
  
  - snapshot：快照ID
  
  - time_retained：保留时间
   
- **示例** ：
  ```
  CALL sys.replace_tag(table => 'default.T', tag => 'tag1', snapshot => 10, time_retained => '1 d')
  ```
  
 
#### expire_tags
- **功能**：根据时间过期标签
- **参数** ：
  - table（必填）：目标表标识符
  
  - older_than（必填）：过期时间
   
- **示例** ：
  ```
  CALL sys.expire_tags(table => 'default.T', older_than => '2024-09-06 11:00:00')
  ```
  
 
#### create_branch
- **功能**：创建分支
- **参数** ：
  - table（必填）：目标表标识符
  
  - branch（必填）：分支名
  
  - tag：标签名
   
- **示例** ：
  ```
  CALL sys.create_branch(table => 'test_db.T', branch => 'test_branch') 
  CALL sys.create_branch(table => 'test_db.T', branch => 'test_branch', tag => 'my_tag')
  ```
  
 
#### delete_branch
- **功能**：删除分支
- **参数** ：
  - table（必填）：目标表标识符
  
  - branch（必填）：分支名（多个用逗号分隔）
   
- **示例** ：
  ```
  CALL sys.delete_branch(table => 'test_db.T', branch => 'test_branch')
  ```
  
 
#### fast_forward
- **功能**：分支快进到主分支
- **参数** ：
  - table（必填）：目标表标识符
  
  - branch（必填）：分支名
   
- **示例** ：
  ```
  CALL sys.fast_forward(table => 'test_db.T', branch => 'test_branch')
  ```
  
 
#### expire_partitions
- **功能**：过期分区清理
- **参数** ：
  - table（必填）：目标表标识符
  
  - expiration_time：过期时间
  
  - timestamp_formatter：时间戳格式化器
  
  - timestamp_pattern：时间戳模式
  
  - expire_strategy：过期策略（values-time/update-time）
  
  - max_expires：最大过期数
  
  - options：动态选项
   
- **示例** ：
  ```
  CALL sys.expire_partitions(table => 'default.T', expiration_time => '1 d', timestamp_formatter => 'yyyy-MM-dd', timestamp_pattern => '$dt', expire_strategy => 'values-time')
  ```
  
 
#### mark_partition_done
- **功能**：标记分区为完成状态
- **参数** ：
  - table（必填）：目标表标识符
  
  - partitions（必填）：分区（多个用分号分隔）
   
- **示例** ：
  ```
  -- 标记单个分区 
  CALL sys.mark_partition_done(table => 'default.T', partitions => 'day=2024-07-01')  
  -- 标记多个分区 
  CALL sys.mark_partition_done(table => 'default.T', partitions => 'day=2024-07-01;day=2024-07-02')
  ```
  
 
#### remove_orphan_files
- **功能**：删除孤儿文件
- **参数** ：
  - table（必填）：目标表标识符（支持通配符 db.\*）
  
  - older_than：删除此时间之前的孤儿文件
  
  - dry_run：仅查看不删除
  
  - parallelism：并行度
  
  - mode：模式（local/distributed）
   
- **示例** ：
  ```
  CALL sys.remove_orphan_files(table => 'default.T', older_than => '2023-10-31 12:00:00') 
  CALL sys.remove_orphan_files(table => 'default.*', older_than => '2023-10-31 12:00:00') 
  CALL sys.remove_orphan_files(table => 'default.T', older_than => '2023-10-31 12:00:00', dry_run => true)
  ```
  
 
#### remove_unexisting_files
- **功能**：删除manifest中引用但不存在的文件
- **参数** ：
  - table（必填）：目标表标识符
  
  - dry_run：仅查看不删除
  
  - parallelism：并行度
   
- **示例** ：
  ```
  CALL sys.remove_unexisting_files(table => 'mydb.myt') 
  CALL sys.remove_unexisting_files(table => 'mydb.myt', dry_run => true)
  ```
  
 
#### reset_consumer
- **功能**：重置或删除消费者
- **参数** ：
  - table（必填）：目标表标识符
  
  - consumerId（必填）：消费者ID
  
  - nextSnapshotId：下一个快照ID
   
- **示例** ：
  ```
  -- 重置消费者快照ID 
  CALL sys.reset_consumer(table => 'default.T', consumerId => 'myid', nextSnapshotId => 10)  
  -- 删除消费者 
  CALL sys.reset_consumer(table => 'default.T', consumerId => 'myid')
  ```
  
 
#### clear_consumers
- **功能**：清理消费者
- **参数** ：
  - table（必填）：目标表标识符
  
  - includingConsumers：包含的消费者（支持正则）
  
  - excludingConsumers：排除的消费者（支持正则）
   
- **示例** ：
  ```
  -- 清理所有消费者 
  CALL sys.clear_consumers(table => 'default.T')  
  -- 清理指定消费者 
  CALL sys.clear_consumers(table => 'default.T', includingConsumers => 'myid.*')  
  -- 排除指定消费者 
  CALL sys.clear_consumers(table => 'default.T', includingConsumers => '', excludingConsumers => 'myid1.*')
  ```
  
 
#### refresh_object_table
- **功能**：刷新对象表
- **参数** ：
  - table（必填）：目标表标识符
   
- **示例** ：
  ```
  CALL sys.refresh_object_table('default.T')
  ```
  
 
