
ODS层存储您从业务系统获得的最原始的数据. 它是其他上层数据的源数据. 业务数据系统中的数据通常是非常详细的数据,经过长时间积累并且经常访问,并且是面向应用程序的数据.
描述在构建MaxCompute数据仓库的表之前您当前的网络存在链路层劫持,您需要首先了解MaxCompute支持的内容.
在本教程中,ODS层中包含的主要数据是: 交易系统订单明细,用户信息明细,产品明细等. 此数据未经处理,是最原始的数据. 从逻辑上讲,这些数据以二维表的形式存储. 尽管严格地说,ODS层不属于几种仓库建模的范畴,但是正确规划ODS层并做好数据同步也很重要. 在本教程中,使用了6个ODS表:
请参考ODS层表命名,数据同步任务命名,数据输出,生命周期管理和数据质量规范.
为方便起见,表创建语句如下.
CREATE TABLE IF NOT EXISTS s_auction
(
id STRING COMMENT '商品ID',
title STRING COMMENT '商品名',
gmt_modified STRING COMMENT '商品最后修改日期',
price DOUBLE COMMENT '商品成交价格,单位元',
starts STRING COMMENT '商品上架时间',
minimum_bid DOUBLE COMMENT '拍卖商品起拍价,单位元',
duration STRING COMMENT '有效期,销售周期,单位天',
incrementnum DOUBLE COMMENT '拍卖价格的增价幅度',
city STRING COMMENT '商品所在城市',
prov STRING COMMENT '商品所在省份',
ends STRING COMMENT '销售结束时间',
quantity BIGINT COMMENT '数量',
stuff_status BIGINT COMMENT '商品新旧程度 0 全新 1 闲置 2 二手',
auction_status BIGINT COMMENT '商品状态 0 正常 1 用户删除 2 下架 3 从未上架',
cate_id BIGINT COMMENT '商品类目ID',
cate_name STRING COMMENT '商品类目名称',
commodity_id BIGINT COMMENT '品类ID',
commodity_name STRING COMMENT '品类名称',
umid STRING COMMENT '买家umid'
)
COMMENT '商品拍卖ODS'
PARTITIONED BY (ds STRING COMMENT '格式:YYYYMMDD')
LIFECYCLE 400;
CREATE TABLE IF NOT EXISTS s_sale
(
id STRING COMMENT '商品ID',
title STRING COMMENT '商品名',
gmt_modified STRING COMMENT '商品最后修改日期',
starts STRING COMMENT '商品上架时间',
price DOUBLE COMMENT '商品价格,单位元',
city STRING COMMENT '商品所在城市',
prov STRING COMMENT '商品所在省份',
quantity BIGINT COMMENT '数量',
stuff_status BIGINT COMMENT '商品新旧程度 0 全新 1 闲置 2 二手',
auction_status BIGINT COMMENT '商品状态 0 正常 1 用户删除 2 下架 3 从未上架',
cate_id BIGINT COMMENT '商品类目ID',
cate_name STRING COMMENT '商品类目名称',
commodity_id BIGINT COMMENT '品类ID',
commodity_name STRING COMMENT '品类名称',
umid STRING COMMENT '买家umid'
)
COMMENT '商品正常购买ODS'
PARTITIONED BY (ds STRING COMMENT '格式:YYYYMMDD')
LIFECYCLE 400;
CREATE TABLE IF NOT EXISTS s_users_extra
(
id STRING COMMENT '用户ID',
logincount BIGINT COMMENT '登录次数',
buyer_goodnum BIGINT COMMENT '作为买家的好评数',
seller_goodnum BIGINT COMMENT '作为卖家的好评数',
level_type BIGINT COMMENT '1 一级店铺 2 二级店铺 3 三级店铺',
promoted_num BIGINT COMMENT '1 A级服务 2 B级服务 3 C级服务',
gmt_create STRING COMMENT '创建时间',
order_id BIGINT COMMENT '订单ID',
buyer_id BIGINT COMMENT '买家ID',
buyer_nick STRING COMMENT '买家昵称',
buyer_star_id BIGINT COMMENT '买家星级 ID',
seller_id BIGINT COMMENT '卖家ID',
seller_nick STRING COMMENT '卖家昵称',
seller_star_id BIGINT COMMENT '卖家星级ID',
shop_id BIGINT COMMENT '店铺ID',
shop_name STRING COMMENT '店铺名称'
)
COMMENT '用户扩展表'
PARTITIONED BY (ds STRING COMMENT 'yyyymmdd')
LIFECYCLE 400;
CREATE TABLE IF NOT EXISTS s_biz_order_delta
(
biz_order_id STRING COMMENT '订单ID',
pay_order_id STRING COMMENT '支付订单ID',
logistics_order_id STRING COMMENT '物流订单ID',
buyer_nick STRING COMMENT '买家昵称',
buyer_id STRING COMMENT '买家ID',
seller_nick STRING COMMENT '卖家昵称',
seller_id STRING COMMENT '卖家ID',
auction_id STRING COMMENT '商品ID',
auction_title STRING COMMENT '商品标题 ',
auction_price DOUBLE COMMENT '商品价格',
buy_amount BIGINT COMMENT '购买数量',
buy_fee BIGINT COMMENT '购买金额',
pay_status BIGINT COMMENT '支付状态 1 未付款 2 已付款 3 已退款',
logistics_id BIGINT COMMENT '物流订单ID',
mord_cod_status BIGINT COMMENT '物流状态 0 初始状态 1 接单成功 2 接单超时3 揽收成功 4揽收失败 5 签收成功 6 签收失败 7 用户取消物流订单',
status BIGINT COMMENT '状态 0 订单正常 1 订单不可见',
sub_biz_type BIGINT COMMENT '业务类型 1 拍卖 2 购买',
end_time STRING COMMENT '交易结束时间',
shop_id BIGINT COMMENT '店铺ID'
)
COMMENT '交易成功订单日增量表'
PARTITIONED BY (ds STRING COMMENT 'yyyymmdd')
LIFECYCLE 7200;
CREATE TABLE IF NOT EXISTS s_logistics_order_delta
(
logistics_order_id STRING COMMENT '物流订单ID ',
post_fee DOUBLE COMMENT '物流费用',
address STRING COMMENT '收货地址',
full_name STRING COMMENT '收货人全名',
mobile_phone STRING COMMENT '移动电话',
prov STRING COMMENT '省份',
prov_code STRING COMMENT '省份ID',
city STRING COMMENT '市',
city_code STRING COMMENT '城市ID',
logistics_status BIGINT COMMENT '物流状态
1 - 未发货
2 - 已发货
3 - 已收货
4 - 已退货
5 - 配货中',
consign_time STRING COMMENT '发货时间',
gmt_create STRING COMMENT '订单创建时间',
shipping BIGINT COMMENT '发货方式
1,平邮
2,快递
3,EMS',
seller_id STRING COMMENT '卖家ID',
buyer_id STRING COMMENT '买家ID'
)
COMMENT '交易物流订单日增量表'
PARTITIONED BY (ds STRING COMMENT '日期')
LIFECYCLE 7200;
CREATE TABLE IF NOT EXISTS s_pay_order_delta
(
pay_order_id STRING COMMENT '支付订单ID',
total_fee DOUBLE COMMENT '应支付总金额 (数量*单价)',
seller_id STRING COMMENT '卖家ID',
buyer_id STRING COMMENT '买家ID',
pay_status BIGINT COMMENT '支付状态
1等待买家付款,
2等待卖家发货,
3交易成功',
pay_time STRING COMMENT '付款时间',
gmt_create STRING COMMENT '订单创建时间',
refund_fee DOUBLE COMMENT '退款金额(包含运费)',
confirm_paid_fee DOUBLE COMMENT '已经确认收货的金额'
)
COMMENT '交易支付订单增量表'
PARTITIONED BY (ds STRING COMMENT '日期')
LIFECYCLE 7200;

为了满足历史数据分析的需要,可以在ODS图层表中将时间维添加为分区字段. 在实际应用中,您可以选择使用增量存储,完整存储或拉链存储.
具有强大事务性质的描述ODS表(例如事务和日志)适用于增量存储. 这种类型的表具有大量数据,并且以完全存储模式存储它的成本很高. 另外,这种类型的表的下游应用程序需要较少的历史完整数据访问权限(可以通过随后聚合数据仓库来获得此类要求). 例如,日志ODS表没有数据更新的业务流程,因此所有增量分区UNION在一起都是完整的数据.
完整存储
以天为单位的完整存储,以业务日期为分区,每个分区存储截至业务日期的完整业务数据. 例如,1月1日您当前的网络存在链路层劫持,卖方A在公司的电子商务网络上发布了两种产品B和C. 前端产品表将生成两个记录t1和t2. 1月2日,卖方A移除了B产品. 同时,商品D被释放. 前端商品表将更新记录t1,并生成一个新记录t3. 采用完全存储方式,1月1日在该分区中存储了两条记录t1和t2,1月2日在该分区中存储了更新的t1,t2和t3记录.
说明要使用小数据量(例如产品类别)缓慢更改尺寸数据,可以直接使用完整卷存储.
邮编存储

拉链存储通过添加两个时间戳字段(start_dt和end_dt)来记录两个日间更改数据. 通常,分区字段也是这两个时间戳字段.
下面显示了一个拉链存储示例. 产品start_dtend_dt卖家状态
20160101
20160102
特价
20160101

30001231
特价
20160102
30001231
已删除
通过这种方式,下游应用程序可以通过限制时间戳字段来获取历史数据. 例如,在1月1日访问数据的用户只需要限制stat_dt <= 20160101和end_dt> 20160101.

MaxCompute不建议使用代理键和自然键作为维主键. 有两个主要原因: MaxCompute是一个分布式计算引擎,并且生成全局唯一代理密钥的工作量非常大. 当遇到大数据时,这项工作变得更加复杂和不必要. 代理密钥的使用增加了ETL的复杂性,从而增加了ETL任务的开发和维护成本.
在使用代理键的情况下,可以通过快照处理尺寸的缓慢变化.
快照模式下数据的计算周期通常为每天一次. 基于此周期,尺寸变化每天都作为完整快照处理.
例如,产品维,每天维护完整的产品快照数据. 每天的事实表都可以获取当天的产品信息或最新的产品信息. 您可以使用自然键在限定日期内进行关联. 这种方法的优点主要有以下两点:
这种方法的缺点主要是巨大的存储空间浪费. 例如,总数据量中维的每日变化量非常低. 在极端情况下,每天都没有变化. 在这种情况下,存储浪费很严重. 该方法主要通过牺牲存储量来实现ETL效率的优化和逻辑简化. 请避免过多使用此方法,并且必须具有相应的数据生命周期系统才能清除无用的历史数据.
每个数据源系统都需要将ODS数据同步到MaxCompute,然后才能将其用于进一步的数据开发. 本教程建议您使用DataWorks数据集成来完成数据同步,请参阅详细信息. 在使用数据集成时,我们建议您遵循以下规范:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-145109-1.html
搞不懂他们连鉴定对象是谁都不知道还要鉴定什么