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

写在前面: 博主是一名大数据的初学者,昵称来源于《爱丽丝梦游仙境》中的Alice和自己的昵称。作为一名互联网小白,写博客一方面是为了记录自己的学习历程,一方面是希望能够帮助到很多和自己一样处于起步阶段的萌新。由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!个人小站:http://alices.ibilibili.xyz/ , 博客主页:https://alice.blog.csdn.net/
尽管当前水平可能不及各位大佬,但我还是希望自己能够做得更好,因为一天的生活就是一生的缩影。我希望在最美的年华,做最好的自己

        之前关于用户画像项目部分的讲解大多停留在理论层面,本篇我们正式开始对该项目中所使用到的业务数据进行调研和ETL处理
在这里插入图片描述


业务数据调研及ETL

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

在这里插入图片描述
        其中数据源存储在业务系统数据库:MySQL 数据库中,采用SQOOP全量/增量将数据抽取到HDFS(Hive表中),通过转换为HFile文件加载到HBase表。

在这里插入图片描述
思考?

1)、为什么将订单相关数据【订单数据和订单商品数据】存储到HBase表中????
	特点:数据量比较大
	存储HBase:存储海量数据、查询检索
2)、实际项目来说【访问行为日志】数据存储到Hive表中
	数据仓库分层:
		ODS层、DW层和APP3)、特殊:模拟的所有业务数据存储在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,构建语句如下:

mysql> show create database tags_dat ;
+----------+----------------------------------------------------------+
| tags_dat | CREATE DATABASE `tags_dat` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------+
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=1024*1024*32;

        导入数据

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_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"]
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表的列族
2.3、HBase ImportTSV

        ImportTSV功能描述:

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

        分别演示采用直接Put方式和HFile文件方式将数据导入HBase表,命令如下:

  • 其一、直接导入Put方式
HADOOP_HOME=/export/servers/hadoop
HBASE_HOME=/export/servers/hbase
HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`:${HBASE_HOME}/conf ${HADOOP_HOME}/bin/yarn jar ${HBASE_HOME}/lib/hbase-server-1.2.0-cdh5.14.0.jar \
importtsv \
-Dimporttsv.columns=HBASE_ROW_KEY,detail:log_id,detail:remote_ip,detail:site_global_ticket,detail:site_global_session,detail:global_user_id,detail:cookie_text,detail:user_agent,detail:ref_url,detail:loc_url,detail:log_time \
tbl_logs2 \
/user/hive/warehouse/tags_dat2.db/tbl_logs

        上述命令本质上运行一个MapReduce应用程序,将文本文件中每行数据转换封装到Put对象,然后插入到HBase表中

回顾一下:
	采用Put方式向HBase表中插入数据流程:
		Put
			-> WAL 预写日志
			-> MemStore(内存) ,当达到一定大写Spill到磁盘上:StoreFile(HFile)
	思考:
		对海量数据插入,能否将数据直接保存为HFile文件,然后加载到HBase表中
  • 其二、转换为HFile文件,再加载至表
# 1. 生成HFILES文件
HADOOP_HOME=/export/servers/hadoop
HBASE_HOME=/export/servers/hbase
HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`:${HBASE_HOME}/conf ${HADOOP_HOME}/bin/yarn jar ${HBASE_HOME}/lib/hbase-server-1.2.0-cdh5.14.0.jar \
importtsv \
-Dimporttsv.bulk.output=hdfs://bd001:8020/datas/output_hfile/tbl_tag_logs \
-Dimporttsv.columns=HBASE_ROW_KEY,detail:log_id,detail:remote_ip,detail:site_global_ticket,detail:site_global_session,detail:global_user_id,detail:cookie_text,detail:user_agent,detail:ref_url,detail:loc_url,detail:log_time \
tbl_logs2 \
/user/hive/warehouse/tags_dat2.db/tbl_logs

# 2.HFILE文件加载到表中
HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`:${HBASE_HOME}/conf ${HADOOP_HOME}/bin/yarn jar \
${HBASE_HOME}/lib/hbase-server-1.2.0-cdh5.14.0.jar \
completebulkload \
hdfs://bd001:8020/datas/output_hfile/tbl_tag_logs \
tbl_logs2

        但这种方法的缺点是:

1)、ROWKEY不能是组合主键
	只能是某一个字段
2)、当表中列很多时,书写-Dimporttsv.columns值时很麻烦,容易出错
2.4、HBase Bulkload

        在大量数据需要写入HBase时,通常有put方式和bulkLoad两种方式。

  • 1、put方式为单条插入,在put数据时会先将数据的更新操作信息和数据信息写入WAL,在写入到WAL后,数据就会被放到MemStore中,当MemStore满后数据就会被flush到磁盘(即形成HFile文件),在这种写操作过程会涉及到flush、split、compaction等操作,容易造成节点不稳定,数据导入慢,耗费资源等问题,在海量数据的导入过程极大的消耗了系统性能,避免这些问题最好的方法就是使用BulkLoad的方式来加载数据到HBase中。
val put = new Put(rowKeyByts)
put.addColumn(cf, column, value)
put.addColumn(cf, column, value)
put.addColumn(cf, column, value)
put.addColumn(cf, column, value)

table.put(put)

在这里插入图片描述

  • 2、BulkLoader利用HBase数据按照HFile格式存储在HDFS的原理,使用MapReduce直接批量生成HFile格式文件后,RegionServers再将HFile文件移动到相应的Region目录下。
    在这里插入图片描述
1)、Extract,异构数据源数据导入到 HDFS 之上。
2)、Transform,通过用户代码,可以是 MR 或者 Spark 任务将数据转化为 HFile。
3)、Load,HFile 通过 loadIncrementalHFiles 调用将 HFile 放置到 Region 对应的 HDFS 目录上,该过程可能涉及到文件切分。

1、不会触发WAL预写日志,当表还没有数据时进行数据导入不会产生Flush和Split。
2、减少接口调用的消耗,是一种快速写入的优化方式。

        关于如何使用Spark读写HBase之使用Spark自带的API以及使用Bulk Load将大量数据导入HBase,可以参考简书上的这篇文章:https://www.jianshu.com/p/b6c5a5ba30af


小结

        本篇博客主要为大家带来了业务数据的来源以及如何从MySQL同步到Hive,再从Hive导入到HBase的一个过程。其中数据导入到HBase一共有5种方法,本篇博客只给出了3种方法。想知道另外两种方法的朋友可以在评论区讨论,也可以来私信询问😉

        如果以上过程中出现了任何的纰漏错误,烦请大佬们指正😅

        受益的朋友或对大数据技术感兴趣的伙伴记得点赞关注支持一波🙏

在这里插入图片描述

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
### 回答1: 《剑指大数据――企业级数据仓库项目实战(电商版)pdf》是一本介绍大数据数据仓库项目实战经验的书籍。该书主要以电商行业为例,讲解了如何构建和管理企业级数据仓库项目。 数据仓库是一个集成、主题导向、变化较慢的数据存储系统。它能够将企业各个部门的数据整合在一起,提供一个一致、全面的数据视图,为企业决策提供支持。 该书从数据仓库的项目规划开始,介绍了如何确定项目目标和范围,如何制定项目计划和评估项目风险。然后详细介绍了数据仓库的设计和建模,包括如何进行数据清洗、数据抽取和转换、数据加载等步骤。同时,该书还介绍了如何选择和使用合适的大数据工具和技术,如HadoopSpark等。 在项目实施方面,该书强调了项目团队的组建和管理,包括如何确定项目角色和职责,如何进行项目的监控和控制。此外,还介绍了数据仓库的运维和维护,包括数据备份、性能优化和故障处理等。 总体来说,该书以电商行业为背景,详细介绍了数据仓库项目实战的方方面面。不仅讲解了数据仓库的基本概念和技术,还给出了实践经验和示例代码。对于从事大数据项目开发和数据分析的人员,以及对企业级数据仓库感兴趣的读者,都是一本值得一看的书籍。 ### 回答2: 《剑指大数据――企业级数据仓库项目实战(电商版)pdf》是一本介绍企业级数据仓库项目实战的电子书籍。数据仓库是一个用于集中存储和管理企业各种相关数据的系统,能够提供高效的数据查询、分析和报表功能,有助于企业实现数据驱动决策。本书针对电商行业的数据仓库项目进行了深入的讲解和实践案例的分享。 该书的主要内容包括数据仓库的基本概念和架构,ETL过程(提取、转换和加载),数据建模,维度建模,分析报表以及性能优化等。通过对这些内容的学习和实践,读者可以了解到如何构建一个适用于电商企业的高效数据仓库系统。 在电商行业中,数据仓库的作用尤为重要。通过收集和分析大量的销售数据、用户行为数据、库存信息等,企业可以更好地了解市场需求、产品销售情况、用户行为趋势等,从而做出更准确的决策和战略规划。本书通过实际应用案例,帮助读者掌握如何应用数据仓库技术来解决电商企业在数据管理和分析方面的挑战。 此外,书中还介绍了一些常用的数据仓库工具和技术,如Hadoop、Hive、Spark等,以及针对电商业务的特点,讲解了如何设计和实现面向电商业务数据仓库解决方案。通过这些内容的学习,读者可以具备在电商行业中开展数据仓库项目实践的能力。 总的来说,《剑指大数据――企业级数据仓库项目实战(电商版)pdf》是一本对于电商企业数据仓库项目非常实用的指南书籍,适合从事数据仓库项目开发、数据分析以及决策支持的相关从业人员阅读学习。通过这本书的学习,读者能够掌握电商行业数据仓库项目的开发方法和实施技巧,提升企业决策水平和竞争力。 ### 回答3: 《剑指大数据――企业级数据仓库项目实战(电商版)》是一本专注于大数据企业级数据仓库项目实践的书籍。该书以电商行业为例,详细介绍了在大数据环境下,如何搭建和优化企业级数据仓库。 首先,该书内容深入浅出,适合初学者和研究者阅读。它从数据仓库的概念和原理开始,逐步介绍了数据仓库项目的各个阶段,包括需求分析、数据设计、数据采集、ETL处理、数据质量控制等。同时,该书还给出了很多实际案例和实战经验,帮助读者理解和应用所学知识。 其次,该书针对电商行业进行案例分析,实际运用数据仓库来解决该行业面临的问题。电商行业产生的大量数据需要进行分析和挖掘,以支持业务决策和用户行为分析。该书通过实例,介绍了如何将大数据技术和数据仓库项目应用于电商场景,帮助读者掌握相关技能和方法。 此外,该书还介绍了常用的大数据技术和工具,如Hadoop、Hive、Spark等。这些技术和工具是搭建和优化企业级数据仓库的重要支撑,读者可以通过学习和实践,掌握它们的使用方法。 总之,《剑指大数据――企业级数据仓库项目实战(电商版)》是一本系统而实用的大数据书籍,适合那些对数据仓库项目感兴趣的人阅读。通过学习该书内容,读者可以了解数据仓库项目的实施过程,掌握相关的技术和方法,为企业的数据分析和决策提供支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据梦想家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值