# HBase查询示例
本示例主要介绍 HBase查询 的使用方法。
该场景Mysql中存入订单数据,HBase中存入订单快递数据,先读取Mysql数据,通过HBase查询组件将对应的快递数据添加到Mysql的数据后面,最后输出到文本文件中。主要步骤如下:
- 准备数据
- 新建批量作业
- 画布中拖入关系型数据库输入图元、HBase查询图元、文本文件输出图元
- 配置"关系型数据库输入"组件属性
- 配置"HBase查询"组件属性
- 配置"文本文件输出"组件属性
- 通用配置
- 保存草稿
- 运行
- 提交版本
# 准备数据
在Mysql上执行创建订单主表orders_info并插入数据:
-- 订单主表
CREATE TABLE `orders_info` (
`order_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '订单ID',
`order_no` VARCHAR(32) NOT NULL COMMENT '订单编号',
`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',
`user_name` VARCHAR(50) NOT NULL COMMENT '用户名',
`total_amount` DECIMAL(10,2) NOT NULL COMMENT '订单总金额',
`order_status` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '订单状态:0-待付款 1-已付款 2-已发货 3-已完成 4-已取消',
`pay_type` TINYINT(4) DEFAULT NULL COMMENT '支付方式:1-微信 2-支付宝 3-银行卡',
`pay_time` DATETIME DEFAULT NULL COMMENT '支付时间'
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单主表';
-- 插入订单主数据
INSERT INTO `orders_info` (`order_no`, `user_id`, `user_name`, `total_amount`, `order_status`, `pay_type`, `pay_time`) VALUES
('ORD202401010001', 1001, '张三', 299.00, 3, 1, '2024-01-01 10:30:00'),
('ORD202401010002', 1002, '李四', 1599.50, 2, 2, '2024-01-01 14:20:00'),
('ORD202401020001', 1003, '王五', 89.90, 1, 3, '2024-01-01 02:20:00'),
('ORD202401020002', 1001, '张三', 459.00, 3, 1, '2024-01-02 11:45:00'),
('ORD202401030001', 1004, '赵六', 2399.00, 0, 3, '2024-01-02 10:15:00');
在HBase上执行创建订单快递关联表order_extend并插入数据:
# 订单快递关联表
create 'order_extend','cf_detail','cf_logistics','cf_extra'
# 订单 ORD202401010001 的扩展信息
put 'order_extend', 'ORD202401010001', 'cf_detail:receiver_name', '张三'
put 'order_extend', 'ORD202401010001', 'cf_detail:receiver_phone', '13800138001'
put 'order_extend', 'ORD202401010001', 'cf_detail:receiver_address', '北京市朝阳区XX街道XX号'
put 'order_extend', 'ORD202401010001', 'cf_detail:invoice_type', '1'
put 'order_extend', 'ORD202401010001', 'cf_detail:invoice_title', '张三个人'
put 'order_extend', 'ORD202401010001', 'cf_detail:remark', '请尽快发货,急用'
put 'order_extend', 'ORD202401010001', 'cf_logistics:company', '顺丰速运'
put 'order_extend', 'ORD202401010001', 'cf_logistics:tracking_no', 'SF1234567890'
put 'order_extend', 'ORD202401010001', 'cf_logistics:delivery_man', '王师傅'
put 'order_extend', 'ORD202401010001', 'cf_extra:client_source', 'APP'
put 'order_extend', 'ORD202401010001', 'cf_extra:user_grade', 'VIP'
# 订单 ORD202401010002 的扩展信息
put 'order_extend', 'ORD202401010002', 'cf_detail:receiver_name', '李四'
put 'order_extend', 'ORD202401010002', 'cf_detail:receiver_phone', '13800138002'
put 'order_extend', 'ORD202401010002', 'cf_detail:receiver_address', '上海市浦东新区XX路XX号'
put 'order_extend', 'ORD202401010002', 'cf_detail:invoice_type', '2'
put 'order_extend', 'ORD202401010002', 'cf_detail:invoice_title', '上海科技有限公司'
put 'order_extend', 'ORD202401010002', 'cf_detail:invoice_tax_no', '91440101MA5XXXXXX'
put 'order_extend', 'ORD202401010002', 'cf_logistics:company', '中通快递'
put 'order_extend', 'ORD202401010002', 'cf_logistics:tracking_no', 'ZTO9876543210'
put 'order_extend', 'ORD202401010002', 'cf_extra:client_source', 'PC'
put 'order_extend', 'ORD202401010002', 'cf_extra:user_grade', 'NORMAL'
# 订单 ORD202401020001 的扩展信息
put 'order_extend', 'ORD202401020001', 'cf_detail:receiver_name', '王五'
put 'order_extend', 'ORD202401020001', 'cf_detail:receiver_phone', '13800138003'
put 'order_extend', 'ORD202401020001', 'cf_detail:receiver_address', '广州市天河区XX路XX号'
put 'order_extend', 'ORD202401020001', 'cf_detail:remark', '放在快递柜'
put 'order_extend', 'ORD202401020001', 'cf_extra:client_source', '小程序'
# 订单 ORD202401020002 的扩展信息
put 'order_extend', 'ORD202401020002', 'cf_detail:receiver_name', '张三'
put 'order_extend', 'ORD202401020002', 'cf_detail:receiver_phone', '13800138001'
put 'order_extend', 'ORD202401020002', 'cf_detail:receiver_address', '北京市朝阳区XX街道XX号'
put 'order_extend', 'ORD202401020002', 'cf_detail:invoice_type', '1'
put 'order_extend', 'ORD202401020002', 'cf_logistics:company', '京东快递'
put 'order_extend', 'ORD202401020002', 'cf_logistics:tracking_no', 'JD5555555555'
put 'order_extend', 'ORD202401020002', 'cf_extra:client_source', 'APP'
put 'order_extend', 'ORD202401020002', 'cf_extra:user_grade', 'VIP'
# 订单 ORD202401030001 的扩展信息
put 'order_extend', 'ORD202401030001', 'cf_detail:receiver_name', '赵六'
put 'order_extend', 'ORD202401030001', 'cf_detail:receiver_phone', '13800138004'
put 'order_extend', 'ORD202401030001', 'cf_detail:receiver_address', '深圳市南山区XX科技园XX栋'
put 'order_extend', 'ORD202401030001', 'cf_detail:invoice_type', '2'
put 'order_extend', 'ORD202401030001', 'cf_detail:invoice_title', '深圳科技有限公司'
put 'order_extend', 'ORD202401030001', 'cf_detail:invoice_tax_no', '91440300MA5XXXXXX'
put 'order_extend', 'ORD202401030001', 'cf_detail:remark', '企业采购,需要合同'
put 'order_extend', 'ORD202401030001', 'cf_extra:client_source', 'PC'
put 'order_extend', 'ORD202401030001', 'cf_extra:user_grade', 'ENTERPRISE'
Mysql表orders_info中的order_no字段(订单编号)和HBase表order_extend中的rowKey进行关联。
# 新建批量作业
点击资源树节点上的【...】,选择弹出菜单【新建批量作业】。作业名称为:"HBaseLookup",选择作业类型:"转换"。
# 画布中拖入关系型数据库输入图元、HBase查询图元、文本文件输出图元
依次拖拽输入中的关系型数据库输入组件、查询中的HBase查询组件、输出中的文本文件输出组件,依次连线。如下图所示:

# 配置"关系型数据库输入"组件属性
选择Mysql数据源,然后选择刚才执行“订单主表”sql语句的数据库,最后点击获取SQL查询。

在数据库浏览中输入“orders”进行筛选,并选择订单主表,最后点击确定。

关系型数据库输入最终配置如下:

# 配置"HBase查询"组件属性
选择HBase数据源,然后选择订单快递关联表order_entend,点击添加字段并配置HBase映射表。

配置HBase映射表后,输入映射名称为“order_extend_mapping”,点击“保存映射”后点击下一步。

HBase映射表配置如下:
| 别名 | 键 | 列名 | 列簇 | 类型 | 备注 |
|---|---|---|---|---|---|
| order_no | 是 | String | hbase的rowkey对应订单编号 | ||
| receiver_name | 否 | receiver_name | cf_detail | String | 接收人名称 |
| receiver_phone | 否 | receiver_phone | cf_detail | String | 接收人手机号 |
| receiver_address | 否 | receiver_address | cf_detail | String | 接收人地址 |
| invoice_type | 否 | invoice_type | cf_detail | String | 发票类型 |
| invoice_title | 否 | invoice_title | cf_detail | String | 发票抬头 |
| remark | 否 | remark | cf_detail | String | 备注 |
| company | 否 | company | cf_logistics | String | 公司 |
| tracking_no | 否 | tracking_no | cf_logistics | String | 快递单号 |
| delivery_man | 否 | delivery_man | cf_logistics | String | 快递员 |
| client_source | 否 | client_source | cf_extra | String | 客户来源 |
| user_grade | 否 | user_grade | cf_extra | String | 用户等级 |
配置查询关键字:
- 点击获取字段,目标字段为HBase映射表(order_extend_mapping)配置的字段。
- 删除其他字段,只保留目标字段中的order_no字段。
- 点击来源字段,来源字段为Mysql中订单主表(orders_info)的字段,选择来源字段中的order_no。
该配置主要设置了用Mysql订单主表orders_info中的order_no字段去HBase进行查询。查询条件为HBase表order_no字段值=Mysql表order_no字段值。

设置查询返回字段及值,这里设置的是从HBase中返回的字段有哪些,可以根据需要进行设置,本示例返回了6个字段,如下图所示:

点击确定,完成配置。
# 配置"文本文件输出"组件属性
选择HDFS数据源,输入文件路径为/bigdata/csv/hbase-lookuo-samples,并设置扩展名为csv,最后点击下一步。

设置分隔符为逗号",",点击获取字段,字段中包含Mysql表字段和HBase查询返回字段。最后点击确定。

# 通用配置
在通用配置中可以配置任务优先级、Worker 分组、命名参数、本地参数、超时告警。
可以参考示例关系型表数据同步示例 中的"通用配置"说明。
# 保存草稿
如果所有组件属性都已设置完毕,点击【保存】按钮,可以看到保存过的历史草稿,并可以随意切换草稿。(草稿只保存最近 10 个)
可以参考示例关系型表数据同步示例 中的"保存草稿"说明。
# 运行
点击【运行】按钮,可以运行已经开发完毕的场景,在日志栏可以看运行日志及运行结果。

查看HDFS系统的/bigdata/csv/hbase-lookuo-samples.csv文件,包含Mysql字段和HBase查询返回的字段。

# 提交版本
当草稿运行正常后,点击【提交】按钮可以将该版本提交到作业调度,每次修改提交都会生成新的版本,可以看到提交的历史版本,并可以随意切换版本。
提交后的版本,可以在作业调度中进行"定时"调度配置。
可以参考示例关系型表数据同步示例 中的"提交版本"说明。