登录不是原子行为,而登录成功是,
而支付也不是原子,也分成功失败。
什么是原子型? 一条线
注意一下密码, mysql的密码是MD5加密,而MD5的长度为固定的32
1.确定表名
2.确定一行数据所表示的含义
3.确定列定义
4.确定度量值,就是可以统计的值,
放入购物车或者增加数量
购物车 用户 商品
购物车ID 用户ID 商品ID 商品数量
商品数量
购物车ID,用户ID,商品ID 商品数量 修改时间(添加时间)
日期ID是为了维度分析
加购时间是行为时间(ts)
DROP TABLE IF EXISTS dwd_trade_cart_add_inc;
CREATE EXTERNAL TABLE dwd_trade_cart_add_inc
(
`id` STRING COMMENT '编号',
`user_id` STRING COMMENT '用户ID',
`sku_id` STRING COMMENT 'SKU_ID',
`date_id` STRING COMMENT '日期ID',
`create_time` STRING COMMENT '加购时间',
`sku_num` BIGINT COMMENT '加购物车件数'
) COMMENT '交易域加购事务事实表'
PARTITIONED BY (`dt` STRING)
STORED AS ORC
LOCATION '/warehouse/gmall/dwd/dwd_trade_cart_add_inc/'
TBLPROPERTIES ('orc.compress' = 'snappy');
默认首日全部都是增量
-- 首日数据装载
insert overwrite table dwd_trade_cart_add_inc partition (dt)
select
data.`id` ,-- STRING COMMENT '编号',
data.`user_id` ,--STRING COMMENT '用户ID',
data.`sku_id` ,--STRING COMMENT 'SKU_ID',
date_format(data.create_time, 'yyyy-MM-dd') `date_id` ,--STRING COMMENT '日期ID',
data.`create_time` ,--STRING COMMENT '加购时间',
data.`sku_num` ,--BIGINT COMMENT '加购物车件数'
date_format(data.create_time, 'yyyy-MM-dd')
from ods_cart_info_inc
where dt = '2022-06-08'
and type = 'bootstrap-insert';
-- 每日数据装载
-- 9号只能获取9号的数据,所以分区采用静态分区即可
insert overwrite table dwd_trade_cart_add_inc partition (dt='2022-06-09')
select
data.`id` ,-- STRING COMMENT '编号',
data.`user_id` ,--STRING COMMENT '用户ID',
data.`sku_id` ,--STRING COMMENT 'SKU_ID',
date_format(if ( type = 'insert', data.`create_time`, data.operate_time ), 'yyyy-MM-dd') `date_id` ,--STRING COMMENT '日期ID',
if ( type = 'insert', data.`create_time`, data.operate_time ) ,--STRING COMMENT '加购时间',
if ( type = 'insert', data.`sku_num`, data.sku_num - cast(old['sku_num'] as bigint) ) --BIGINT COMMENT '加购物车件数'
from ods_cart_info_inc
where dt = '2022-06-09'
and type = 'insert'
or (
type = 'update'
and
array_contains(map_keys(old), 'sku_num')
and
data.sku_num > cast(old['sku_num'] as bigint)
);
long类型 - 字符串
hive自动转化为了long类型
但是比较无法帮助比较类型转换
无法判断是想按左边比较还是想按右边进行比较,无法识别意图