数据仓库项目(第五节)数仓理论、电商业务数仓介绍与创建
目录
- 数仓理论
- 表的分类
- 实体表
- 维度表
- 事务型事实表
- 周期型事实表
- 同步策略
- 实体表同步策略
- 维度表同步策略
- 事务型事实表同步策略
- 周期型事实表同步策略
- 范式理论
- 范式概念
- 函数依赖
- 三范式区分
- 关系建模与维度建模
- 关系模型
- 维度模型
- 雪花模型、星型模型和星座模型
- 电商业务数仓介绍
- 电商业务流程
- 电商表结构
- 电商常识(SKU、SPU)
- 订单表(order_info)
- 订单详情表(order_detail)
- 商品表
- 用户表
- 商品一级分类表
- 商品二级分类表
- 商品三级分类表
- 支付流水表
- 电商业务数仓创建
- 业务数据生成
- 业务数据导入数仓
- sqoop导入数据的脚本
- ODS层
- 表的同步策略
- 创建订单表
- 创建订单详情表
- 创建商品表
- 创建商品一级分类表
- 创建商品二级分类表
- 创建支付流水表
- ODS层数据导入脚本
- DWD层
- 创建订单表
- 创建订单详情表
- 创建用户表
- 创建支付流水表
- 创建商品表(增加分类)
- DWD层数据导入脚本
- DWS层之用户行为宽表
- 创建用户行为宽表
- 向用户行为宽表导入数据
数仓理论
表的分类
实体表
实体表,一般是指一个现实存在的业务对象,比如用户,商品,商家,销售员等等。
维度表
维度表,一般是指对应一些业务状态,代码的解释表。也可以称之为码表。
比如地区表,订单状态,支付方式,审批状态,商品分类等等。
订单状态表:
订单状态编号 | 订单状态名称 |
---|---|
1 | 未支付 |
2 | 支付 |
3 | 发货中 |
4 | 已发货 |
5 | 已完成 |
商品分类表:
商品分类编号 | 分类名称 |
---|---|
1 | 少儿 |
2 | 文艺 |
3 | 生活 |
4 | 科技 |
事务型事实表
事务型事实表,一般指随着业务发生不断产生的数据。特点是一旦发生不会再变化。
一般比如,交易流水,操作日志,出库入库记录等等。
周期型事实表
周期型事实表,一般指随着业务发生不断产生的数据。
与事务型不同的是,数据会随着业务周期性的推进而变化。
比如订单,其中订单状态会周期性变化。再比如,请假、贷款申请,随着批复状态在周期性变化。
订单表:
同步策略
数据同步策略的类型包括:全量表、增量表、新增及变化表、拉链表
全量表:存储完整的数据。
增量表:存储新增加的数据。
新增及变化表:存储新增加的数据和变化的数据。
拉链表:对新增及变化表做定期合并。
实体表同步策略
实体表:比如用户,商品,商家,销售员等
实体表数据量比较小:通常可以做每日全量,就是每天存一份完整数据。即每日全量。
维度表同步策略
维度表:比如订单状态,审批状态,商品分类
维度表数据量比较小:通常可以做每日全量,就是每天存一份完整数据。即每日全量。
说明:
1)针对可能会有变化的状态数据可以存储每日全量。
2)没变化的客观世界的维度(比如性别,地区,民族,政治成分,鞋子尺码)可以就存一份固定值。
事务型事实表同步策略
事务型事实表:比如,交易流水,操作日志,出库入库记录等。
因为数据不会变化,而且数据量巨大,所以每天只同步新增数据即可,所以可以做成每日增量表,即每日创建一个分区存储。
周期型事实表同步策略
周期型事实表:比如,订单、请假、贷款申请等
这类表从数据量的角度,存每日全量的话,数据量太大,冗余也太大。如果用每日增量的话无法反应数据变化。
每日新增及变化量可以用,包括了当日的新增和修改。一般来说这个表,足够计算大部分当日数据的。但是这种依然无法解决能够得到某一个历史时间点(时间切片)的切片数据。
所以要用利用每日新增和变化表,制作一张拉链表,以方便的取到某个时间切片的快照数据。所以我们需要得到每日新增及变化量。
范式理论
范式概念
关系型数据库设计时,遵照一定的规范要求,目的在于降低数据的冗余性,目前业界范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)。
范式的标准定义是:符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度。通俗地讲,范式可以理解为一张数据表的表结构,所符合的某种设计标准的级别。
使用范式的根本目的是:
1)减少数据冗余,尽量让每个数据只出现一次。
2)保证数据一致性
缺点是获取数据时,需要通过join拼接出最后的数据。
函数依赖
三范式区分
关系建模与维度建模
关系模型
关系模型主要应用与OLTP系统中,为了保证数据的一致性以及避免冗余,所以大部分业务系统的表都是遵循第三范式的。
维度模型
维度模型主要应用于OLAP系统中,因为关系模型虽然冗余少,但是在大规模数据,跨表分析统计查询过程中,会造成多表关联,这会大大降低执行效率。
所以把相关各种表整理成两种:事实表和维度表两种。所有维度表围绕着事实表进行解释。
OLTP和OLAP系统的区别参考OLAP和OLTP的区别【转载】,简单说hive就是典型的OLAP,MySQL就是典型的OLTP。
雪花模型、星型模型和星座模型
电商业务数仓介绍
电商业务流程
电商表结构
电商常识(SKU、SPU)
SKU=Stock Keeping Unit(库存量单位)。即库存进出计量的基本单元,可以是以件,盒,托盘等为单位。SKU这是对于大型连锁超市DC(配送中心)物流管理的一个必要的方法。现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号。
SPU(Standard Product Unit):标准化产品单元。是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。
首先通过检索搜索出来的商品列表中,每个商品都是一个SKU。每个SKU都有自己独立的库存数。也就是说每一个商品详情展示都是一个SKU。
比如,咱们购买一台iPhoneX手机,iPhoneX手机就是一个SPU,但是你购买的时候,不可能是以iPhoneX手机为单位买的,商家也不可能以iPhoneX为单位记录库存。必须要以什么颜色什么版本的iPhoneX为单位。比如,你购买的是一台银色、128G内存的、支持联通网络的iPhoneX ,商家也会以这个单位来记录库存数。那这个更细致的单位就叫库存单元(SKU)。
那spu又是干什么的呢?
如上图,一般的电商系统你点击进去以后,都能看到这个商品关联了其他好几个类似的商品,而且这些商品很多的信息都是共用的,比如商品图片,海报、销售属性等。
订单表(order_info)
订单详情表(order_detail)
商品表
用户表
商品一级分类表
商品二级分类表
商品三级分类表
支付流水表
电商业务数仓创建
业务数据生成
业务数据生成在MySQL中进行,可以在本地机器,也可以在服务器的MySQL上。此部分省略。
业务数据导入数仓
使用sqoop导入,sqoop安装参考hadoop离线阶段(第十七节)zakaban的使用、sqoop的安装和使用、java代码操作Linux命令。
sqoop导入数据的脚本
使用sqoop将MySQL的数据导入到hdfs。
#!/bin/bashdb_date=$2
echo $db_date
db_name=gmallimport_data() {/opt/module/sqoop/bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/$db_name \
--username root \
--password 000000 \
--target-dir /origin_data/$db_name/db/$1/$db_date \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--query "$2"' and $CONDITIONS;'
}import_sku_info(){import_data "sku_info" "select
id, spu_id, price, sku_name, sku_desc, weight, tm_id,
category3_id, create_time from sku_info where 1=1"
}import_user_info(){import_data "user_info" "select
id, name, birthday, gender, email, user_level,
create_time
from user_info where 1=1"
}import_base_category1(){import_data "base_category1" "select
id, name from base_category1 where 1=1"
}import_base_category2(){import_data "base_category2" "select
id, name, category1_id from base_category2 where 1=1"
}import_base_category3(){import_data "base_category3" "select id, name, category2_id from base_category3 where 1=1"
}import_order_detail(){import_data "order_detail" "select od.id, order_id, user_id, sku_id, sku_name, order_price, sku_num, o.create_time from order_info o , order_detail od where o.id=od.order_id and DATE_FORMAT(create_time,'%Y-%m-%d')='$db_date'"
}import_payment_info(){import_data "payment_info" "select id, out_trade_no, order_id, user_id, alipay_trade_no, total_amount, subject , payment_type, payment_time from payment_info where DATE_FORMAT(payment_time,'%Y-%m-%d')='$db_date'"
}import_order_info(){import_data "order_info" "select id, total_amount, order_status, user_id, payment_way, out_trade_no, create_time, operate_time from order_info where (DATE_FORMAT(create_time,'%Y-%m-%d')='$db_date' or DATE_FORMAT(operate_time,'%Y-%m-%d')='$db_date')"
}case $1 in"base_category1")import_base_category1
;;"base_category2")import_base_category2
;;"base_category3")import_base_category3
;;"order_info")import_order_info
;;"order_detail")import_order_detail
;;"sku_info")import_sku_info
;;"user_info")import_user_info
;;"payment_info")import_payment_info
;;"all")import_base_category1import_base_category2import_base_category3import_order_infoimport_order_detailimport_sku_infoimport_user_infoimport_payment_info
;;
esac
ODS层
表的同步策略
创建订单表
hive (gmall)>
drop table if exists ods_order_info;
create table ods_order_info ( `id` string COMMENT '订单编号',`total_amount` decimal(10,2) COMMENT '订单金额', `order_status` string COMMENT '订单状态', `user_id` string COMMENT '用户id' ,`payment_way` string COMMENT '支付方式', `out_trade_no` string COMMENT '支付流水号', `create_time` string COMMENT '创建时间', `operate_time` string COMMENT '操作时间'
) COMMENT '订单表'
PARTITIONED BY ( `dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ods/ods_order_info/'
tblproperties ("parquet.compression"="snappy")
;
创建订单详情表
hive (gmall)>
drop table if exists ods_order_detail;
create table ods_order_detail( `id` string COMMENT '订单编号',`order_id` string COMMENT '订单号', `user_id` string COMMENT '用户id' ,`sku_id` string COMMENT '商品id', `sku_name` string COMMENT '商品名称', `order_price` string COMMENT '下单价格', `sku_num` string COMMENT '商品数量', `create_time` string COMMENT '创建时间'
) COMMENT '订单明细表'
PARTITIONED BY ( `dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ods/ods_order_detail/'
tblproperties ("parquet.compression"="snappy")
;
创建商品表
hive (gmall)>
drop table if exists ods_sku_info;
create table ods_sku_info( `id` string COMMENT 'skuId',`spu_id` string COMMENT 'spuid', `price` decimal(10,2) COMMENT '价格' ,`sku_name` string COMMENT '商品名称', `sku_desc` string COMMENT '商品描述', `weight` string COMMENT '重量', `tm_id` string COMMENT '品牌id', `category3_id` string COMMENT '品类id', `create_time` string COMMENT '创建时间'
) COMMENT '商品表'
PARTITIONED BY ( `dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ods/ods_sku_info/'
tblproperties ("parquet.compression"="snappy")
;
创建商品一级分类表
hive (gmall)>
drop table if exists ods_base_category1;
create table ods_base_category1( `id` string COMMENT 'id',`name` string COMMENT '名称'
) COMMENT '商品一级分类'
PARTITIONED BY ( `dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ods/ods_base_category1/'
tblproperties ("parquet.compression"="snappy")
;
创建商品二级分类表
hive (gmall)>
drop table if exists ods_base_category2;
create external table ods_base_category2( `id` string COMMENT ' id',`name` string COMMENT '名称',category1_id string COMMENT '一级品类id'
) COMMENT '商品二级分类'
PARTITIONED BY ( `dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ods/ods_base_category2/'
tblproperties ("parquet.compression"="snappy")
;
创建支付流水表
hive (gmall)>
drop table if exists `ods_payment_info`;
create table `ods_payment_info`(`id` bigint COMMENT '编号',`out_trade_no` string COMMENT '对外业务编号',`order_id` string COMMENT '订单编号',`user_id` string COMMENT '用户编号',`alipay_trade_no` string COMMENT '支付宝交易流水编号',`total_amount` decimal(16,2) COMMENT '支付金额',`subject` string COMMENT '交易内容',`payment_type` string COMMENT '支付类型',`payment_time` string COMMENT '支付时间') COMMENT '支付流水表'
PARTITIONED BY ( `dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ods/ods_payment_info/'
tblproperties ("parquet.compression"="snappy")
;
ODS层数据导入脚本
#!/bin/bashdo_date=$1APP=gmallhive=/opt/module/hive/bin/hivesql="
load data inpath '/origin_data/$APP/db/order_info/$do_date' OVERWRITE into table $APP"".ods_order_info partition(dt='$do_date');load data inpath '/origin_data/$APP/db/order_detail/$do_date' OVERWRITE into table $APP"".ods_order_detail partition(dt='$do_date');load data inpath '/origin_data/$APP/db/sku_info/$do_date' OVERWRITE into table $APP"".ods_sku_info partition(dt='$do_date');load data inpath '/origin_data/$APP/db/user_info/$do_date' OVERWRITE into table $APP"".ods_user_info partition(dt='$do_date');load data inpath '/origin_data/$APP/db/payment_info/$do_date' OVERWRITE into table $APP"".ods_payment_info partition(dt='$do_date');load data inpath '/origin_data/$APP/db/base_category1/$do_date' OVERWRITE into table $APP"".ods_base_category1 partition(dt='$do_date');load data inpath '/origin_data/$APP/db/base_category2/$do_date' OVERWRITE into table $APP"".ods_base_category2 partition(dt='$do_date');load data inpath '/origin_data/$APP/db/base_category3/$do_date' OVERWRITE into table $APP"".ods_base_category3 partition(dt='$do_date');
"
$hive -e "$sql"
DWD层
创建订单表
hive (gmall)>
drop table if exists dwd_order_info;
create external table dwd_order_info ( `id` string COMMENT '',`total_amount` decimal(10,2) COMMENT '', `order_status` string COMMENT ' 1 2 3 4 5', `user_id` string COMMENT 'id' ,`payment_way` string COMMENT '', `out_trade_no` string COMMENT '', `create_time` string COMMENT '', `operate_time` string COMMENT ''
) COMMENT ''
PARTITIONED BY ( `dt` string)
stored as parquet
location '/warehouse/gmall/dwd/dwd_order_info/'
tblproperties ("parquet.compression"="snappy")
;
创建订单详情表
hive (gmall)>
drop table if exists dwd_order_detail;
create external table dwd_order_detail( `id` string COMMENT '',`order_id` decimal(10,2) COMMENT '', `user_id` string COMMENT 'id' ,`sku_id` string COMMENT 'id', `sku_name` string COMMENT '', `order_price` string COMMENT '', `sku_num` string COMMENT '', `create_time` string COMMENT ''
) COMMENT ''
PARTITIONED BY ( `dt` string)
stored as parquet
location '/warehouse/gmall/dwd/dwd_order_detail/'
tblproperties ("parquet.compression"="snappy")
;
创建用户表
hive (gmall)>
drop table if exists dwd_user_info;
create external table dwd_user_info( `id` string COMMENT 'id',`name` string COMMENT '', `birthday` string COMMENT '' ,`gender` string COMMENT '', `email` string COMMENT '', `user_level` string COMMENT '', `create_time` string COMMENT ''
) COMMENT ''
PARTITIONED BY ( `dt` string)
stored as parquet
location '/warehouse/gmall/dwd/dwd_user_info/'
tblproperties ("parquet.compression"="snappy")
;
创建支付流水表
hive (gmall)>
drop table if exists `dwd_payment_info`;
create external table `dwd_payment_info`(`id` bigint COMMENT '',`out_trade_no` string COMMENT '',`order_id` string COMMENT '',`user_id` string COMMENT '',`alipay_trade_no` string COMMENT '',`total_amount` decimal(16,2) COMMENT '',`subject` string COMMENT '',`payment_type` string COMMENT '',`payment_time` string COMMENT '') COMMENT ''
PARTITIONED BY ( `dt` string)
stored as parquet
location '/warehouse/gmall/dwd/dwd_payment_info/'
tblproperties ("parquet.compression"="snappy")
;
创建商品表(增加分类)
hive (gmall)>
drop table if exists dwd_sku_info;
create external table dwd_sku_info( `id` string COMMENT 'skuId',`spu_id` string COMMENT 'spuid', `price` decimal(10,2) COMMENT '' ,`sku_name` string COMMENT '', `sku_desc` string COMMENT '', `weight` string COMMENT '', `tm_id` string COMMENT 'id', `category3_id` string COMMENT '1id', `category2_id` string COMMENT '2id', `category1_id` string COMMENT '3id', `category3_name` string COMMENT '3', `category2_name` string COMMENT '2', `category1_name` string COMMENT '1', `create_time` string COMMENT ''
) COMMENT ''
PARTITIONED BY ( `dt` string)
stored as parquet
location '/warehouse/gmall/dwd/dwd_sku_info/'
tblproperties ("parquet.compression"="snappy")
;
DWD层数据导入脚本
#!/bin/bash# 定义变量方便修改
APP=gmall
hive=/opt/module/hive/bin/hive# 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天
if [ -n $1 ] ;thenlog_date=$1
else log_date=`date -d "-1 day" +%F`
fi sql="set hive.exec.dynamic.partition.mode=nonstrict;insert overwrite table "$APP".dwd_order_info partition(dt)
select * from "$APP".ods_order_info
where dt='$log_date' and id is not null;insert overwrite table "$APP".dwd_order_detail partition(dt)
select * from "$APP".ods_order_detail
where dt='$log_date' and id is not null;insert overwrite table "$APP".dwd_user_info partition(dt)
select * from "$APP".ods_user_info
where dt='$log_date' and id is not null;insert overwrite table "$APP".dwd_payment_info partition(dt)
select * from "$APP".ods_payment_info
where dt='$log_date' and id is not null;insert overwrite table "$APP".dwd_sku_info partition(dt)
select sku.id,sku.spu_id, sku.price,sku.sku_name, sku.sku_desc, sku.weight, sku.tm_id, sku.category3_id, c2.id category2_id , c1.id category1_id, c3.name category3_name, c2.name category2_name, c1.name category1_name, sku.create_time,sku.dt
from"$APP".ods_sku_info sku
join "$APP".ods_base_category3 c3 on sku.category3_id=c3.id join "$APP".ods_base_category2 c2 on c3.category2_id=c2.id join "$APP".ods_base_category1 c1 on c2.category1_id=c1.id
where sku.dt='$log_date' and c2.dt='$log_date'
and c3.dt='$log_date' and c1.dt='$log_date'
and sku.id is not null;"
$hive -e "$sql"
DWS层之用户行为宽表
需求目标,把每个用户单日的行为聚合起来组成一张多列宽表,以便之后关联用户维度信息后进行,不同角度的统计分析。
创建用户行为宽表
hive (gmall)>
drop table if exists dws_user_action;
create external table dws_user_action
( user_id string comment '用户 id',order_count bigint comment '下单次数 ',order_amount decimal(16,2) comment '下单金额 ',payment_count bigint comment '支付次数',payment_amount decimal(16,2) comment '支付金额 ',comment_count bigint comment '评论次数'
) COMMENT '每日用户行为宽表'
PARTITIONED BY ( `dt` string)
stored as parquet
location '/warehouse/gmall/dws/dws_user_action/'
tblproperties ("parquet.compression"="snappy");
向用户行为宽表导入数据
注意,此处用到了hive的with as语句,with as语句可以理解为MySQL中的视图,是一种子查询的优化写法,但是with as的结果必须被查询语句使用,否则with as不会输出任何结果。具体用法参考hive (with as)【转载】。
hive (gmall)>
with
tmp_order as
(select user_id, sum(oc.total_amount) order_amount, count(*) order_countfrom dwd_order_info ocwhere date_format(oc.create_time,'yyyy-MM-dd')='2019-02-10'group by user_id
),
tmp_payment as
(select user_id, sum(pi.total_amount) payment_amount, count(*) payment_count from dwd_payment_info pi where date_format(pi.payment_time,'yyyy-MM-dd')='2019-02-10'group by user_id
),
tmp_comment as
( select user_id, count(*) comment_countfrom dwd_comment_log cwhere date_format(c.dt,'yyyy-MM-dd')='2019-02-10'group by user_id
)
insert overwrite table dws_user_action partition(dt='2019-02-10')
select user_actions.user_id, sum(user_actions.order_count), sum(user_actions.order_amount),sum(user_actions.payment_count), sum(user_actions.payment_amount),sum(user_actions.comment_count)
from
(select user_id, order_count,order_amount,0 payment_count , 0 payment_amount, 0 comment_count from tmp_order union allselect user_id, 0 order_count,0 order_amount, payment_count, payment_amount,0 comment_countfrom tmp_paymentunion allselect user_id, 0 order_count,0 order_amount,0 payment_count,0 payment_amount,comment_count from tmp_comment) user_actions
group by user_id;
数据仓库项目(第五节)数仓理论、电商业务数仓介绍与创建相关推荐
- 电商离线数仓项目实战(下)
电商离线数仓项目实战(下) 电商分析--核心交易 文章目录 电商离线数仓项目实战(下) 电商分析--核心交易 一.业务需求 二.业务数据库表结构 1. 数据库表之间的联系 img 2. 业务数据库-- ...
- 大数据项目--电商业务数据仓库
文章目录 一.电商业务与数据结构简介 1.1 电商业务流程图 1.2 数据表结构 1.2.1 电商常识 (SKU,SPU) 1.2.2 订单表(order_info) 订单详情表 (order_det ...
- [电商实时数仓] 数据仓库建模过程分析
文章目录 1.数据仓库概述 1.1 数据仓库概念 1.2 数据仓库核心架构 2.数据仓库建模概述 2.1 数据仓库建模的意义 2.2 数据仓库建模方法论 2.2.1 ER模型 2.2.2 维度模型 3 ...
- 电商离线数仓-业务数仓指标(GMV主题/转化率主题)
GMV和转化率 GMV主题 GMV的概念 GMV表的创建 GMV表里导入数据 转化率 转化率概念 转化率表的创建 转化率表里导入数据 ADS层用户行为漏斗分析 GMV主题 GMV的概念 什么是GMV? ...
- 京东云上集市谋定中国农民丰收节交易会 建九江电商产业园
京东云上集市谋定中国农民丰收节交易会 建九江电商产业园 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 哲商对话 万权采编:京东11.11是全民消费节日,九江联合京东 ...
- 数据仓库电商业务简介完整使用 (第二章)
电商业务简介 一.电商业务简介 1.电商业务流程 2.电商常识 1)SKU和SPU 2)平台属性和销售属性 1)平台属性 2)销售属性 二.业务数据介绍 1.电商系统表结构 1.活动信息表(activ ...
- shop源码PHP免授权,ShopsN五核全网免费开源电商系统 v2.4.0(拼团)
ShopsN五核全网免费开源电商系统是一款符合企业级商用标准全功能的真正允许免费商业用途的开源网店全网系统,可以实现PC+WAP+微信+安卓+iOS 客户端商城系统. ShopsN五核全网免费开源电商 ...
- 电商包裹数背后的秘密,阿里为何紧张拼多多
5月22日,国内两大电商平台阿里巴巴和拼多多同时发布了2020年第一季度的财报.财报发布后当天,拼多多涨14.5%,阿里巴巴跌5.87%. 电商各项数据关联度高.因此,有人用推算的包裹数来验证各家平台 ...
- 实在RPA专家课:AI+RPA如何赋能电商的数智化升级
近些年来,人口红利消失,流量红利衰退,我国电商行业渗透步入高位,增长趋势放缓.同时电商企业开始由劳动力密集型向技术密集型转变,这对电商企业的精细化运营提出了更高要求.如何真正实现数智化升级,也就成为了 ...
最新文章
- 项目分享三:页面之间的传值
- Silverlight实用窍门系列:65.Silverlight的数据模板DataTemplate(一)使用数据模板
- 移动端调试利器------微信开源项目
- hadoop2.2.0 yarn-site.xml--IPC Configs
- wxWidgets:wxCloseEvent类用法
- 使用pscp从windows电脑拷贝数据到linux遇到的ssh_init错误
- cassandra 备份_使用sstableloader恢复Cassandra Priam备份
- spring boot 服务器常用
- linux 升级java_linux 升级jdk1.8
- MFCButton Memory leak(内存泄露问题)
- mybatis mysql 存储过程传入对象_mybatis 调用mysql存储过程 带输出输入参数
- [渝粤教育] 中国地质大学 计算机图形学(新) 复习题 (2)
- 女程序员做了个梦,神评论。。。
- Sopcast软件中凤凰卫视频道列表代码
- 谷歌在中国大陆停止谷歌翻译服务,Chrome “翻成中文”无法使用
- 概率论与数理统计的基本概念
- 「读书」人生十二法则
- 小甜甜布兰妮 天后神马时候才能消停点the soklo
- 前端 学习笔记 【持更】
- 医学考计算机的研究生,医学信息工程能考这些大学的研究生你知道吗
热门文章
- 基于小波图像去噪的MATLAB实现
- CSS3的应用-“优课教育”网站首页制作
- php正则换成js正则,php正则替换_php使用正则替换过滤掉js脚本例子
- C语言坐标结构,关于c语言结构体偏移的一点思考(一)
- java中对数组中文件名排序_leetcode第八天删除排序数组中的重复项
- 【python爬虫】HIMCM2016 FedEx联邦快递的一日达地图
- HIMCM2019题目
- 《超级时间整理术——每天多出一小时》读书笔记
- 重庆三峡学院计算机英语期末考试,重庆三峡学院期末考试——英语阅读课程习题集.doc...
- numactl mysql_mysqld_multi多实例及numactl资源绑定