
# 常用参数介绍及使用场景
#### 写入篇
| 参数名称                                      | 可选值                      | 含义                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|
| hoodie.sql.bulk.insert.enable             | true、false               | 是否开启bulkinsert方式写入。                                                                                                                                                                                                                                                                                                                                      |
| hoodie.combine.before.insert              | true、false               | 执行写操作前，不对增量数据中的同主键数据进行merge操作，**注意会导致数据重复**。                                                                                                                                                                                                                                                                                                             |
| hoodie.sql.insert.mode                    | upsert、strict、non-strict | - upsert：增量数据和存量数据中的同主键数据会merge。  - strict：增量数据不能包含存量数据已有的主键，否则增量任务失败。  - non-strict：增量数据和存量数据中的同主键数据不进行merge，直接写入。   |
| hoodie.datasource.write.row.writer.enable | true、false               | 开启后，会使用spark原生的写parquet文件的方式去写数据，性能更好。                                                                                                                                                                                                                                                                                                                   |
   
常用业务场景案例：初始化Hudi表，迁移大批量数据。
![](https://support.huaweicloud.com/devg-rule-mrs/public_sys-resources/caution_3.0-zh-cn.png)
**该初始化方式只能执行一次，用于第一次迁移大批量数据到Hudi表，后续增量任务不能再继续使用。**
```
set hoodie.sql.bulk.insert.enable = true;
set hoodie.combine.before.insert = false;
set hoodie.sql.insert.mode = non-strict;
set hoodie.datasource.write.row.writer.enable = true;
insert into SinkTable select * from SourceTable;
```
#### Compaction篇
| 参数名称                                    | 可选值          | 含义                                               |
|:---|:---|:---|
| hoodie.compact.inline                   | true，false   | 开启/关闭compaction。                                 |
| hoodie.schedule.compact.only.inline     | true，false   | 开启compaction之后，再设置该参数为true将会只生成compaction计划。     |
| hoodie.run.compact.only.inline          | true，false   | 开启compaction之后，再设置该参数为true将会只执行已存在的compaction计划。 |
| hoodie.compact.inline.max.delta.commits | X (大于0的int值) | 开启compaction之后，写任务的提交数超过X次才会触发compaction。        |
   
#### Clean篇
| 参数名称                            | 可选值          | 含义                          |
|:---|:---|:---|
| hoodie.clean.automatic          | true，false   | 开启/关闭clean。                 |
| hoodie.clean.async              | true，false   | false，不要开启。                 |
| hoodie.cleaner.commits.retained | X (大于0的int值) | 开启clean之后，保留最后X次写提交对应的数据文件。 |
   
#### Archive篇
| 参数名称                     | 可选值          | 含义                             |
|:---|:---|:---|
| hoodie.archive.automatic | true，false   | 开启/关闭archive。                  |
| hoodie.archive.async     | true，false   | false，不要开启。                    |
| hoodie.keep.min.commits  | X (大于0的int值) | 开启archive之后，至少保留最后X次写提交对应的元数据。 |
| hoodie.keep.max.commits  | Y (大于0的int值) | 开启archive之后，至多保留最后Y次写提交对应的元数据。 |
   
#### 运维篇
**下面这3种案例足够用来快速运维所有的MOR表和COW表，参数请勿私自修改，该运维手段不适合作为长期的运维，正常的运维过程请参考[选择合适的表服务执行方式](https://support.huaweicloud.com/devg-rule-mrs/mrs_07_450207.html)章节。**
- 常用业务场景案例一：MOR表里有很多compaction计划都没有执行，需要手动立即运行Hudi表中的所有compaction计划。
  ![](https://support.huaweicloud.com/devg-rule-mrs/public_sys-resources/note_3.0-zh-cn.png)
  此场景对写入任务没有任何影响，前提是Hudi表里有compaction计划，否则不起作用。
  ```
  set hoodie.clean.automatic = false;
  set hoodie.clean.async = false;
  set hoodie.archive.automatic = false;
  set hoodie.archive.async= false;
  set hoodie.compact.inline = true;
  set hoodie.run.compact.only.inline = true;
  run compaction on SinkTable;
  ```
  
- 常用业务场景案例二：MOR表没有做过compaction，表里也没有任何compaction计划，需要紧急执行compaction/clean/archive来提升性能。
  ![](https://support.huaweicloud.com/devg-rule-mrs/public_sys-resources/caution_3.0-zh-cn.png)
  使用此场景要**确保写入任务已经停止或者写入任务此时没有数据写入**。
  ```
  set hoodie.compact.inline = true;
  set hoodie.compact.inline.max.delta.commits = 1;
  set hoodie.clean.automatic = false;
  set hoodie.clean.async = false;
  set hoodie.cleaner.commits.retained = 2;
  set hoodie.archive.automatic = false;
  set hoodie.archive.async= false;
  set hoodie.keep.min.commits = 3;
  set hoodie.keep.max.commits = 4;
  run compaction on <database name>. <table name>;
  run clean on <database name>. <table name>;
  run archivelog on <database name>.<table name>;
  ```
  
- 常用业务场景案例三：COW表或者MOR表+insert overwrite，如果没有做过clean和archive，数据文件的版本以及元数据数量都很多，需要进行一次彻底清理。
  ![](https://support.huaweicloud.com/devg-rule-mrs/public_sys-resources/caution_3.0-zh-cn.png)
  使用此场景要**确保写入任务已经停止**。
  ```
  set hoodie.cleaner.commits.retained = 1;
  set hoodie.keep.min.commits = 2;
  set hoodie.keep.max.commits = 3;
  run clean on <database name>. <table name>;
  run archivelog on <database name>.<table name>;
  ```
  
 
