1. 在线教育业务技术介绍
2. 数据同步层内容与案例介绍
2.1 ODS层介绍
ods层,全称operational data store 操作数据存储层。主要作用是存储业务数据库中的原始操作型数据,通过同步工具定时或者实时方式抽取到ods层,进行全量保存。ods层数据一般来说不进行数据清洗,保留和原始数据一样,方便最大化还原原始数据。
2.2 MySQL上游表schema
线索表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69CREATE TABLE `pe_clue_sale` (
`dm_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`stud_id` int(11) NOT NULL COMMENT '学员ID',
`user_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '学员用户名',
`real_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`phone` varchar(15) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '注册电话',
`product_group_id` int(11) DEFAULT NULL COMMENT '产品类别 这里指产品分类(大类)',
`product_group_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '产品名称',
`pay_status` tinyint(4) DEFAULT NULL COMMENT '订单的支付状态 0 - 未下单 1- 未支付 2 - 已支付',
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
`order_time` datetime DEFAULT NULL COMMENT '下单时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`old_dm_id` int(11) DEFAULT NULL COMMENT '老线索id',
`second_clue_source` int(11) DEFAULT NULL COMMENT '线索二级来源',
`clue_source` int(11) DEFAULT NULL COMMENT '1-表单 2-在线咨询 3-手动录入4-官网注册5-微信6-销售活动',
`form_id` int(11) DEFAULT NULL COMMENT '表单ID',
`pool_index` int(11) NOT NULL COMMENT '线索池标识 ',
`status` tinyint(1) DEFAULT NULL COMMENT '1 静默 0-非静默 ',
`ts` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '时间戳',
`last_follow_sys_id` int(11) DEFAULT NULL COMMENT '上次跟进人',
`last_follow_sys_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '上次跟进人姓名',
`last_follow_time` datetime DEFAULT NULL COMMENT '上次跟进时间',
`country` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '国家编码',
`nation_code` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '国际区号',
`first_call` datetime DEFAULT NULL COMMENT '首次外呼时间',
`clue_status` tinyint(4) DEFAULT NULL COMMENT '线索状态:新线索,待跟进, 复活待跟进,跟进中,待支付,已支付,放弃',
`data_status` tinyint(4) DEFAULT NULL COMMENT '线索数据状态:open,close-won(已支付), close-lost(放弃)',
`allocate_status` tinyint(4) DEFAULT NULL COMMENT '线索分配状态:1待分配(非系统)、2已分配(系统)、3待分配(系统)、4已分配(人工)',
`allocate_time` datetime DEFAULT NULL COMMENT '仅记录最后一次分配的时间',
`reservation_time` datetime DEFAULT NULL COMMENT '预约时间',
`product_category_id` int(11) DEFAULT NULL COMMENT '产品线id(产品小类id)',
`product_category_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '产品线名称(产品小类名称)',
`curr_follow_sys_id` int(11) DEFAULT NULL COMMENT '当前跟进人id',
`curr_follow_sys_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前跟进人姓名',
`curr_follow_sys_uid` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前跟进人域用户',
`curr_follow_dept_id` int(11) DEFAULT NULL COMMENT '当前跟进人部门id',
`follow_level` tinyint(4) DEFAULT '1' COMMENT '优先级,默认为1,每增加一个意向,则加1',
`close_time` datetime DEFAULT NULL COMMENT '关闭时间',
`recover_time` datetime DEFAULT NULL COMMENT '复活时间',
`is_del` tinyint(4) DEFAULT '0' COMMENT '逻辑删除标记',
`product_type` tinyint(4) DEFAULT NULL COMMENT '线索关联的第一个订单的课程类型,引流课,正价课',
`is_resurrect` tinyint(4) DEFAULT '0' COMMENT '线索复活标记,1是复活过',
`last_clue_status` tinyint(4) DEFAULT '0' COMMENT '线索放弃之前的状态',
`reason` int(10) DEFAULT NULL,
`is_hand` tinyint(4) DEFAULT '0' COMMENT '领取方式 0--其他领取 1--手动领取',
`star_flag` tinyint(4) DEFAULT NULL COMMENT '售后转售前星标',
`rainbow_mark` tinyint(4) DEFAULT '0' COMMENT '线索彩虹标记,默认0,无标记',
`deposit_payment` tinyint(4) DEFAULT '0' COMMENT '定金支付,默认0,无标记',
`rcrai_score` double DEFAULT '0' COMMENT '睿科伦线索评级',
`course_price` tinyint(10) DEFAULT '0' COMMENT '课程价格: 0:默认, 1: 0元课, 2: 9.9元课',
`server_time_flag` tinyint(4) DEFAULT NULL COMMENT '线索服务期标识:默认null,0电销服务期,2学管服务期',
`task_pre_create_source` int(11) DEFAULT NULL,
`receive_sys_id` int(11) DEFAULT NULL COMMENT '手动领取用户id',
`receive_date` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手动领取日期',
`job_num` int(11) DEFAULT '0' COMMENT '工单数',
`job_valid_num` int(11) DEFAULT '0' COMMENT '有效工单数',
`public_status` tinyint(4) DEFAULT '0' COMMENT '公海状态:1首次待分配、2激活待分配、3转派待分配、4放弃待分配、5回收待分配、6已回收、7已放弃、8首次已分配、9激活再分配、10转派再分配、11放弃再分配、12回收再分配、13购课完结、14放弃完结、15回收完结',
`private_status` tinyint(4) DEFAULT '0' COMMENT '私海状态:1待跟进、2跟进中、3已放弃、4已回收、5已完结',
`clue_type` tinyint(4) DEFAULT '0' COMMENT '线索种类:1新线索、2转派线索、3回收线索、4放弃线索、5完结线索',
`clue_score` double DEFAULT '0' COMMENT '线索评分 0~100分',
`backup_a` tinyint(4) DEFAULT '-1' COMMENT '洗数据备份字段一',
`backup_b` tinyint(4) DEFAULT '-1' COMMENT '洗数据备份字段二',
`wx_status` tinyint(4) DEFAULT '-1' COMMENT '加微状态:0已加好友、1未绑定微信、2未加好友',
`reserve_type` tinyint(4) DEFAULT NULL COMMENT '预约时间类型 0-自动 1-手动',
`hand_wx_status` tinyint(4) DEFAULT '0' COMMENT '是否加微:0:未添加,1:已添加',
`group_status` tinyint(4) DEFAULT '0' COMMENT '是否加群:0:未添加,1:已添加',
PRIMARY KEY (`dm_id`),
KEY `idx_ts` (`ts`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='线索表'订单表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51CREATE TABLE `tb_order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_no` varchar(50) DEFAULT NULL COMMENT '订单号',
`agent_id` varchar(50) DEFAULT NULL COMMENT '代理商id',
`agent_new_id` int(11) DEFAULT NULL COMMENT '新代理商系统代理商ID',
`agent_account_id` int(11) DEFAULT NULL COMMENT '新代理商系统代理商子账户ID',
`agent_account_version_id` int(11) DEFAULT NULL COMMENT '新代理商账户版本Id',
`campus_id` int(11) DEFAULT NULL COMMENT '校园代理id',
`order_type` tinyint(4) DEFAULT '1' COMMENT '订单类型:1-购买,2-换课购买,3-退课,4-换课退课',
`subject_type` tinyint(4) DEFAULT NULL COMMENT '科目类型0-不区分文理,1-文科,2-理科,只针对高考有效',
`city` int(11) DEFAULT NULL COMMENT '开通城市代码',
`user_id` int(11) DEFAULT NULL COMMENT '用户ID',
`status` tinyint(4) DEFAULT '0' COMMENT '订单状态,0:未支付,1:已支付,2:取消',
`freeze_status` tinyint(4) DEFAULT '0' COMMENT '冻结状态,0-未冻结,1-已冻结',
`order_time` datetime DEFAULT NULL COMMENT '下订单时间',
`pay_time` datetime DEFAULT NULL COMMENT '订单支付时间',
`amount_before` decimal(12,2) DEFAULT NULL COMMENT '订单原金额',
`promote_after_amount` decimal(12,2) DEFAULT NULL COMMENT '通过优惠计算后的价格',
`amount` decimal(12,2) DEFAULT NULL COMMENT '订单实际付款总金额',
`net_value` decimal(12,2) DEFAULT NULL COMMENT '净值',
`mix_gold_content` decimal(12,2) DEFAULT '100.00' COMMENT '综合含金量',
`discount_id` int(11) DEFAULT NULL COMMENT '促销活动id',
`valid_income_percent` tinyint(4) DEFAULT NULL COMMENT '订单可确认含金量【暂时保留】',
`product_line` int(11) DEFAULT NULL COMMENT '产品线',
`payway_id` int(11) DEFAULT NULL COMMENT '支付方式【支付方式字典表id】',
`is_group_pay` tinyint(4) DEFAULT '0' COMMENT '组合支付方式,0:非组合支付,1:第三方+现金账户,2:第三方+学习卡账户,3:学习卡+现金账户,4:第三方+学习卡账户+现金账户,5:代理商+现金账户',
`partner_id` int(11) DEFAULT NULL COMMENT '商户ID',
`cancel_type` tinyint(4) DEFAULT '0' COMMENT '订单取消类型,0:用户操作,1:系跑批取消,2:客服取消',
`cancel_time` datetime DEFAULT NULL COMMENT '订单取消时间',
`order_source` tinyint(4) DEFAULT '0' COMMENT '订单来源,0:PC端,1:手机端',
`is_basic_order` tinyint(4) DEFAULT '1' COMMENT '是否原单,1:是,0:否',
`basic_order_id` int(11) DEFAULT NULL COMMENT '原单id',
`is_agent_order` tinyint(4) DEFAULT '0' COMMENT '是否代理商订单, 0:否 , 1:是',
`is_refunded` int(4) DEFAULT '1' COMMENT '是否已退款,1:否,0:是',
`is_changed` int(4) DEFAULT '1' COMMENT '是否发生换课,1:否,0:是',
`order_c_place` tinyint(4) DEFAULT '0' COMMENT '下单场景',
`order_channel` tinyint(4) DEFAULT '0' COMMENT '下单渠道, 0:官网;1:网盟;2:校代;3:天猫; 4:虚拟代理商;5:返点代理商',
`order_limit_sign` tinyint(4) DEFAULT '0' COMMENT '限时标识:0-普通订单,1-限时订单',
`order_alliance_sign` tinyint(4) DEFAULT '0' COMMENT '网盟标识:0-非网盟,1-网盟',
`order_shortcut_sign` tinyint(4) DEFAULT '0' COMMENT '快捷支付标识:0-普通订单,1-快捷支付',
`order_overdue_time` datetime DEFAULT NULL COMMENT '过期时间',
`ip` varchar(40) DEFAULT NULL COMMENT 'ip',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '时间戳',
PRIMARY KEY (`id`),
UNIQUE KEY `index_unique_order_no` (`order_no`),
KEY `index_payway_id` (`payway_id`),
KEY `ts` (`ts`) USING BTREE,
KEY `agent_new_id_paytiem` (`agent_new_id`,`pay_time`) USING BTREE,
KEY `index_order_time` (`order_time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='订单表'
2.3 案例介绍
ODS表设计
ods表数据同步一般分为按天全量同步和按天增量同步,同步的数据存储在hive ods库中,ods表按天进行分区存储。ods表命名规范如下:1
2
3ods.ods_库表_表名_更新周期(day/hour)_(da或者di)
da: 表示全量同步
di: 表示整量同步按照全量如何同步数据
比如我们要同步mysql表crm_sea.pe_clue_sale到hive ods库ods_crm_sea_pe_clue_sale_day_da源表结构如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69CREATE TABLE `pe_clue_sale` (
`dm_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`stud_id` int(11) NOT NULL COMMENT '学员ID',
`user_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '学员用户名',
`real_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`phone` varchar(15) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '注册电话',
`product_group_id` int(11) DEFAULT NULL COMMENT '产品类别 这里指产品分类(大类)',
`product_group_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '产品名称',
`pay_status` tinyint(4) DEFAULT NULL COMMENT '订单的支付状态 0 - 未下单 1- 未支付 2 - 已支付',
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
`order_time` datetime DEFAULT NULL COMMENT '下单时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`old_dm_id` int(11) DEFAULT NULL COMMENT '老线索id',
`second_clue_source` int(11) DEFAULT NULL COMMENT '线索二级来源',
`clue_source` int(11) DEFAULT NULL COMMENT '1-表单 2-在线咨询 3-手动录入4-官网注册5-微信6-销售活动',
`form_id` int(11) DEFAULT NULL COMMENT '表单ID',
`pool_index` int(11) NOT NULL COMMENT '线索池标识 ',
`status` tinyint(1) DEFAULT NULL COMMENT '1 静默 0-非静默 ',
`ts` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '时间戳',
`last_follow_sys_id` int(11) DEFAULT NULL COMMENT '上次跟进人',
`last_follow_sys_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '上次跟进人姓名',
`last_follow_time` datetime DEFAULT NULL COMMENT '上次跟进时间',
`country` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '国家编码',
`nation_code` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '国际区号',
`first_call` datetime DEFAULT NULL COMMENT '首次外呼时间',
`clue_status` tinyint(4) DEFAULT NULL COMMENT '线索状态:新线索,待跟进, 复活待跟进,跟进中,待支付,已支付,放弃',
`data_status` tinyint(4) DEFAULT NULL COMMENT '线索数据状态:open,close-won(已支付), close-lost(放弃)',
`allocate_status` tinyint(4) DEFAULT NULL COMMENT '线索分配状态:1待分配(非系统)、2已分配(系统)、3待分配(系统)、4已分配(人工)',
`allocate_time` datetime DEFAULT NULL COMMENT '仅记录最后一次分配的时间',
`reservation_time` datetime DEFAULT NULL COMMENT '预约时间',
`product_category_id` int(11) DEFAULT NULL COMMENT '产品线id(产品小类id)',
`product_category_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '产品线名称(产品小类名称)',
`curr_follow_sys_id` int(11) DEFAULT NULL COMMENT '当前跟进人id',
`curr_follow_sys_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前跟进人姓名',
`curr_follow_sys_uid` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前跟进人域用户',
`curr_follow_dept_id` int(11) DEFAULT NULL COMMENT '当前跟进人部门id',
`follow_level` tinyint(4) DEFAULT '1' COMMENT '优先级,默认为1,每增加一个意向,则加1',
`close_time` datetime DEFAULT NULL COMMENT '关闭时间',
`recover_time` datetime DEFAULT NULL COMMENT '复活时间',
`is_del` tinyint(4) DEFAULT '0' COMMENT '逻辑删除标记',
`product_type` tinyint(4) DEFAULT NULL COMMENT '线索关联的第一个订单的课程类型,引流课,正价课',
`is_resurrect` tinyint(4) DEFAULT '0' COMMENT '线索复活标记,1是复活过',
`last_clue_status` tinyint(4) DEFAULT '0' COMMENT '线索放弃之前的状态',
`reason` int(10) DEFAULT NULL,
`is_hand` tinyint(4) DEFAULT '0' COMMENT '领取方式 0--其他领取 1--手动领取',
`star_flag` tinyint(4) DEFAULT NULL COMMENT '售后转售前星标',
`rainbow_mark` tinyint(4) DEFAULT '0' COMMENT '线索彩虹标记,默认0,无标记',
`deposit_payment` tinyint(4) DEFAULT '0' COMMENT '定金支付,默认0,无标记',
`rcrai_score` double DEFAULT '0' COMMENT '睿科伦线索评级',
`course_price` tinyint(10) DEFAULT '0' COMMENT '课程价格: 0:默认, 1: 0元课, 2: 9.9元课',
`server_time_flag` tinyint(4) DEFAULT NULL COMMENT '线索服务期标识:默认null,0电销服务期,2学管服务期',
`task_pre_create_source` int(11) DEFAULT NULL,
`receive_sys_id` int(11) DEFAULT NULL COMMENT '手动领取用户id',
`receive_date` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手动领取日期',
`job_num` int(11) DEFAULT '0' COMMENT '工单数',
`job_valid_num` int(11) DEFAULT '0' COMMENT '有效工单数',
`public_status` tinyint(4) DEFAULT '0' COMMENT '公海状态:1首次待分配、2激活待分配、3转派待分配、4放弃待分配、5回收待分配、6已回收、7已放弃、8首次已分配、9激活再分配、10转派再分配、11放弃再分配、12回收再分配、13购课完结、14放弃完结、15回收完结',
`private_status` tinyint(4) DEFAULT '0' COMMENT '私海状态:1待跟进、2跟进中、3已放弃、4已回收、5已完结',
`clue_type` tinyint(4) DEFAULT '0' COMMENT '线索种类:1新线索、2转派线索、3回收线索、4放弃线索、5完结线索',
`clue_score` double DEFAULT '0' COMMENT '线索评分 0~100分',
`backup_a` tinyint(4) DEFAULT '-1' COMMENT '洗数据备份字段一',
`backup_b` tinyint(4) DEFAULT '-1' COMMENT '洗数据备份字段二',
`wx_status` tinyint(4) DEFAULT '-1' COMMENT '加微状态:0已加好友、1未绑定微信、2未加好友',
`reserve_type` tinyint(4) DEFAULT NULL COMMENT '预约时间类型 0-自动 1-手动',
`hand_wx_status` tinyint(4) DEFAULT '0' COMMENT '是否加微:0:未添加,1:已添加',
`group_status` tinyint(4) DEFAULT '0' COMMENT '是否加群:0:未添加,1:已添加',
PRIMARY KEY (`dm_id`),
KEY `idx_ts` (`ts`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='线索表'
目标hive表结构如下:
1 | CREATE EXTERNAL TABLE `ods.ods_crm_sea_pe_clue_sale_day_da`( |
注意目标表按照dt分区
最后我们使用sqoop工具进行数据同步,如下:
1 | sqoop import --connect 'jdbc:mysql://host:3018/crm_sea?tinyInt1isBit=false&zeroDateTimeBehavior=convertToNull' --username xxx --password 'xxx' --query "select \`dm_id\`,\`stud_id\`,\`user_name\`,\`real_name\`,\`phone\`,\`product_group_id\`,\`product_group_name\`,\`pay_status\`,\`pay_time\`,\`order_time\`,\`create_time\`,\`old_dm_id\`,\`second_clue_source\`,\`clue_source\`,\`form_id\`,\`pool_index\`,\`status\`,\`ts\`,\`last_follow_sys_id\`,\`last_follow_sys_name\`,\`last_follow_time\`,\`country\`,\`nation_code\`,\`first_call\`,\`clue_status\`,\`data_status\`,\`allocate_status\`,\`allocate_time\`,\`reservation_time\`,\`product_category_id\`,\`product_category_name\`,\`curr_follow_sys_id\`,\`curr_follow_sys_name\`,\`curr_follow_sys_uid\`,\`curr_follow_dept_id\`,\`follow_level\`,\`close_time\`,\`recover_time\`,\`is_del\`,\`product_type\`,\`is_resurrect\`,\`last_clue_status\`,\`reason\`,\`is_hand\`,\`star_flag\`,\`rainbow_mark\`,\`deposit_payment\`,\`rcrai_score\`,\`course_price\`,\`server_time_flag\`,\`task_pre_create_source\`,\`receive_sys_id\`,\`receive_date\`,\`job_num\`,\`job_valid_num\`,\`public_status\`,\`private_status\`,\`clue_type\`,\`clue_score\`,\`backup_a\`,\`backup_b\`,\`wx_status\`,\`reserve_type\`,\`hand_wx_status\`,\`group_status\` from crm_sea.pe_clue_sale where \$CONDITIONS" --fields-terminated-by '\001' --lines-terminated-by '\n' --null-string '\\N' --null-non-string '\\N' --hive-drop-import-delims --target-dir /input/hive/warehouse/ods.db/ods_crm_sea_pe_clue_sale_day_da/2022/05/03/ --mapreduce-job-name ods_crm_sea_pe_clue_sale -class-name ods_crm_sea_pe_clue_sale --append --split-by dm_id -m 10 |
最后,我们添加表分区,如下:
1 | alter table ods.ods_crm_sea_pe_clue_sale_day_da add if not exists partition (dt = '20220503') location '/input/hive/warehouse/ods.db/ods_crm_sea_pe_clue_sale_day_da/2022/05/03/' |
4.按照增量如何同步数据
增量同步适用于源表数据量比较大的情况(一般千万以上),这时如果每天都全量同步的话,一个是同步时间会很慢,另外同步的时候对于mysql服务io压力是比较大的。所以,这时需要增量同步。
比如:要同步mysql表db_order.tb_order到ods.ods_db_order_tb_order_day_di,我们才用增量的方式
sqoop同步语句如下:
1 | sqoop import --connect $mysql_db_url --query "select |
注意,这里需要使用源表里的增量时间字段ts来限定数据范围,每次我们都同步大于昨天的数据
最后添加分区数据:
1 | ALTER TABLE ods.ods_db_order_tb_order_day_di ADD if not exists PARTITION (dt='20220503') LOCATION '/input/hive/warehouse/ods.db/ods_db_order_tb_order_day_di/2022/05/03/' |
由于,同步到的hive ods表是按天增量数据,不方便查询全量数据,所以,我们需要在ods表上加一个整合的全量表,我们称之为mid表,如:mid_db_order_tb_order
实现逻辑如下:
1 | -- 抽取前天mid全量数据和ods今天新增数据(只有新增数据) |
3. 数据明细层(DWD层)按照主题划分
3.1 DWD层主题划分
dwd明细层,主要是按照业务过程进行主题域划分,对于在线教育,我们一般会划分为如下几个主题:
- 流量(bhv)、销售(sales)、用户(user)、产品(product)、授课(lesson)、咨询(consult)、投放(put) 七个主题域
- 按照主题域进行维度建模及多维分析形成汇总数据主题表
3.2 案例介绍
如何构建出销售主题的明细表
dwd_sales_order_product_detail: 订单产品明细表 ,主要包含订单相关信息:订单产品的销售信息,包含用户、支付时间、支付金额、净值等
这个表的构建的SQL代码如下:
1 | set hive.auto.convert.join=true; |