Spark读写Hudi开发规范
Spark写Hudi各种写入模式参数规范说明
类型 |
说明 |
开启参数 |
场景选择 |
特点 |
---|---|---|---|---|
upsert |
update + insert Hudi默认写入类型,写入具有更新能力。 |
默认,无需参数开启。
|
默认选择。 |
优点:
缺点:
|
append |
数据无更新直接写入 |
|
追求高吞吐,无数据更新场景。 |
优点:
缺点:
|
delete |
删除操作 |
无需参数,直接使用delete语法即可: delete from tableName where primaryKey='id1'; |
SQL删除数据数据场景。 |
和upsert类型一样。 |
Insert overwrite |
覆写分区 |
无需参数,直接使用insert overwrite语法即可: insert overwrite table tableName partition(dt ='2021-01-04') select * from srcTable; |
分区级别重新。 |
覆写分区。 |
Insert overwrite table |
覆写全表 |
无需参数,直接使用insert overwrite语法即可: insert overwrite table tableName select * from srcTable; |
全部重写。 |
覆写全表。 |
Bulk_insert |
批量导入 |
|
建议表初始化搬迁的时候使用。 |
和append模式一样。 |
Spark增量读取Hudi参数规范
类型 |
说明 |
开启参数 |
场景选择 |
特点 |
---|---|---|---|---|
snapshot |
实时数据读取。 |
默认,无需参数开启 SparkSQL: set hoodie.datasource.query.type=snapshot; DataSource Api: val df = spark.read .format("hudi") .option("hoodie.datasource.query.type","snapshot") .load("tablePath") |
默认选择 |
每次读的数据都是最新的,数据写入即可见。 |
incremental |
增量查询,只查询两次commit之间的数据 |
|
流式加工场景, 每次只拉取增量而非全量数据计算。 |
只读两次commit之间的数据。不是全表扫描,比通过where条件取两次commit之前的数据效率要高很多。 |
read_optimized |
读优化视图。 只读取表里面parquet文件中的数据, 对于mor表来说,新增数据会写到log里面,故该模式读取的数据不是最新的。 |
对查询性能有要求,但是可以接受一定时间的数据时延。 |
对于mor表来说,这种读方式性能比读实时表快很多。该读取方式不会读log数据,这些log中新增数据compaction之后才能读到,因此使用该模式读取数据有一定的数据时延。 |