# Iceberg配置与类型
#### WITH参数说明
本章节介绍Flink连接器读写Iceberg表的参数配置。通过配置相关参数，可以控制Flink与Iceberg表格式之间的连接和读写行为，满足不同业务场景下的数据读写需求。
- **Source参数**
  表1**Source参数** 
  | 参数                 | 是否必填 | 类型      | 默认值   | 取值范围        | 说明                                                                                                                                                                 |
  |:---|:---|:---|:---|:---|:---|
  | streaming          | 否    | Boolean | false | true、false | 指定是否以流式模式读取Iceberg表。 true为流式读取，持续监控新快照并增量输出；false为批式读取，读取当前快照全量数据后结束。配置时需根据业务场景选择，实时ETL场景设为true。  |
  | start-snapshot-id | 否   | Long     | 无    | 有效的快照ID      | 指定流式读取的起始快照ID。 仅当streaming为true时生效。配置后将从该快照之后开始增量读取，未配置则从最早可用快照开始全量读取。配置时需确保快照ID存在且未过期。          |
  | end-snapshot-id  | 否      | Long      | 无     | 有效的快照ID     | 指定流式读取的结束快照ID。 读取到该快照后作业自动结束。仅当streaming为true时生效。配置时需确保end-snapshot-id大于start-snapshot-id。         |
  | split-size       | 否     | Long       | 128MB  | 正整数（字节数）    | 指定读取时每个Split的目标大小。 Iceberg按该大小将数据文件切分为多个Split并行读取。配置时需根据数据量和并行度调整，Split过小产生过多调度开销，Split过大导致数据倾斜。 |
     
  
- **Sink参数**
  表2**Sink参数** 
  | 参数                           | 是否必填 | 类型       | 默认值       | 取值范围                         | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
  |:---|:---|:---|:---|:---|:---|
  | write-format               | 否     | String    | parquet | parquet、orc、avro               | 指定写入Iceberg表的文件格式。 - parquet为列式存储格式，具有高压缩比和良好的查询性能。  - orc为Optimized Row Columnar格式。  - avro为行式存储格式。   配置时需根据查询引擎和性能需求选择。 |
  | commit.interval             | 否   | Duration | 1min     | 有效的持续时间，如30s、5min            | 指定流式写入时的提交间隔。 每隔该时间将缓冲的数据文件提交为一个新的Iceberg快照。配置时需在数据可见性和写入性能之间权衡，间隔过短产生过多小文件，间隔过长数据延迟高。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
  | write.target-file-size-bytes | 否    | Long   | 128MB    | 正整数（字节数）                      | 指定写入时目标文件大小。 当写入数据量达到该阈值时会滚动生成新文件。配置时需根据存储和查询性能需求调整，文件过小影响查询效率，文件过大影响写入延迟。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
  | upsert-enabled               | 否   | Boolean | false      | true、false                   | 指定是否启用UPSERT写入模式。 启用后相同主键的数据将被更新而非追加。配置时需确保Iceberg表已定义主键，否则写入将报错（以产品实际支持为准）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
  | compression-codec            | 否     | String    | zstd      | uncompressed、snappy、zstd、gzip | 指定写入数据文件的压缩编码。 不同压缩算法在压缩比和速度之间有不同权衡，zstd提供较好的压缩比和速度平衡。配置时需根据存储成本和查询性能需求选择。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
     
  
 
#### 数据类型
| Flink         | Iceberg                   |
|:---|:---|
| boolean       | boolean                   |
| tinyint     | integer                   |
| smallint     | integer                    |
| integer      | integer                    |
| bigint       | long                      |
| float        | float                      |
| double       | double                    |
| char         | string                   |
| varchar         | string                      |
| string       | string                      |
| binary         | binary                    |
| varbinary    | fixed                      |
| decimal      | decimal                     |
| date           | date                        |
| time         | time                         |
| timestamp      | timestamp without timezone |
| timestamp_ltz | timestamp with timezone   |
| array          | list                        |
| map         | map                          |
| multiset      | map                         |
| row           | struct                    |
   
