第二部分:业务数据调研及ETL
整个用户画像(UserProfile)项目中,数据、业务及技术流程图如下所示:

其中数据源存储在业务系统数据库:MySQL 数据库中,采用SQOOP全量/增量将数据抽取到HDFS(Hive表中),通过转换为HFile文件加载到HBase表。
1)、编写MapReduce程序
2)、编写Spark程序(推荐时用Spark编程)

1)、为什么将订单相关数据【订单数据和订单商品数据】存储到HBase表中????
特点:数据量比较大
存储HBase:存储海量数据、查询检索
2)、实际项目来说【访问行为日志】数据存储到Hive表中
数据仓库分层:
ODS层、DW层和APP层
3)、特殊:模拟的所有业务数据存储在RDBMs表中,为了简化整个项目开发,重点在于标签开发,将所有数据迁移到HBase表中。

1、电商数据(数据源)
所有的业务数据,都是编写程序模拟产生的,直接保存到MySQL数据库的表中。
1.1、MySQL数据库
在数据库【tags_dat】中包含四张表:

1)、订单商品表:tbl_goods
2)、用户表:tbl_users
3)、行为日志表:tbl_logs
4)、订单数据表:tbl_orders


1.2、表的结构
电商系统中四张表的结构如下,数据存储在MySQL数据库中(为了方便模拟业务数据,存储MySQL表)。
1.2.1、数据库Database
数据库**tags_dat,构建语句如下:

1.2.2、订单商品信息表:tbl_goods
电商网站中订单商品
goods**基本信息表,总共97个字段,除去主键ID外96个字段。

CREATE TABLE `tbl_goods` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`siteId` int(10) unsigned NOT NULL,`isTest` tinyint(1) unsigned NOT NULL COMMENT '是否是测试网单',`hasRead` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已读,测试字段',`supportOneDayLimit` tinyint(1) unsigned NOT NULL COMMENT '是否支持24小时限时达',`orderId` int(10) unsigned NOT NULL,`cOrderSn` varchar(50) NOT NULL COMMENT 'child order sn 子订单编码 C0919293',`isBook` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否是预订网单',`cPaymentStatus` smallint(3) unsigned NOT NULL COMMENT '子订单付款状态',`cPayTime` int(10) unsigned NOT NULL COMMENT '子订单付款时间',`productType` varchar(50) NOT NULL COMMENT '商品类型',`productId` int(10) unsigned NOT NULL COMMENT '抽象商品id(可能是商品规格,也可能是套装,由商品类型决定)',`productName` varchar(100) NOT NULL COMMENT '商品名称:可能是商品名称加颜色规格,也可能是套装名称',`sku` varchar(60) NOT NULL COMMENT '货号',`price` decimal(10,2) unsigned NOT NULL COMMENT '商品单价',`number` smallint(5) unsigned NOT NULL COMMENT '数量',`lockedNumber` int(10) unsigned NOT NULL COMMENT '曾经锁定的库存数量',`unlockedNumber` int(10) unsigned NOT NULL COMMENT '曾经解锁的库存数量',`productAmount` decimal(10,2) NOT NULL COMMENT '此字段专为同步外部订单而加,商品总金额=price*number+shippingFee-优惠金额,但优惠金额没在本系统存储',`balanceAmount` decimal(10,2) unsigned NOT NULL COMMENT '余额扣减',`couponAmount` decimal(10,2) unsigned NOT NULL COMMENT '优惠券抵扣金额',`esAmount` decimal(10,2) unsigned NOT NULL COMMENT '节能补贴金额',`giftCardNumberId` int(10) unsigned NOT NULL COMMENT '礼品卡号ID,关联GiftCardNumbers表的主键',`usedGiftCardAmount` decimal(10,2) unsigned NOT NULL COMMENT '礼品卡抵用的金额',`couponLogId` int(10) unsigned NOT NULL COMMENT '使用的优惠券记录ID',`activityPrice` decimal(10,2) unsigned NOT NULL COMMENT '活动价,当有活动价时price的值来源于activityPrice',`activityId` int(10) unsigned NOT NULL COMMENT '活动ID',`cateId` int(11) NOT NULL COMMENT '分类ID',`brandId` int(11) NOT NULL COMMENT '品牌ID',`netPointId` int(10) NOT NULL COMMENT '网点id',`shippingFee` decimal(10,2) NOT NULL COMMENT '配送费用',`settlementStatus` tinyint(1) NOT NULL COMMENT '结算状态0 未结算 1已结算 ',`receiptOrRejectTime` int(10) unsigned NOT NULL COMMENT '确认收货时间或拒绝收货时间',`isWmsSku` tinyint(1) NOT NULL COMMENT '是否淘宝小家电',`sCode` varchar(10) NOT NULL COMMENT '库位编码',`tsCode` varchar(10) NOT NULL DEFAULT '' COMMENT '转运库房编码',`tsShippingTime` int(11) NOT NULL DEFAULT '0' COMMENT '转运时效(小时)',`status` smallint(3) NOT NULL COMMENT '状态',`productSn` varchar(60) NOT NULL COMMENT '商品条形码',`invoiceNumber` varchar(60) NOT NULL COMMENT '运单号',`expressName` varchar(255) NOT NULL COMMENT '快递公司',`invoiceExpressNumber` varchar(60) NOT NULL COMMENT '发票快递单号',`postMan` varchar(20) NOT NULL COMMENT '送货人',`postManPhone` varchar(15) NOT NULL COMMENT '送货人电话',`isNotice` smallint(5) NOT NULL COMMENT '是否开启预警',`noticeType` smallint(5) NOT NULL,`noticeRemark` varchar(255) NOT NULL,`noticeTime` varchar(8) NOT NULL COMMENT '预警时间',`shippingTime` int(10) NOT NULL COMMENT '发货时间',`lessOrderSn` varchar(50) NOT NULL COMMENT 'less 订单号',`waitGetLesShippingInfo` tinyint(1) unsigned NOT NULL COMMENT '是否等待获取LES物流配送节点信息',`getLesShippingCount` int(10) unsigned NOT NULL COMMENT '已获取LES配送节点信息的次数',`outping` varchar(20) NOT NULL COMMENT '出库凭证',`lessShipTime` int(10) NOT NULL COMMENT 'less出库时间',`closeTime` int(10) unsigned NOT NULL COMMENT '网单完成关闭或取消关闭时间',`isReceipt` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '是否需要发票',`isMakeReceipt` int(1) NOT NULL DEFAULT '1' COMMENT '开票状态',`receiptNum` text NOT NULL COMMENT '发票号',`receiptAddTime` varchar(30) NOT NULL COMMENT '开票时间',`makeReceiptType` tinyint(3) NOT NULL COMMENT '开票类型 0 初始值 1 库房开票  2 共享开票',`shippingMode` varchar(60) NOT NULL COMMENT '物流模式,值为B2B2C或B2C',`lastTimeForShippingMode` int(10) unsigned NOT NULL COMMENT '最后修改物流模式的时间',`lastEditorForShippingMode` varchar(200) NOT NULL COMMENT '最后修改物流模式的管理员',`systemRemark` text NOT NULL COMMENT '系统备注,不给用户显示',`tongshuaiWorkId` int(11) NOT NULL DEFAULT '-1' COMMENT '统帅定制作品ID',`orderPromotionId` int(10) unsigned NOT NULL COMMENT '下单立减活动ID',`orderPromotionAmount` decimal(10,2) unsigned NOT NULL COMMENT '下单立减金额',`externalSaleSettingId` int(10) unsigned NOT NULL COMMENT '淘宝套装设置ID',`recommendationId` int(10) unsigned NOT NULL COMMENT '推荐购买ID',`hasSendAlertNum` tinyint(1) unsigned NOT NULL COMMENT '是否已发送了购买数据报警邮件(短信)',`isNoLimitStockProduct` tinyint(1) unsigned NOT NULL COMMENT '是否是无限制库存量的商品',`hpRegisterDate` int(11) DEFAULT '0' COMMENT 'HP注册时间',`hpFailDate` int(11) DEFAULT '0' COMMENT 'HP派工失败时间',`hpFinishDate` int(11) DEFAULT '0' COMMENT 'HP派工成功时间',`hpReservationDate` int(11) NOT NULL DEFAULT '0' COMMENT 'HP回传预约送货时间',`shippingOpporunity` tinyint(4) NOT NULL DEFAULT '0' COMMENT '活动订单发货时机,0定金发货 1尾款发货',`isTimeoutFree` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否超时免单 0未设置 1是 2否',`itemShareAmount` decimal(10,2) DEFAULT '0.00' COMMENT '订单优惠价格分摊',`lessShipTInTime` int(10) DEFAULT '0' COMMENT 'less转运入库时间',`lessShipTOutTime` int(10) DEFAULT '0' COMMENT 'less转运出库时间',`cbsSecCode` varchar(10) DEFAULT '' COMMENT 'cbs库位',`points` int(11) DEFAULT '0' COMMENT '网单使用积分',`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',`splitFlag` tinyint(3) unsigned NOT NULL COMMENT '拆单标志,0:未拆单;1:拆单后旧单;2:拆单后新单',`splitRelateCOrderSn` varchar(50) NOT NULL COMMENT '拆单关联单号',`channelId` tinyint(4) DEFAULT '0' COMMENT '区分EP和商城',`activityId2` int(11) NOT NULL DEFAULT '0' COMMENT '运营活动id',`pdOrderStatus` int(4) NOT NULL DEFAULT '0' COMMENT '日日单状态',`omsOrderSn` varchar(20) NOT NULL DEFAULT '' COMMENT '集团OMS单号',`couponCode` varchar(20) NOT NULL DEFAULT '' COMMENT '优惠码编码',`couponCodeValue` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '优惠码优惠金额',`storeId` int(10) unsigned NOT NULL DEFAULT '0',`storeType` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '店铺类型',`stockType` varchar(10) NOT NULL DEFAULT 'WA',`o2oType` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT 'o2o网单类型1非O2O网单2线下用户分销商城3商城分销旗舰店4创客',`brokerageType` varchar(100) DEFAULT NULL,`ogColor` varchar(30) DEFAULT NULL COMMENT '算法预留字段',PRIMARY KEY (`id`),KEY `orderId` (`orderId`),KEY `sCode` (`sCode`),KEY `cOrderSn` (`cOrderSn`),KEY `netPointId` (`netPointId`),KEY `isNotice` (`isNotice`),KEY `noticeTime` (`noticeTime`),KEY `closeTime` (`closeTime`),KEY `cPayTime` (`cPayTime`),KEY `productId` (`productId`),KEY `activityId` (`activityId`),KEY `idx_OrderProducts_cPaymentStatus_status` (`cPaymentStatus`,`status`),KEY `idx_OrderProducts_waitGetLesShippingInfo` (`waitGetLesShippingInfo`),KEY `idx_OrderProducts_status` (`status`),KEY `idx_OrderProducts_sku` (`sku`),KEY `ix_OrderProducts_lessShipTime` (`lessShipTime`),KEY `modified` (`modified`),KEY `ix_OrderProducts_receiptAddTime` (`receiptAddTime`),KEY `idx_pdOrderStatus` (`pdOrderStatus`),KEY `idx_lessShipTInTime` (`lessShipTInTime`)
) ENGINE=InnoDB AUTO_INCREMENT=3853572 DEFAULT CHARSET=utf8;

1.2.3、会员信息表:tbl_users
电商网站中用户基本信息表,总共38个字段,除去主键ID外共37个字段信息。

CREATE TABLE `tbl_users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`siteId` int(10) unsigned NOT NULL,`avatarImageFileId` varchar(255) DEFAULT NULL,`email` varchar(120) DEFAULT NULL,`username` varchar(60) NOT NULL COMMENT '用户名',`password` varchar(32) DEFAULT NULL COMMENT '密码',`salt` varchar(10) DEFAULT NULL COMMENT '扰码',`registerTime` int(10) unsigned NOT NULL COMMENT '注册时间',`lastLoginTime` int(10) unsigned DEFAULT NULL COMMENT '最后登录时间',`lastLoginIp` varchar(15) DEFAULT NULL COMMENT '最后登录ip',`memberRankId` int(10) unsigned DEFAULT NULL COMMENT '特殊会员等级id,0表示非特殊会员等级',`bigCustomerId` int(10) unsigned DEFAULT NULL COMMENT '所属的大客户ID',`lastAddressId` int(10) unsigned DEFAULT NULL COMMENT '上次使用的收货地址',`lastPaymentCode` varchar(20) DEFAULT NULL COMMENT '上次使用的支付方式',`gender` tinyint(3) unsigned DEFAULT NULL COMMENT '性别:0保密1男2女',`birthday` date DEFAULT NULL COMMENT '生日',`qq` varchar(20) DEFAULT NULL,`job` varchar(60) DEFAULT NULL COMMENT '职业;1学生、2公务员、3军人、4警察、5教师、6白领',`mobile` varchar(15) DEFAULT NULL COMMENT '手机',`politicalFace` int(1) unsigned DEFAULT NULL COMMENT '政治面貌:1群众、2党员、3无党派人士',`nationality` varchar(20) DEFAULT NULL COMMENT '国籍:1中国大陆、2中国香港、3中国澳门、4中国台湾、5其他',`validateCode` varchar(32) DEFAULT NULL COMMENT '找回密码时的验证code',`pwdErrCount` tinyint(3) DEFAULT NULL COMMENT '密码输入错误次数',`source` varchar(20) DEFAULT NULL COMMENT '会员来源',`marriage` varchar(60) DEFAULT NULL COMMENT '婚姻状况:1未婚、2已婚、3离异',`money` decimal(15,2) DEFAULT NULL COMMENT '账户余额',`moneyPwd` varchar(32) DEFAULT NULL COMMENT '余额支付密码',`isEmailVerify` tinyint(1) DEFAULT NULL COMMENT '是否验证email',`isSmsVerify` tinyint(1) DEFAULT NULL COMMENT '是否验证短信',`smsVerifyCode` varchar(30) DEFAULT NULL COMMENT '邮件验证码',`emailVerifyCode` varchar(30) DEFAULT NULL COMMENT '短信验证码',`verifySendCoupon` tinyint(1) DEFAULT NULL COMMENT '是否验证发送优惠券',`canReceiveEmail` tinyint(1) DEFAULT NULL COMMENT '是否接收邮件',`modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',`channelId` tinyint(4) DEFAULT '0' COMMENT '??EP???',`grade_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '等级ID',`nick_name` varchar(60) NOT NULL DEFAULT '' COMMENT '昵称',`is_blackList` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否黑名单 : 0:非黑名单  1:黑名单',PRIMARY KEY (`id`),KEY `siteId` (`siteId`,`email`),KEY `memberRankId` (`memberRankId`)
) ENGINE=InnoDB AUTO_INCREMENT=951 DEFAULT CHARSET=utf8;

1.2.4、行为日志表:tbl_logs
电商网站中用户浏览网站访问行为日志数据(浏览数据),总共11个字段,此类数据属于最多。

CREATE TABLE `tbl_logs` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`log_id` varchar(50) DEFAULT NULL,`remote_ip` varchar(50) DEFAULT NULL,`site_global_ticket` varchar(250) DEFAULT NULL,`site_global_session` varchar(250) DEFAULT NULL,`global_user_id` varchar(50) DEFAULT NULL,`cookie_text` mediumtext,`user_agent` varchar(250) DEFAULT NULL,`ref_url` varchar(250) DEFAULT NULL,`loc_url` varchar(250) DEFAULT NULL,`log_time` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`),KEY `log_time` (`log_time`)
) ENGINE=MyISAM AUTO_INCREMENT=1160286 DEFAULT CHARSET=utf8;

1.2.5、订单数据表:tbl_orders
电商网站中用户购买物品下单的订单数据,总共112个字段,记录每个订单详细信息。

CREATE TABLE `tbl_orders` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`siteId` int(10) unsigned NOT NULL,`isTest` tinyint(1) unsigned NOT NULL COMMENT '是否是测试订单',`hasSync` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已同步(临时添加)',`isBackend` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '是否为后台添加的订单',`isBook` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '是否为后台添加的订单',`isCod` tinyint(1) unsigned NOT NULL COMMENT '是否是货到付款订单',`notAutoConfirm` tinyint(1) unsigned NOT NULL COMMENT '是否是非自动确认订单',`isPackage` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否为套装订单',`packageId` int(10) unsigned NOT NULL COMMENT '套装ID',`orderSn` varchar(50) NOT NULL COMMENT '订单号',`relationOrderSn` varchar(50) NOT NULL COMMENT '关联订单编号',`memberId` int(10) unsigned NOT NULL COMMENT '会员id',`predictId` int(10) unsigned NOT NULL COMMENT '会员购买预测ID',`memberEmail` varchar(120) NOT NULL COMMENT '会员邮件',`addTime` int(10) unsigned NOT NULL,`syncTime` int(10) unsigned NOT NULL COMMENT '同步到此表中的时间',`orderStatus` smallint(3) NOT NULL COMMENT '订单状态',`payTime` int(10) unsigned NOT NULL COMMENT '在线付款时间',`paymentStatus` smallint(3) unsigned NOT NULL COMMENT '付款状态:0 买家未付款 1 买家已付款 ',`receiptConsignee` varchar(20) NOT NULL COMMENT '发票收件人',`receiptAddress` varchar(255) NOT NULL COMMENT '发票地址',`receiptZipcode` varchar(20) NOT NULL COMMENT '发票邮编',`receiptMobile` varchar(30) NOT NULL COMMENT '发票联系电话',`productAmount` decimal(10,2) unsigned NOT NULL COMMENT '商品金额,等于订单中所有的商品的单价乘以数量之和',`orderAmount` decimal(10,2) unsigned NOT NULL COMMENT '订单总金额,等于商品总金额+运费',`paidBalance` decimal(10,2) unsigned NOT NULL COMMENT '余额账户支付总金额',`giftCardAmount` decimal(10,2) unsigned NOT NULL COMMENT '礼品卡抵用金额',`paidAmount` decimal(10,2) unsigned NOT NULL COMMENT '已支付金额',`shippingAmount` decimal(10,2) NOT NULL COMMENT '淘宝运费',`totalEsAmount` decimal(10,2) unsigned NOT NULL COMMENT '网单中总的节能补贴金额之和',`usedCustomerBalanceAmount` decimal(10,2) unsigned NOT NULL COMMENT '使用的客户的余额支付金额',`customerId` int(10) unsigned NOT NULL COMMENT '用余额支付的客户ID',`bestShippingTime` varchar(100) NOT NULL COMMENT '最佳配送时间描述',`paymentCode` varchar(20) NOT NULL COMMENT '支付方式code',`payBankCode` varchar(20) NOT NULL COMMENT '网银代码',`paymentName` varchar(60) NOT NULL COMMENT '支付方式名称',`consignee` varchar(60) NOT NULL COMMENT '收货人',`originRegionName` varchar(255) NOT NULL COMMENT '原淘宝收货地址信息',`originAddress` varchar(255) NOT NULL COMMENT '原淘宝收货人详细收货信息',`province` int(10) unsigned NOT NULL COMMENT '收货地址中国省份',`city` int(10) unsigned NOT NULL COMMENT '收货地址中的城市',`region` int(10) unsigned NOT NULL COMMENT '收货地址中城市中的区',`street` int(10) unsigned NOT NULL COMMENT '街道ID',`markBuilding` int(10) NOT NULL COMMENT '标志建筑物',`poiId` varchar(64) NOT NULL DEFAULT '' COMMENT '标建ID',`poiName` varchar(100) DEFAULT '' COMMENT '标建名称',`regionName` varchar(200) NOT NULL COMMENT '地区名称(如:北京 北京 昌平区 兴寿镇)',`address` varchar(255) NOT NULL COMMENT '收货地址中用户输入的地址,一般是区以下的详细地址',`zipcode` varchar(20) NOT NULL COMMENT '收货地址中的邮编',`mobile` varchar(15) NOT NULL COMMENT '收货人手机号',`phone` varchar(20) NOT NULL COMMENT '收货人固定电话号',`receiptInfo` text NOT NULL COMMENT '发票信息,序列化数组array(''title'' =>.., ''receiptType'' =>..,''needReceipt'' => ..,''companyName'' =>..,''taxSpotNum'' =>..,''regAddress''=>..,''regPhone''=>..,''bank''=>..,''bankAccount''=>..)',`delayShipTime` int(10) unsigned NOT NULL COMMENT '延迟发货日期',`remark` text NOT NULL COMMENT '订单备注',`bankCode` varchar(255) DEFAULT NULL COMMENT '银行代码,用于银行直链支付',`agent` varchar(255) DEFAULT NULL COMMENT '处理人',`confirmTime` int(11) DEFAULT NULL COMMENT '确认时间',`firstConfirmTime` int(10) unsigned NOT NULL COMMENT '首次确认时间',`firstConfirmPerson` varchar(200) NOT NULL COMMENT '第一次确认人',`finishTime` int(11) DEFAULT NULL COMMENT '订单完成时间',`tradeSn` varchar(255) DEFAULT NULL COMMENT '在线支付交易流水号',`signCode` varchar(20) NOT NULL COMMENT '收货确认码',`source` varchar(30) NOT NULL COMMENT '订单来源',`sourceOrderSn` varchar(60) NOT NULL COMMENT '外部订单号',`onedayLimit` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否支持24小时限时达',`logisticsManner` int(1) NOT NULL COMMENT '物流评价',`afterSaleManner` int(1) NOT NULL COMMENT '售后评价',`personManner` int(1) NOT NULL COMMENT '人员态度',`visitRemark` varchar(400) NOT NULL COMMENT '回访备注',`visitTime` int(11) NOT NULL COMMENT '回访时间',`visitPerson` varchar(20) NOT NULL COMMENT '回访人',`sellPeople` varchar(20) NOT NULL COMMENT '销售代表',`sellPeopleManner` int(1) NOT NULL COMMENT '销售代表服务态度',`orderType` tinyint(2) NOT NULL COMMENT '订单类型 默认0 团购预付款 团购正式单 2',`hasReadTaobaoOrderComment` tinyint(1) unsigned NOT NULL COMMENT '是否已读取过淘宝订单评论',`memberInvoiceId` int(10) unsigned NOT NULL COMMENT '订单发票ID,MemberInvoices表的主键',`taobaoGroupId` int(10) unsigned NOT NULL COMMENT '淘宝万人团活动ID',`tradeType` varchar(100) NOT NULL COMMENT '交易类型,值参考淘宝',`stepTradeStatus` varchar(100) NOT NULL COMMENT '分阶段付款的订单状态,值参考淘宝',`stepPaidFee` decimal(10,2) NOT NULL COMMENT '分阶段付款的已付金额',`depositAmount` decimal(10,2) unsigned NOT NULL COMMENT '定金应付金额',`balanceAmount` decimal(10,2) unsigned NOT NULL COMMENT '尾款应付金额',`autoCancelDays` int(10) unsigned NOT NULL COMMENT '未付款过期的天数',`isNoLimitStockOrder` tinyint(1) unsigned NOT NULL COMMENT '是否是无库存限制订单',`ccbOrderReceivedLogId` int(10) unsigned NOT NULL COMMENT '建行订单接收日志ID',`ip` varchar(50) NOT NULL COMMENT '订单来源IP,针对商城前台订单',`isGiftCardOrder` tinyint(1) unsigned NOT NULL COMMENT '是否为礼品卡订单',`giftCardDownloadPassword` varchar(200) NOT NULL COMMENT '礼品卡下载密码',`giftCardFindMobile` varchar(20) NOT NULL COMMENT '礼品卡密码找回手机号',`autoConfirmNum` int(10) unsigned NOT NULL COMMENT '已自动确认的次数',`codConfirmPerson` varchar(100) NOT NULL COMMENT '货到付款确认人',`codConfirmTime` int(11) NOT NULL COMMENT '货到付款确认时间',`codConfirmRemark` varchar(255) NOT NULL COMMENT '货到付款确认备注',`codConfirmState` tinyint(1) unsigned NOT NULL COMMENT '货到侍确认状态0无需未确认,1待确认,2确认通过可以发货,3确认无效,订单可以取消',`paymentNoticeUrl` text NOT NULL COMMENT '付款结果通知URL',`addressLon` decimal(9,6) NOT NULL COMMENT '地址经度',`addressLat` decimal(9,6) NOT NULL COMMENT '地址纬度',`smConfirmStatus` tinyint(4) NOT NULL COMMENT '标建确认状态。1 = 初始状态;2 = 已发HP,等待确认;3 = 待人工处理;4 = 待自动处理;5 = 已确认',`smConfirmTime` int(10) NOT NULL COMMENT '请求发送HP时间,格式为时间戳',`smManualTime` int(10) DEFAULT '0' COMMENT '转人工确认时间',`smManualRemark` varchar(200) DEFAULT '' COMMENT '转人工确认备注',`isTogether` tinyint(3) unsigned NOT NULL COMMENT '货票通行',`isNotConfirm` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否是无需确认的订单',`tailPayTime` int(11) NOT NULL DEFAULT '0' COMMENT '尾款付款时间',`points` int(11) DEFAULT '0' COMMENT '网单使用积分',`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',`channelId` tinyint(4) DEFAULT '0' COMMENT '区分EP和商城',`isProduceDaily` int(2) NOT NULL DEFAULT '0' COMMENT '是否日日单(1:是,0:否)',`couponCode` varchar(20) NOT NULL DEFAULT '' COMMENT '优惠码编码',`couponCodeValue` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '优惠码优惠金额',`ckCode` varchar(200) NOT NULL DEFAULT '',PRIMARY KEY (`id`),UNIQUE KEY `ux_Orders_ordersn` (`orderSn`),KEY `memberId` (`memberId`),KEY `agent` (`agent`),KEY `addTime` (`addTime`),KEY `payTime` (`payTime`),KEY `orderStatus` (`orderStatus`),KEY `sourceOrderSn` (`sourceOrderSn`),KEY `smConfirmStatus` (`smConfirmStatus`),KEY `idx_orders_source_orderStatus_hasReadTaobaoOrderComment` (`source`,`orderStatus`,`hasReadTaobaoOrderComment`),KEY `idx_order_mobile` (`mobile`),KEY `idx_orders_codConfirmState` (`codConfirmState`),KEY `modified` (`modified`),KEY `tailPayTime` (`tailPayTime`),KEY `ix_Orders_syncTime` (`syncTime`),KEY `ix_Orders_relationOrderSn` (`relationOrderSn`),KEY `ix_Orders_consignee` (`consignee`),KEY `idx_firstConfirmTime` (`firstConfirmTime`),KEY `ix_Orders_paymentStatus` (`paymentStatus`)
) ENGINE=InnoDB AUTO_INCREMENT=120128 DEFAULT CHARSET=utf8;

数据导入
设置mysql 导入数据允许的最大包大小:

set global max_allowed_packet=1024102432;

导入数据

source /opt/tags_dat.sql;

此表中目前的数据量为:125463条

mysql> SELECT COUNT(1) FROM tags_dat.tbl_goods ;
±---------+
| COUNT(1) |
±---------+
| 125463 |
±---------+

此表中目前的数据量为:950条

mysql> SELECT COUNT(1) FROM tags_dat.tbl_users ;
±---------+
| COUNT(1) |
±---------+
| 950 |
±---------+

此表中目前的数据量为:376983条

mysql> SELECT COUNT(1) FROM tags_dat.tbl_logs;
±---------+
| COUNT(1) |
±---------+
| 376983 |
±---------+

此表中目前的数据量为:120125条

mysql> SELECT COUNT(1) FROM tags_dat.tbl_orders;
±---------+
| COUNT(1) |
±---------+
| 120125 |
±---------+

1.3、Hive 数据仓库
将MySQL数据库中表的数据导入到Hive表中,以便加载到HBase表中。

启动HiveMetastore服务和HiveServer2服务,使用beeline命令行连接,相关命令如下:

[root@bigdata-cdh01 ~]# /export/servers/hive/bin/beeline
Beeline version 1.1.0-cdh5.14.0 by Apache Hive
beeline> !connect jdbc:hive2://bd001:10000
scan complete in 2ms
Connecting to jdbc:hive2://bd001:10000
Enter username for jdbc:hive2://bd001:10000: root
Enter password for jdbc:hive2://bd001:10000: ****
Connected to: Apache Hive (version 1.1.0-cdh5.14.0)
Driver: Hive JDBC (version 1.1.0-cdh5.14.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://bd001:10000>

1.3.1、创建表
创建Hive中数据库Database:

CREATE DATABASE tags_dat;

根据MySQL数据库表在Hive数据仓库中构建相应的表:
行为日志表:tbl_logs

/export/servers/sqoop/bin/sqoop create-hive-table
–connect jdbc:mysql://bd001:3306/tags_dat
–table tbl_logs
–username root
–password 123456
–hive-table tags_dat2.tbl_logs
–fields-terminated-by ‘\t’
–lines-terminated-by ‘\n’

商品表:tbl_goods

/export/servers/sqoop/bin/sqoop create-hive-table
–connect jdbc:mysql://bd001:3306/tags_dat
–table tbl_goods
–username root
–password 123456
–hive-table tags_dat2.tbl_goods
–fields-terminated-by ‘\t’
–lines-terminated-by ‘\n’

订单数据表:tbl_orders

/export/servers/sqoop/bin/sqoop create-hive-table
–connect jdbc:mysql://bd001:3306/tags_dat
–table tbl_orders
–username root
–password 123456
–hive-table tags_dat2.tbl_orders
–fields-terminated-by ‘\t’
–lines-terminated-by ‘\n’

用户信息表:tbl_users

/export/servers/sqoop/bin/sqoop create-hive-table
–connect jdbc:mysql://bd001:3306/tags_dat
–table tbl_orders
–username root
–password 123456
–hive-table tags_dat2.tbl_orders
–fields-terminated-by ‘\t’
–lines-terminated-by ‘\n’

用户信息表:tbl_users

/export/servers/sqoop/bin/sqoop create-hive-table
–connect jdbc:mysql://bd001:3306/tags_dat
–table tbl_users
–username root
–password 123456
–hive-table tags_dat2.tbl_users
–fields-terminated-by ‘\t’
–lines-terminated-by ‘\n’

1.3.2、导入数据至Hive表
使用Sqoop将MySQL数据库表中的数据导入到Hive表中(本质就是存储在HDFS上),具体命令如下。
行为日志表:tbl_logs

/export/servers/sqoop/bin/sqoop import
–connect jdbc:mysql://bd001:3306/tags_dat
–username root
–password 123456
–table tbl_logs
–direct
–hive-overwrite
–delete-target-dir
–fields-terminated-by ‘\t’
–lines-terminated-by ‘\n’
–hive-table tags_dat2.tbl_logs
–hive-import
–num-mappers 20

商品表:tbl_goods

/export/servers/sqoop/bin/sqoop import
–connect jdbc:mysql://bd001:3306/tags_dat
–username root
–password 123456
–table tbl_goods
–direct
–hive-overwrite
–delete-target-dir
–fields-terminated-by ‘\t’
–lines-terminated-by ‘\n’
–hive-table tags_dat2.tbl_goods
–hive-import
–num-mappers 5

订单数据表:tbl_orders

/export/servers/sqoop/bin/sqoop import
–connect jdbc:mysql://bd001:3306/tags_dat
–username root
–password 123456
–table tbl_orders
–direct
–hive-overwrite
–delete-target-dir
–fields-terminated-by ‘\t’
–lines-terminated-by ‘\n’
–hive-table tags_dat2.tbl_orders
–hive-import
–num-mappers 10

用户信息表:tbl_users

/export/servers/sqoop/bin/sqoop import
–connect jdbc:mysql://bd001:3306/tags_dat
–username root
–password 123456
–table tbl_users
–direct
–hive-overwrite
–delete-target-dir
–fields-terminated-by ‘\t’
–lines-terminated-by ‘\n’
–hive-table tags_dat2.tbl_users
–hive-import
–num-mappers 1

2、数据导入(Import)
将MySQL表中业务数据导入大数据平台中如HBase表,方案如下所示:

2.1、HBase 表设计
电商网站中各类数据(用户信息数据、用户访问日志数据及用户订单数据)存储到HBase表中,便于检索和分析构建电商用户画像,有如下几张表:

hbase(main):008:0> list
TABLE
tbl_logs
tbl_orders
tbl_users
tbl_goods
=> [“tbl_logs”, “tbl_orders”, “tbl_users”, “tbl_goods”]

用户基本信息:tbl_users

-- 1、如果用户表存在先删除
hbase(main):013:0> disable 'tbl_users'
hbase(main):014:0> drop 'tbl_users'
-- 或者清空表
hbase(main):015:0> truncate 'tbl_users'
-- 2、创建用户表
hbase(main):016:0> create 'tbl_users2','detail'hbase(main):019:0> desc "tbl_users"
Table tbl_users is ENABLED
tbl_users
COLUMN FAMILIES DESCRIPTION
{NAME => 'detail', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}hbase(main):020:0> count "tbl_users"
950 row(s) in 0.1910 seconds

HBase表中有1个Region:

行为日志数据:tbl_logs,共376983条数据

# 1、如果行为表存在先删除
hbase(main):008:0> disable 'tbl_logs'
hbase(main):009:0> drop 'tbl_logs'
# 2、创建行为表
hbase(main):010:0> create 'tbl_logs2', 'detail', SPLITS => ['49394']
# 3、查看表中一条数据
hbase(main):011:0> scan 'tbl_logs', { LIMIT => 1 }
hbase(main):012:0> desc  "tbl_logs"
Table tbl_logs is ENABLED
tbl_logs
COLUMN FAMILIES DESCRIPTION
{NAME => 'detail', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}hbase(main):004:0> count "tbl_logs"
376983 row(s) in 63.4920 seconds


用户订单数据:tbl_orders,共120125条

-- 1、如果订单表存在先删除
hbase(main):012:0> disable 'tbl_orders'
hbase(main):013:0> drop 'tbl_orders'
-- 2、创建订单表
hbase(main):014:0> create 'tbl_orders2','detail'hbase(main):015:0> desc "tbl_orders"
Table tbl_orders is ENABLED
tbl_orders
COLUMN FAMILIES DESCRIPTION
{NAME => 'detail', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}hbase(main):016:0> count "tbl_orders"
120125 row(s) in 38.9170 seconds


订单商品数据:tbl_goods

-- 1、如果用户表存在先删除
hbase(main):013:0> disable 'tbl_goods'
hbase(main):014:0> drop 'tbl_goods'
-- 或者清空表
hbase(main):015:0> truncate 'tbl_goods2'
-- 2、创建用户表
hbase(main):016:0> create 'tbl_goods2','detail'hbase(main):019:0> desc "tbl_goods"
Table tbl_users is ENABLED
tbl_users
COLUMN FAMILIES DESCRIPTION
{NAME => 'detail', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}hbase(main):016:0> count "tbl_goods"
120125 row(s) in 38.9170 seconds

2.2、Sqoop直接导入
可以使用SQOOP将MySQL表的数据导入到HBase表中,指定表的名称、列簇及RowKey,范例如下所示:

/export/servers/sqoop/bin/sqoop import
-D sqoop.hbase.add.row.key=true
–connect jdbc:mysql://bd001:3306/tags_dat
–username root
–password 123456
–table tbl_users
–hbase-create-table
–hbase-table tbl_users2
–column-family detail
–hbase-row-key id
–num-mappers 2

参数含义解释:

1、-D sqoop.hbase.add.row.key=true
是否将rowkey相关字段写入列族中,默认为false,默认情况下你将在列族中看不到任何row key中的字段。注意,该参数必须放在import之后。
2、–hbase-create-table 如果hbase中该表不存在则创建
3、–hbase-table 对应的hbase表名
4、–hbase-row-key hbase表中的rowkey,注意格式
5、–column-family hbase表的列族

知识拓展:如何使用SQOOP进行增量导入数据至HBase表,范例命令如下:

/export/servers/sqoop/bin/sqoop import
-D sqoop.hbase.add.row.key=true
–connect jdbc:mysql://bd001:3306/tags_dat
–username root
–password 123456
–table tbl_logs

–hbase-create-table
–hbase-table tag_logs
–column-family detail
–hbase-row-key id
–num-mappers 20
–incremental lastmodified
–check-column log_time
–last-value ‘2019-08-13 00:00:00’ \

相关增量导入参数说明:

1、–incremental lastmodified 增量导入支持两种模式 append 递增的列;lastmodified时间戳。
2、–check-column 增量导入时参考的列
3、–last-value 最小值,这个例子中表示导入2019-08-13 00:00:00到今天的值

2.3、HBase ImportTSV
ImportTSV功能描述:

将tsv(也可以是csv,每行数据中各个字段使用分隔符分割)格式文本数据,加载到HBase表中。
1)、采用Put方式加载导入
2)、采用BulkLoad方式批量加载导入

使用如下命令,查看HBase官方自带工具类使用说明:

HADOOP_HOME=/export/servers/hadoop
HBASE_HOME=/export/servers/hbase
HADOOP_CLASSPATH=${HBASE_HOME}/bin/hbase mapredcp

用户画像第二章(企业级360°用户画像_数据调研及ETL)相关推荐

  1. 用户画像第四章(企业级360°用户画像_标签开发_挖掘标签_用户购物性别模型-USG)

    用户购物性别模型-USG USG模型引入 USG(User Shopping Gender) 2.5.1.AI驱动的电商用户模型:性别属性是这样确定的 首先带领大家了解一下,如何通过大数据来确定用户的 ...

  2. 用户画像第一章(企业级360°全方位用户画像_环境搭建)

    环境搭建 2.4.项目工程演示 将项目工程[tags(演示版).zip]解压,为Maven Project,导入IDEA中,如下图所示: 选择解压的工程,如下图: 一直点击下一步[Next]即可,最终 ...

  3. 企业级360用户画像

    一.用户画像概述 二.项目功能及架构 三.项目开发 3.0.业务数据调研及ETL 3.1.规则标签 标签存储与计算 标签模型计算 标签模型:用户性别标签 标签开发:规则匹配型标签 标签模板(Templ ...

  4. 大数据【企业级360°全方位用户画像】业务数据调研及ETL

    写在前面: 博主是一名大数据的初学者,昵称来源于<爱丽丝梦游仙境>中的Alice和自己的昵称.作为一名互联网小白,写博客一方面是为了记录自己的学习历程,一方面是希望能够帮助到很多和自己一样 ...

  5. 【 linux系统入门管理篇-第二章文件和用户的管理】

    linux系统入门管理篇-第二章文件和用户的管理 本章介绍 一.文件管理 (一).Linux目录结构 (二).文件管理 1.文件管理命令 2.文件类型 二.用户管理 (一).用户/组基本概念 (二). ...

  6. Linux入门到精通:第 1 关——创建/删除新用户(第二章:Linux之用户管理)

    第 1 关--创建/删除新用户 任务描述 相关知识 Linux创建用户命令 案例演示 Linux删除用户命令 案例演示 编程要求 评测说明 任务描述 恭喜你已经完成了Linux入门的实训,接下来让我们 ...

  7. 大数据用户画像实战之业务数据调研及ETL

    整个用户画像(UserProfile)项目中,数据.业务及技术流程图如下所示: 其中数据源存储在业务系统数据库:MySQL 数据库中,采用SQOOP全量/增量将数据抽取到 HDFS(Hive表中),通 ...

  8. 《傻瓜计量经济学与stata应用》第二章do文件,记得把数据考到当前目录或带上路径,否则可能无法打开

    *==============================================================================* *================== ...

  9. 第二章导数与微分思维导图_线性代数第二章 矩阵 思维导图

    这章内容复习集中在两方面:矩阵乘法:可逆矩阵及相关内容(矩阵方程和伴随矩阵). 可逆矩阵是全课程的一个关键性概念,与各章内容都有联系,应着重注意这些联系.

  10. yxc_第二章 数据结构(一)_栈和队列

    目录 一.栈和队列的代码操作 1.AcWing 828 模拟栈 2.AcWing 829 模拟队列 二.单调栈 1.AcWing 830 单调栈 三.单调队列 1.AcWing 154 滑动窗口 一. ...

最新文章

  1. linux awk 分组统计
  2. android 返回销毁活动,android返回活动时会被销毁并且不会恢复
  3. PRML笔记 第一章 Introduction
  4. 《延世大学韩国语教程2》第二十课 办公室(上)
  5. Java Web提交任务到Spark Spark通过Java Web提交任务
  6. 中国自研数据库超越Oracle登顶全球第一
  7. java练习异常函数InputMismatchException
  8. 机器学习数学基础学习总结(一)
  9. 清理windows10系统垃圾文件-bat批处理命令
  10. 教你win7如何共享打印机的详细教程
  11. Android上边抽屉式标题,Android Navigation Drawer样式抽屉的使用
  12. Perfmon - Windows 自带系统监测工具
  13. BGP Confederation(BGP联盟)
  14. 一个好玩的辞职信HTML版
  15. Java子线程异常及异常处理
  16. 白话——海明校验码及编码过程
  17. VBS判断excel版本
  18. 简单易学的五款英伦风格鸡尾酒PartyOK版
  19. Python网络爬虫之模拟登陆
  20. Android 文件转语音TTS输出(文字转语音)

热门文章

  1. linux设置开机自启动网络,linux设置开机自启动
  2. php单页菜单,CSS3单页切换导航菜单界面设计的实现详解
  3. 支付宝 java 签名_支付宝APP支付(Java后台生成签名具体步骤)
  4. 三十一、利用微信搜索抓取公众号文章
  5. 桥接路由器总是掉线_TP-LINK路由器桥接不稳定的解决方法
  6. 对不起,我被裁员了。
  7. (干货,建议收藏)备战2021年软考中级网络工程师-02操作系统
  8. 关于hibernate检索策略
  9. 亲测win10安装mac虚拟机+网络配置完整过程
  10. 不开心就玩消消乐~~~正则表达式(1)