
# SparkSQL建表参数规范
#### 规则
- 建表必须指定primaryKey和preCombineField。 Hudi表提供了数据更新的能力和幂等写入的能力，该能力要求数据记录必须设置主键用来识别重复数据和更新操作。不指定主键会导致表丢失数据更新能力，不指定preCombineField会导致主键重复。
  
  | **参数名称**        | **参数描述**               | **输入值** | **说明**                        |
  |:---|:---|:---|:---|
  | primaryKey      | hudi主键                 | 按需      | 必须指定，可以是复合主键但是必须全局唯一。         |
  | preCombineField | 预合并键，相同主键的多条数据按该字段进行合并 | 按需      | 必须指定，相同主键的数据会按该字段合并，不能指定多个字段。 |
     
  
- 禁止建表时将hoodie.datasource.hive_sync.enable指定为false。 指定为false将导致新写入的分区无法同步到Hive Metastore中。由于缺失新写入的分区信息，查询引擎读取该时会丢数。
  
- 禁止指定Hudi的索引类型为INMEMORY类型。 该索引仅是为了测试使用。生产环境上使用该索引将导致数据重复。
  
 
#### 建表示例
```
create table data_partition(id int, comb int, col0 int,yy int, mm int, dd int) 
using hudi                               --指定hudi 数据源
partitioned by(yy,mm,dd)                 --指定分区， 支持多级分区
location 'obs://bucket/path/data_partition'       --指定路径，使用DLI提供的元数据服务时只支持创建OBS表
options(
type='mor',                              --表类型 mor 或者 cow
primaryKey='id',                         --主键，可以是复合主键但是必须全局唯一
preCombineField='comb'                   --预合并字段，相同主键的数据会按该字段合并，当前不能指定多个字段  
)
```
