Easy-upsert-starter 轻量级数据转换存储服务-HBase使用
简介
针对轻量级数据(单次包数据量10万)处理,提供数据转移存储到MySQL、Kafka、ES、HBase、Redis 配置相应的数据源,注入IUpser对象并使用upsert方法
快速开始
我们将通过一个简单的 Demo 来阐述 Upsert功能,在此之前,我们假设您已经:
拥有 Java 开发环境以及相应 IDE
熟悉 Spring Boot
熟悉 Maven
初始化工程
创建一个空的 Spring Boot 工程
可以使用 Spring Initializer (opens new window)快速初始化一个 Spring Boot 工程
引入依赖
引入 Spring Boot Starter 父工程:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-easy-upsert-starter</artifactId>
</dependency>
</dependencies>
引入 spring-boot-starter、wu-easy-upsert-starter依赖:
HBase配置文件配置
spring:
hbase:
zookeeper-quorum: "zookeeper1:2181,zookeeper2:2181"
编码
编写实体类 UserLog.java(此处使用了 Lombok 简化代码)
@Data
@EasySmart(perfectTable = true)
public class UserLog {
private Integer userId;
@EasySmartField(name = "`current_time`")
private LocalDateTime currentTime;
@EasySmartField(name = "`content`")
private String content;
@EasySmartField(name = "is_succeed")
private boolean isSucceed;
private String type;
}
开始使用
使用IUpsert进行数据操作
/**
* description IUpsert操作数据入DB
*
* @param
* @return
* @exception/throws
* @author Jia wei Wu
* @date 2021/4/15 上午9:50
*/
@EasyUpsertDS(type = EasyUpsertType.HBASE)
@ApiOperation(tags = "HBase数据快速插入", value = "IUpsert操作数据入HBase")
@GetMapping()
public List<UserLog> upsert(@RequestParam(required = false, defaultValue = "100") Integer size) {
List<UserLog> userLogList = createUserLog(size);
iUpsert.upsert(userLogList, userLogList, new UserLog());
return userLogList;
}
使用注解实现数据插入
/**
* description 使用注解实现数据插入
*
* @param
* @return
* @exception/throws
* @author Jia wei Wu
* @date 2021/4/19 上午10:11
*/
@QuickEasyUpsert(type = EasyUpsertType.HBASE)
@ApiOperation(tags = "HBase数据快速插入", value = "使用注解实现数据插入")
@GetMapping("/size")
public List<UserLog> upsertSize(@RequestParam(required = false, defaultValue = "100") Integer size) {
return createUserLog(size);
}
EasyHashMap数据操作
@QuickEasyUpsert(type = EasyUpsertType.HBASE)
@ApiOperation(tags = "HBase数据快速插入", value = "复杂数据EasyHashMap")
@GetMapping("/easyHashMap")
public List<EasyHashMap> easyHashMap(@RequestParam(required = false, defaultValue = "1000") Integer size) {
List<EasyHashMap> easyHashMapList = new ArrayList<>();
for (int i = 0; i < size; i++) {
EasyHashMap easyHashMap = new EasyHashMap("uniqueLabel");
easyHashMap.put("第一个字段", "第一个字段");
easyHashMap.put("第二个字段", "第二个字段");
easyHashMap.put("第三个字段", "第三个字段");
easyHashMap.put("第四个字段", "第四个字段");
easyHashMapList.add(easyHashMap);
}
return easyHashMapList;
}
复杂数据操作(操作的数据为ExtractBo中两个字段被@SmartMark修饰类型为Object的非基本数据类型)
@QuickEasyUpsert(type = EasyUpsertType.HBASE)
@ApiOperation(tags = "HBase数据快速插入", value = "复杂数据DB")
@GetMapping("/complexData")
public ExtractBo complexData() {
UserLog userLog = new UserLog();
userLog.setCurrentTime(LocalDateTime.now());
userLog.setContent("创建时间:" + userLog.getCurrentTime());
userLog.setUserId(1);
UseExcel useExcel = new UseExcel();
useExcel.setCurrentTime(LocalDateTime.now());
useExcel.setDesc("默认方式导出数据");
useExcel.setExcelId(2);
useExcel.setType("默认方式双注解导出");
ExtractBo extractBo = new ExtractBo();
extractBo.setUserLog(userLog);
extractBo.setUseExcel(useExcel);
val lists = extractData(null, extractBo);
return extractBo;
}
更复杂数据操作(操作的数据为MoreExtractBo中四个字段被@SmartMark修饰类型为Object的非基本数据类型)
@QuickEasyUpsert(type = EasyUpsertType.HBASE)
@ApiOperation(tags = "HBase数据快速插入", value = "复杂数据DB")
@GetMapping("/moreExtractBo")
public MoreExtractBo moreExtractBo() {
MoreExtractBo moreExtractBo = new MoreExtractBo();
ExtractBo extractBo = complexData();
moreExtractBo.setExtractBo(extractBo);
moreExtractBo.setUseExcel(extractBo.getUseExcel());
moreExtractBo.setUserLog(extractBo.getUserLog());
moreExtractBo.setUserLogList(createUserLog(1000));
return moreExtractBo;
}
/**
* description 创建测试数据
*
* @param
* @return
* @exception/throws
* @author Jia wei Wu
* @date 2021/4/19 上午10:09
*/
public List<UserLog> createUserLog(Integer size) {
List<UserLog> userLogList = new ArrayList<>();
size = size == null ? 10000 : size;
for (int i = 0; i < size; i++) {
UserLog userLog = new UserLog();
userLog.setCurrentTime(LocalDateTime.now());
userLog.setContent("创建时间:" + userLog.getCurrentTime());
userLog.setUserId(i);
userLogList.add(userLog);
}
return userLogList;
}
注解
@EasySmart
描述注解 简单灵性数据标注 (HBase表注解)
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
namespace | String | 否 | default | 工作空间 |
tableName | String | 否 | 类名驼峰转换下划线 | 表名 |
columnFamily | String | 否 | 类全名.转换_使用 | 列蔟名 |
perfectTable | boolean | 否 | false | 当表不存在时默认新增表 |
dataDrillDown | boolean | 否 | false | 是否支持数据下钻(当类中属性含有@SmartMark并且不是基本数据类型时有效) |
@EasySmartField
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
exist | boolean | 否 | true | 字段是否存在 |
name | String | 否 | 属性名驼峰转换下划线 | 字段名 |
indexType | enum | 否 | FILE_TYPE | 字段索引类型 |
同时支持@EasyUpsertDS、@QuickEasyUpsert
核心功能
iUpsert.upsert();