离线数仓 (十四) --------- DWS 层搭建

清疚 2024-04-01 11:41 145阅读 0赞

目录

  • 一、系统函数
      1. nvl 函数
      1. 日期处理函数
      1. 复杂数据类型定义
  • 二、DWS 层
      1. 访客主题
      1. 用户主题
      1. 商品主题
      1. 优惠券主题
      1. 活动主题
      1. 地区主题
      1. DWS 层首日数据装载脚本
      1. DWS 层每日数据装载脚本

一、系统函数

1. nvl 函数

A、基本语法

  1. NVL(表达式1,表达式2)

如果表达式 1 为空值,NVL 返回值为 表达式 2 的值,否则返回表达式 1 的值。

该函数的目的是把一个空值 (null) 转换成一个实际的值。其表达式的值可以是数字型、字符型和日期型。但是表达式1和表达式2的数据类型必须为同一个类型。

B、案例实操

  1. hive (gmall)> select nvl(1,0);
  2. 1
  3. hive (gmall)> select nvl(null,"hello");
  4. hello

2. 日期处理函数

A、date_format 函数 (根据格式整理日期)

  1. hive (gmall)> select date_format('2020-06-14','yyyy-MM');
  2. 2020-06

B、date_add 函数 (加减日期)

  1. hive (gmall)> select date_add('2020-06-14',-1);
  2. 2020-06-13
  3. hive (gmall)> select date_add('2020-06-14',1);
  4. 2020-06-15

C、next_day 函数

取当前天的下一个周一

  1. hive (gmall)> select next_day('2020-06-14','MO');
  2. 2020-06-15

取当前周的周一

  1. hive (gmall)> select date_add(next_day('2020-06-14','MO'),-7);
  2. 2020-06-8

D、last_day函数 (求当月最后一天日期)

  1. hive (gmall)> select last_day('2020-06-14');
  2. 2020-06-30

3. 复杂数据类型定义

A、map 结构数据定义

  1. map<string,string>

B、array结构数据定义

  1. array<string>

C、struct 结构数据定义

  1. struct<id:int,name:string,age:int>

D、struct 和 array 嵌套定义

  1. array<struct<id:int,name:string,age:int>>

二、DWS 层

A、DWS 层分区
在这里插入图片描述

B、DWS 层数据装载
在这里插入图片描述

1. 访客主题

A、建表语句

  1. DROP TABLE IF EXISTS dws_visitor_action_daycount;
  2. CREATE EXTERNAL TABLE dws_visitor_action_daycount
  3. (
  4. `mid_id` STRING COMMENT '设备id',
  5. `brand` STRING COMMENT '设备品牌',
  6. `model` STRING COMMENT '设备型号',
  7. `is_new` STRING COMMENT '是否首次访问',
  8. `channel` ARRAY<STRING> COMMENT '渠道',
  9. `os` ARRAY<STRING> COMMENT '操作系统',
  10. `area_code` ARRAY<STRING> COMMENT '地区ID',
  11. `version_code` ARRAY<STRING> COMMENT '应用版本',
  12. `visit_count` BIGINT COMMENT '访问次数',
  13. `page_stats` ARRAY<STRUCT<page_id:STRING,page_count:BIGINT,during_time:BIGINT>> COMMENT '页面访问统计'
  14. ) COMMENT '每日设备行为表'
  15. PARTITIONED BY(`dt` STRING)
  16. STORED AS PARQUET
  17. LOCATION '/warehouse/gmall/dws/dws_visitor_action_daycount'
  18. TBLPROPERTIES ("parquet.compression"="lzo");

B、数据装载

  1. insert overwrite table dws_visitor_action_daycount partition(dt='2020-06-14')
  2. select
  3. t1.mid_id,
  4. t1.brand,
  5. t1.model,
  6. t1.is_new,
  7. t1.channel,
  8. t1.os,
  9. t1.area_code,
  10. t1.version_code,
  11. t1.visit_count,
  12. t3.page_stats
  13. from
  14. (
  15. select
  16. mid_id,
  17. brand,
  18. model,
  19. if(array_contains(collect_set(is_new),'0'),'0','1') is_new,--ods_page_log中,同一天内,同一设备的is_new字段,可能全部为1,可能全部为0,也可能部分为0,部分为1(卸载重装),故做该处理
  20. collect_set(channel) channel,
  21. collect_set(os) os,
  22. collect_set(area_code) area_code,
  23. collect_set(version_code) version_code,
  24. sum(if(last_page_id is null,1,0)) visit_count
  25. from dwd_page_log
  26. where dt='2020-06-14'
  27. and last_page_id is null
  28. group by mid_id,model,brand
  29. )t1
  30. join
  31. (
  32. select
  33. mid_id,
  34. brand,
  35. model,
  36. collect_set(named_struct('page_id',page_id,'page_count',page_count,'during_time',during_time)) page_stats
  37. from
  38. (
  39. select
  40. mid_id,
  41. brand,
  42. model,
  43. page_id,
  44. count(*) page_count,
  45. sum(during_time) during_time
  46. from dwd_page_log
  47. where dt='2020-06-14'
  48. group by mid_id,model,brand,page_id
  49. )t2
  50. group by mid_id,model,brand
  51. )t3
  52. on t1.mid_id=t3.mid_id
  53. and t1.brand=t3.brand
  54. and t1.model=t3.model;

C、查询加载结果

2. 用户主题

A、建表语句

  1. DROP TABLE IF EXISTS dws_user_action_daycount;
  2. CREATE EXTERNAL TABLE dws_user_action_daycount
  3. (
  4. `user_id` STRING COMMENT '用户id',
  5. `login_count` BIGINT COMMENT '登录次数',
  6. `cart_count` BIGINT COMMENT '加入购物车次数',
  7. `favor_count` BIGINT COMMENT '收藏次数',
  8. `order_count` BIGINT COMMENT '下单次数',
  9. `order_activity_count` BIGINT COMMENT '订单参与活动次数',
  10. `order_activity_reduce_amount` DECIMAL(16,2) COMMENT '订单减免金额(活动)',
  11. `order_coupon_count` BIGINT COMMENT '订单用券次数',
  12. `order_coupon_reduce_amount` DECIMAL(16,2) COMMENT '订单减免金额(优惠券)',
  13. `order_original_amount` DECIMAL(16,2) COMMENT '订单单原始金额',
  14. `order_final_amount` DECIMAL(16,2) COMMENT '订单总金额',
  15. `payment_count` BIGINT COMMENT '支付次数',
  16. `payment_amount` DECIMAL(16,2) COMMENT '支付金额',
  17. `refund_order_count` BIGINT COMMENT '退单次数',
  18. `refund_order_num` BIGINT COMMENT '退单件数',
  19. `refund_order_amount` DECIMAL(16,2) COMMENT '退单金额',
  20. `refund_payment_count` BIGINT COMMENT '退款次数',
  21. `refund_payment_num` BIGINT COMMENT '退款件数',
  22. `refund_payment_amount` DECIMAL(16,2) COMMENT '退款金额',
  23. `coupon_get_count` BIGINT COMMENT '优惠券领取次数',
  24. `coupon_using_count` BIGINT COMMENT '优惠券使用(下单)次数',
  25. `coupon_used_count` BIGINT COMMENT '优惠券使用(支付)次数',
  26. `appraise_good_count` BIGINT COMMENT '好评数',
  27. `appraise_mid_count` BIGINT COMMENT '中评数',
  28. `appraise_bad_count` BIGINT COMMENT '差评数',
  29. `appraise_default_count` BIGINT COMMENT '默认评价数',
  30. `order_detail_stats` array<struct<sku_id:string,sku_num:bigint,order_count:bigint,activity_reduce_amount:decimal(16,2),coupon_reduce_amount:decimal(16,2),original_amount:decimal(16,2),final_amount:decimal(16,2)>> COMMENT '下单明细统计'
  31. ) COMMENT '每日用户行为'
  32. PARTITIONED BY (`dt` STRING)
  33. STORED AS PARQUET
  34. LOCATION '/warehouse/gmall/dws/dws_user_action_daycount/'
  35. TBLPROPERTIES ("parquet.compression"="lzo");

B、数据装载

首日装载

  1. with
  2. tmp_login as
  3. (
  4. select
  5. dt,
  6. user_id,
  7. count(*) login_count
  8. from dwd_page_log
  9. where user_id is not null
  10. and last_page_id is null
  11. group by dt,user_id
  12. ),
  13. tmp_cf as
  14. (
  15. select
  16. dt,
  17. user_id,
  18. sum(if(action_id='cart_add',1,0)) cart_count,
  19. sum(if(action_id='favor_add',1,0)) favor_count
  20. from dwd_action_log
  21. where user_id is not null
  22. and action_id in ('cart_add','favor_add')
  23. group by dt,user_id
  24. ),
  25. tmp_order as
  26. (
  27. select
  28. date_format(create_time,'yyyy-MM-dd') dt,
  29. user_id,
  30. count(*) order_count,
  31. sum(if(activity_reduce_amount>0,1,0)) order_activity_count,
  32. sum(if(coupon_reduce_amount>0,1,0)) order_coupon_count,
  33. sum(activity_reduce_amount) order_activity_reduce_amount,
  34. sum(coupon_reduce_amount) order_coupon_reduce_amount,
  35. sum(original_amount) order_original_amount,
  36. sum(final_amount) order_final_amount
  37. from dwd_order_info
  38. group by date_format(create_time,'yyyy-MM-dd'),user_id
  39. ),
  40. tmp_pay as
  41. (
  42. select
  43. date_format(callback_time,'yyyy-MM-dd') dt,
  44. user_id,
  45. count(*) payment_count,
  46. sum(payment_amount) payment_amount
  47. from dwd_payment_info
  48. group by date_format(callback_time,'yyyy-MM-dd'),user_id
  49. ),
  50. tmp_ri as
  51. (
  52. select
  53. date_format(create_time,'yyyy-MM-dd') dt,
  54. user_id,
  55. count(*) refund_order_count,
  56. sum(refund_num) refund_order_num,
  57. sum(refund_amount) refund_order_amount
  58. from dwd_order_refund_info
  59. group by date_format(create_time,'yyyy-MM-dd'),user_id
  60. ),
  61. tmp_rp as
  62. (
  63. select
  64. date_format(callback_time,'yyyy-MM-dd') dt,
  65. rp.user_id,
  66. count(*) refund_payment_count,
  67. sum(ri.refund_num) refund_payment_num,
  68. sum(rp.refund_amount) refund_payment_amount
  69. from
  70. (
  71. select
  72. user_id,
  73. order_id,
  74. sku_id,
  75. refund_amount,
  76. callback_time
  77. from dwd_refund_payment
  78. )rp
  79. left join
  80. (
  81. select
  82. user_id,
  83. order_id,
  84. sku_id,
  85. refund_num
  86. from dwd_order_refund_info
  87. )ri
  88. on rp.order_id=ri.order_id
  89. and rp.sku_id=rp.sku_id
  90. group by date_format(callback_time,'yyyy-MM-dd'),rp.user_id
  91. ),
  92. tmp_coupon as
  93. (
  94. select
  95. coalesce(coupon_get.dt,coupon_using.dt,coupon_used.dt) dt,
  96. coalesce(coupon_get.user_id,coupon_using.user_id,coupon_used.user_id) user_id,
  97. nvl(coupon_get_count,0) coupon_get_count,
  98. nvl(coupon_using_count,0) coupon_using_count,
  99. nvl(coupon_used_count,0) coupon_used_count
  100. from
  101. (
  102. select
  103. date_format(get_time,'yyyy-MM-dd') dt,
  104. user_id,
  105. count(*) coupon_get_count
  106. from dwd_coupon_use
  107. where get_time is not null
  108. group by user_id,date_format(get_time,'yyyy-MM-dd')
  109. )coupon_get
  110. full outer join
  111. (
  112. select
  113. date_format(using_time,'yyyy-MM-dd') dt,
  114. user_id,
  115. count(*) coupon_using_count
  116. from dwd_coupon_use
  117. where using_time is not null
  118. group by user_id,date_format(using_time,'yyyy-MM-dd')
  119. )coupon_using
  120. on coupon_get.dt=coupon_using.dt
  121. and coupon_get.user_id=coupon_using.user_id
  122. full outer join
  123. (
  124. select
  125. date_format(used_time,'yyyy-MM-dd') dt,
  126. user_id,
  127. count(*) coupon_used_count
  128. from dwd_coupon_use
  129. where used_time is not null
  130. group by user_id,date_format(used_time,'yyyy-MM-dd')
  131. )coupon_used
  132. on nvl(coupon_get.dt,coupon_using.dt)=coupon_used.dt
  133. and nvl(coupon_get.user_id,coupon_using.user_id)=coupon_used.user_id
  134. ),
  135. tmp_comment as
  136. (
  137. select
  138. date_format(create_time,'yyyy-MM-dd') dt,
  139. user_id,
  140. sum(if(appraise='1201',1,0)) appraise_good_count,
  141. sum(if(appraise='1202',1,0)) appraise_mid_count,
  142. sum(if(appraise='1203',1,0)) appraise_bad_count,
  143. sum(if(appraise='1204',1,0)) appraise_default_count
  144. from dwd_comment_info
  145. group by date_format(create_time,'yyyy-MM-dd'),user_id
  146. ),
  147. tmp_od as
  148. (
  149. select
  150. dt,
  151. user_id,
  152. collect_set(named_struct('sku_id',sku_id,'sku_num',sku_num,'order_count',order_count,'activity_reduce_amount',activity_reduce_amount,'coupon_reduce_amount',coupon_reduce_amount,'original_amount',original_amount,'final_amount',final_amount)) order_detail_stats
  153. from
  154. (
  155. select
  156. date_format(create_time,'yyyy-MM-dd') dt,
  157. user_id,
  158. sku_id,
  159. sum(sku_num) sku_num,
  160. count(*) order_count,
  161. cast(sum(split_activity_amount) as decimal(16,2)) activity_reduce_amount,
  162. cast(sum(split_coupon_amount) as decimal(16,2)) coupon_reduce_amount,
  163. cast(sum(original_amount) as decimal(16,2)) original_amount,
  164. cast(sum(split_final_amount) as decimal(16,2)) final_amount
  165. from dwd_order_detail
  166. group by date_format(create_time,'yyyy-MM-dd'),user_id,sku_id
  167. )t1
  168. group by dt,user_id
  169. )
  170. insert overwrite table dws_user_action_daycount partition(dt)
  171. select
  172. coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id,tmp_comment.user_id,tmp_coupon.user_id,tmp_od.user_id),
  173. nvl(login_count,0),
  174. nvl(cart_count,0),
  175. nvl(favor_count,0),
  176. nvl(order_count,0),
  177. nvl(order_activity_count,0),
  178. nvl(order_activity_reduce_amount,0),
  179. nvl(order_coupon_count,0),
  180. nvl(order_coupon_reduce_amount,0),
  181. nvl(order_original_amount,0),
  182. nvl(order_final_amount,0),
  183. nvl(payment_count,0),
  184. nvl(payment_amount,0),
  185. nvl(refund_order_count,0),
  186. nvl(refund_order_num,0),
  187. nvl(refund_order_amount,0),
  188. nvl(refund_payment_count,0),
  189. nvl(refund_payment_num,0),
  190. nvl(refund_payment_amount,0),
  191. nvl(coupon_get_count,0),
  192. nvl(coupon_using_count,0),
  193. nvl(coupon_used_count,0),
  194. nvl(appraise_good_count,0),
  195. nvl(appraise_mid_count,0),
  196. nvl(appraise_bad_count,0),
  197. nvl(appraise_default_count,0),
  198. order_detail_stats,
  199. coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt,tmp_pay.dt,tmp_ri.dt,tmp_rp.dt,tmp_comment.dt,tmp_coupon.dt,tmp_od.dt)
  200. from tmp_login
  201. full outer join tmp_cf
  202. on tmp_login.user_id=tmp_cf.user_id
  203. and tmp_login.dt=tmp_cf.dt
  204. full outer join tmp_order
  205. on coalesce(tmp_login.user_id,tmp_cf.user_id)=tmp_order.user_id
  206. and coalesce(tmp_login.dt,tmp_cf.dt)=tmp_order.dt
  207. full outer join tmp_pay
  208. on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id)=tmp_pay.user_id
  209. and coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt)=tmp_pay.dt
  210. full outer join tmp_ri
  211. on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id)=tmp_ri.user_id
  212. and coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt,tmp_pay.dt)=tmp_ri.dt
  213. full outer join tmp_rp
  214. on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id)=tmp_rp.user_id
  215. and coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt,tmp_pay.dt,tmp_ri.dt)=tmp_rp.dt
  216. full outer join tmp_comment
  217. on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id)=tmp_comment.user_id
  218. and coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt,tmp_pay.dt,tmp_ri.dt,tmp_rp.dt)=tmp_comment.dt
  219. full outer join tmp_coupon
  220. on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id,tmp_comment.user_id)=tmp_coupon.user_id
  221. and coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt,tmp_pay.dt,tmp_ri.dt,tmp_rp.dt,tmp_comment.dt)=tmp_coupon.dt
  222. full outer join tmp_od
  223. on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id,tmp_comment.user_id,tmp_coupon.user_id)=tmp_od.user_id
  224. and coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt,tmp_pay.dt,tmp_ri.dt,tmp_rp.dt,tmp_comment.dt,tmp_coupon.dt)=tmp_od.dt;

每日装载

  1. with
  2. tmp_login as
  3. (
  4. select
  5. user_id,
  6. count(*) login_count
  7. from dwd_page_log
  8. where dt='2020-06-15'
  9. and user_id is not null
  10. and last_page_id is null
  11. group by user_id
  12. ),
  13. tmp_cf as
  14. (
  15. select
  16. user_id,
  17. sum(if(action_id='cart_add',1,0)) cart_count,
  18. sum(if(action_id='favor_add',1,0)) favor_count
  19. from dwd_action_log
  20. where dt='2020-06-15'
  21. and user_id is not null
  22. and action_id in ('cart_add','favor_add')
  23. group by user_id
  24. ),
  25. tmp_order as
  26. (
  27. select
  28. user_id,
  29. count(*) order_count,
  30. sum(if(activity_reduce_amount>0,1,0)) order_activity_count,
  31. sum(if(coupon_reduce_amount>0,1,0)) order_coupon_count,
  32. sum(activity_reduce_amount) order_activity_reduce_amount,
  33. sum(coupon_reduce_amount) order_coupon_reduce_amount,
  34. sum(original_amount) order_original_amount,
  35. sum(final_amount) order_final_amount
  36. from dwd_order_info
  37. where (dt='2020-06-15'
  38. or dt='9999-99-99')
  39. and date_format(create_time,'yyyy-MM-dd')='2020-06-15'
  40. group by user_id
  41. ),
  42. tmp_pay as
  43. (
  44. select
  45. user_id,
  46. count(*) payment_count,
  47. sum(payment_amount) payment_amount
  48. from dwd_payment_info
  49. where dt='2020-06-15'
  50. group by user_id
  51. ),
  52. tmp_ri as
  53. (
  54. select
  55. user_id,
  56. count(*) refund_order_count,
  57. sum(refund_num) refund_order_num,
  58. sum(refund_amount) refund_order_amount
  59. from dwd_order_refund_info
  60. where dt='2020-06-15'
  61. group by user_id
  62. ),
  63. tmp_rp as
  64. (
  65. select
  66. rp.user_id,
  67. count(*) refund_payment_count,
  68. sum(ri.refund_num) refund_payment_num,
  69. sum(rp.refund_amount) refund_payment_amount
  70. from
  71. (
  72. select
  73. user_id,
  74. order_id,
  75. sku_id,
  76. refund_amount
  77. from dwd_refund_payment
  78. where dt='2020-06-15'
  79. )rp
  80. left join
  81. (
  82. select
  83. user_id,
  84. order_id,
  85. sku_id,
  86. refund_num
  87. from dwd_order_refund_info
  88. where dt>=date_add('2020-06-15',-15)
  89. )ri
  90. on rp.order_id=ri.order_id
  91. and rp.sku_id=rp.sku_id
  92. group by rp.user_id
  93. ),
  94. tmp_coupon as
  95. (
  96. select
  97. user_id,
  98. sum(if(date_format(get_time,'yyyy-MM-dd')='2020-06-15',1,0)) coupon_get_count,
  99. sum(if(date_format(using_time,'yyyy-MM-dd')='2020-06-15',1,0)) coupon_using_count,
  100. sum(if(date_format(used_time,'yyyy-MM-dd')='2020-06-15',1,0)) coupon_used_count
  101. from dwd_coupon_use
  102. where (dt='2020-06-15' or dt='9999-99-99')
  103. and (date_format(get_time, 'yyyy-MM-dd') = '2020-06-15'
  104. or date_format(using_time,'yyyy-MM-dd')='2020-06-15'
  105. or date_format(used_time,'yyyy-MM-dd')='2020-06-15')
  106. group by user_id
  107. ),
  108. tmp_comment as
  109. (
  110. select
  111. user_id,
  112. sum(if(appraise='1201',1,0)) appraise_good_count,
  113. sum(if(appraise='1202',1,0)) appraise_mid_count,
  114. sum(if(appraise='1203',1,0)) appraise_bad_count,
  115. sum(if(appraise='1204',1,0)) appraise_default_count
  116. from dwd_comment_info
  117. where dt='2020-06-15'
  118. group by user_id
  119. ),
  120. tmp_od as
  121. (
  122. select
  123. user_id,
  124. collect_set(named_struct('sku_id',sku_id,'sku_num',sku_num,'order_count',order_count,'activity_reduce_amount',activity_reduce_amount,'coupon_reduce_amount',coupon_reduce_amount,'original_amount',original_amount,'final_amount',final_amount)) order_detail_stats
  125. from
  126. (
  127. select
  128. user_id,
  129. sku_id,
  130. sum(sku_num) sku_num,
  131. count(*) order_count,
  132. cast(sum(split_activity_amount) as decimal(16,2)) activity_reduce_amount,
  133. cast(sum(split_coupon_amount) as decimal(16,2)) coupon_reduce_amount,
  134. cast(sum(original_amount) as decimal(16,2)) original_amount,
  135. cast(sum(split_final_amount) as decimal(16,2)) final_amount
  136. from dwd_order_detail
  137. where dt='2020-06-15'
  138. group by user_id,sku_id
  139. )t1
  140. group by user_id
  141. )
  142. insert overwrite table dws_user_action_daycount partition(dt='2020-06-15')
  143. select
  144. coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id,tmp_comment.user_id,tmp_coupon.user_id,tmp_od.user_id),
  145. nvl(login_count,0),
  146. nvl(cart_count,0),
  147. nvl(favor_count,0),
  148. nvl(order_count,0),
  149. nvl(order_activity_count,0),
  150. nvl(order_activity_reduce_amount,0),
  151. nvl(order_coupon_count,0),
  152. nvl(order_coupon_reduce_amount,0),
  153. nvl(order_original_amount,0),
  154. nvl(order_final_amount,0),
  155. nvl(payment_count,0),
  156. nvl(payment_amount,0),
  157. nvl(refund_order_count,0),
  158. nvl(refund_order_num,0),
  159. nvl(refund_order_amount,0),
  160. nvl(refund_payment_count,0),
  161. nvl(refund_payment_num,0),
  162. nvl(refund_payment_amount,0),
  163. nvl(coupon_get_count,0),
  164. nvl(coupon_using_count,0),
  165. nvl(coupon_used_count,0),
  166. nvl(appraise_good_count,0),
  167. nvl(appraise_mid_count,0),
  168. nvl(appraise_bad_count,0),
  169. nvl(appraise_default_count,0),
  170. order_detail_stats
  171. from tmp_login
  172. full outer join tmp_cf on tmp_login.user_id=tmp_cf.user_id
  173. full outer join tmp_order on coalesce(tmp_login.user_id,tmp_cf.user_id)=tmp_order.user_id
  174. full outer join tmp_pay on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id)=tmp_pay.user_id
  175. full outer join tmp_ri on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id)=tmp_ri.user_id
  176. full outer join tmp_rp on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id)=tmp_rp.user_id
  177. full outer join tmp_comment on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id)=tmp_comment.user_id
  178. full outer join tmp_coupon on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id,tmp_comment.user_id)=tmp_coupon.user_id
  179. full outer join tmp_od on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id,tmp_comment.user_id,tmp_coupon.user_id)=tmp_od.user_id;

C、查询加载结果

3. 商品主题

A、建表语句

  1. DROP TABLE IF EXISTS dws_sku_action_daycount;
  2. CREATE EXTERNAL TABLE dws_sku_action_daycount
  3. (
  4. `sku_id` STRING COMMENT 'sku_id',
  5. `order_count` BIGINT COMMENT '被下单次数',
  6. `order_num` BIGINT COMMENT '被下单件数',
  7. `order_activity_count` BIGINT COMMENT '参与活动被下单次数',
  8. `order_coupon_count` BIGINT COMMENT '使用优惠券被下单次数',
  9. `order_activity_reduce_amount` DECIMAL(16,2) COMMENT '优惠金额(活动)',
  10. `order_coupon_reduce_amount` DECIMAL(16,2) COMMENT '优惠金额(优惠券)',
  11. `order_original_amount` DECIMAL(16,2) COMMENT '被下单原价金额',
  12. `order_final_amount` DECIMAL(16,2) COMMENT '被下单最终金额',
  13. `payment_count` BIGINT COMMENT '被支付次数',
  14. `payment_num` BIGINT COMMENT '被支付件数',
  15. `payment_amount` DECIMAL(16,2) COMMENT '被支付金额',
  16. `refund_order_count` BIGINT COMMENT '被退单次数',
  17. `refund_order_num` BIGINT COMMENT '被退单件数',
  18. `refund_order_amount` DECIMAL(16,2) COMMENT '被退单金额',
  19. `refund_payment_count` BIGINT COMMENT '被退款次数',
  20. `refund_payment_num` BIGINT COMMENT '被退款件数',
  21. `refund_payment_amount` DECIMAL(16,2) COMMENT '被退款金额',
  22. `cart_count` BIGINT COMMENT '被加入购物车次数',
  23. `favor_count` BIGINT COMMENT '被收藏次数',
  24. `appraise_good_count` BIGINT COMMENT '好评数',
  25. `appraise_mid_count` BIGINT COMMENT '中评数',
  26. `appraise_bad_count` BIGINT COMMENT '差评数',
  27. `appraise_default_count` BIGINT COMMENT '默认评价数'
  28. ) COMMENT '每日商品行为'
  29. PARTITIONED BY (`dt` STRING)
  30. STORED AS PARQUET
  31. LOCATION '/warehouse/gmall/dws/dws_sku_action_daycount/'
  32. TBLPROPERTIES ("parquet.compression"="lzo");

B、数据装载

首日装载

  1. with
  2. tmp_order as
  3. (
  4. select
  5. date_format(create_time,'yyyy-MM-dd') dt,
  6. sku_id,
  7. count(*) order_count,
  8. sum(sku_num) order_num,
  9. sum(if(split_activity_amount>0,1,0)) order_activity_count,
  10. sum(if(split_coupon_amount>0,1,0)) order_coupon_count,
  11. sum(split_activity_amount) order_activity_reduce_amount,
  12. sum(split_coupon_amount) order_coupon_reduce_amount,
  13. sum(original_amount) order_original_amount,
  14. sum(split_final_amount) order_final_amount
  15. from dwd_order_detail
  16. group by date_format(create_time,'yyyy-MM-dd'),sku_id
  17. ),
  18. tmp_pay as
  19. (
  20. select
  21. date_format(callback_time,'yyyy-MM-dd') dt,
  22. sku_id,
  23. count(*) payment_count,
  24. sum(sku_num) payment_num,
  25. sum(split_final_amount) payment_amount
  26. from dwd_order_detail od
  27. join
  28. (
  29. select
  30. order_id,
  31. callback_time
  32. from dwd_payment_info
  33. where callback_time is not null
  34. )pi on pi.order_id=od.order_id
  35. group by date_format(callback_time,'yyyy-MM-dd'),sku_id
  36. ),
  37. tmp_ri as
  38. (
  39. select
  40. date_format(create_time,'yyyy-MM-dd') dt,
  41. sku_id,
  42. count(*) refund_order_count,
  43. sum(refund_num) refund_order_num,
  44. sum(refund_amount) refund_order_amount
  45. from dwd_order_refund_info
  46. group by date_format(create_time,'yyyy-MM-dd'),sku_id
  47. ),
  48. tmp_rp as
  49. (
  50. select
  51. date_format(callback_time,'yyyy-MM-dd') dt,
  52. rp.sku_id,
  53. count(*) refund_payment_count,
  54. sum(ri.refund_num) refund_payment_num,
  55. sum(refund_amount) refund_payment_amount
  56. from
  57. (
  58. select
  59. order_id,
  60. sku_id,
  61. refund_amount,
  62. callback_time
  63. from dwd_refund_payment
  64. )rp
  65. left join
  66. (
  67. select
  68. order_id,
  69. sku_id,
  70. refund_num
  71. from dwd_order_refund_info
  72. )ri
  73. on rp.order_id=ri.order_id
  74. and rp.sku_id=ri.sku_id
  75. group by date_format(callback_time,'yyyy-MM-dd'),rp.sku_id
  76. ),
  77. tmp_cf as
  78. (
  79. select
  80. dt,
  81. item sku_id,
  82. sum(if(action_id='cart_add',1,0)) cart_count,
  83. sum(if(action_id='favor_add',1,0)) favor_count
  84. from dwd_action_log
  85. where action_id in ('cart_add','favor_add')
  86. group by dt,item
  87. ),
  88. tmp_comment as
  89. (
  90. select
  91. date_format(create_time,'yyyy-MM-dd') dt,
  92. sku_id,
  93. sum(if(appraise='1201',1,0)) appraise_good_count,
  94. sum(if(appraise='1202',1,0)) appraise_mid_count,
  95. sum(if(appraise='1203',1,0)) appraise_bad_count,
  96. sum(if(appraise='1204',1,0)) appraise_default_count
  97. from dwd_comment_info
  98. group by date_format(create_time,'yyyy-MM-dd'),sku_id
  99. )
  100. insert overwrite table dws_sku_action_daycount partition(dt)
  101. select
  102. sku_id,
  103. sum(order_count),
  104. sum(order_num),
  105. sum(order_activity_count),
  106. sum(order_coupon_count),
  107. sum(order_activity_reduce_amount),
  108. sum(order_coupon_reduce_amount),
  109. sum(order_original_amount),
  110. sum(order_final_amount),
  111. sum(payment_count),
  112. sum(payment_num),
  113. sum(payment_amount),
  114. sum(refund_order_count),
  115. sum(refund_order_num),
  116. sum(refund_order_amount),
  117. sum(refund_payment_count),
  118. sum(refund_payment_num),
  119. sum(refund_payment_amount),
  120. sum(cart_count),
  121. sum(favor_count),
  122. sum(appraise_good_count),
  123. sum(appraise_mid_count),
  124. sum(appraise_bad_count),
  125. sum(appraise_default_count),
  126. dt
  127. from
  128. (
  129. select
  130. dt,
  131. sku_id,
  132. order_count,
  133. order_num,
  134. order_activity_count,
  135. order_coupon_count,
  136. order_activity_reduce_amount,
  137. order_coupon_reduce_amount,
  138. order_original_amount,
  139. order_final_amount,
  140. 0 payment_count,
  141. 0 payment_num,
  142. 0 payment_amount,
  143. 0 refund_order_count,
  144. 0 refund_order_num,
  145. 0 refund_order_amount,
  146. 0 refund_payment_count,
  147. 0 refund_payment_num,
  148. 0 refund_payment_amount,
  149. 0 cart_count,
  150. 0 favor_count,
  151. 0 appraise_good_count,
  152. 0 appraise_mid_count,
  153. 0 appraise_bad_count,
  154. 0 appraise_default_count
  155. from tmp_order
  156. union all
  157. select
  158. dt,
  159. sku_id,
  160. 0 order_count,
  161. 0 order_num,
  162. 0 order_activity_count,
  163. 0 order_coupon_count,
  164. 0 order_activity_reduce_amount,
  165. 0 order_coupon_reduce_amount,
  166. 0 order_original_amount,
  167. 0 order_final_amount,
  168. payment_count,
  169. payment_num,
  170. payment_amount,
  171. 0 refund_order_count,
  172. 0 refund_order_num,
  173. 0 refund_order_amount,
  174. 0 refund_payment_count,
  175. 0 refund_payment_num,
  176. 0 refund_payment_amount,
  177. 0 cart_count,
  178. 0 favor_count,
  179. 0 appraise_good_count,
  180. 0 appraise_mid_count,
  181. 0 appraise_bad_count,
  182. 0 appraise_default_count
  183. from tmp_pay
  184. union all
  185. select
  186. dt,
  187. sku_id,
  188. 0 order_count,
  189. 0 order_num,
  190. 0 order_activity_count,
  191. 0 order_coupon_count,
  192. 0 order_activity_reduce_amount,
  193. 0 order_coupon_reduce_amount,
  194. 0 order_original_amount,
  195. 0 order_final_amount,
  196. 0 payment_count,
  197. 0 payment_num,
  198. 0 payment_amount,
  199. refund_order_count,
  200. refund_order_num,
  201. refund_order_amount,
  202. 0 refund_payment_count,
  203. 0 refund_payment_num,
  204. 0 refund_payment_amount,
  205. 0 cart_count,
  206. 0 favor_count,
  207. 0 appraise_good_count,
  208. 0 appraise_mid_count,
  209. 0 appraise_bad_count,
  210. 0 appraise_default_count
  211. from tmp_ri
  212. union all
  213. select
  214. dt,
  215. sku_id,
  216. 0 order_count,
  217. 0 order_num,
  218. 0 order_activity_count,
  219. 0 order_coupon_count,
  220. 0 order_activity_reduce_amount,
  221. 0 order_coupon_reduce_amount,
  222. 0 order_original_amount,
  223. 0 order_final_amount,
  224. 0 payment_count,
  225. 0 payment_num,
  226. 0 payment_amount,
  227. 0 refund_order_count,
  228. 0 refund_order_num,
  229. 0 refund_order_amount,
  230. refund_payment_count,
  231. refund_payment_num,
  232. refund_payment_amount,
  233. 0 cart_count,
  234. 0 favor_count,
  235. 0 appraise_good_count,
  236. 0 appraise_mid_count,
  237. 0 appraise_bad_count,
  238. 0 appraise_default_count
  239. from tmp_rp
  240. union all
  241. select
  242. dt,
  243. sku_id,
  244. 0 order_count,
  245. 0 order_num,
  246. 0 order_activity_count,
  247. 0 order_coupon_count,
  248. 0 order_activity_reduce_amount,
  249. 0 order_coupon_reduce_amount,
  250. 0 order_original_amount,
  251. 0 order_final_amount,
  252. 0 payment_count,
  253. 0 payment_num,
  254. 0 payment_amount,
  255. 0 refund_order_count,
  256. 0 refund_order_num,
  257. 0 refund_order_amount,
  258. 0 refund_payment_count,
  259. 0 refund_payment_num,
  260. 0 refund_payment_amount,
  261. cart_count,
  262. favor_count,
  263. 0 appraise_good_count,
  264. 0 appraise_mid_count,
  265. 0 appraise_bad_count,
  266. 0 appraise_default_count
  267. from tmp_cf
  268. union all
  269. select
  270. dt,
  271. sku_id,
  272. 0 order_count,
  273. 0 order_num,
  274. 0 order_activity_count,
  275. 0 order_coupon_count,
  276. 0 order_activity_reduce_amount,
  277. 0 order_coupon_reduce_amount,
  278. 0 order_original_amount,
  279. 0 order_final_amount,
  280. 0 payment_count,
  281. 0 payment_num,
  282. 0 payment_amount,
  283. 0 refund_order_count,
  284. 0 refund_order_num,
  285. 0 refund_order_amount,
  286. 0 refund_payment_count,
  287. 0 refund_payment_num,
  288. 0 refund_payment_amount,
  289. 0 cart_count,
  290. 0 favor_count,
  291. appraise_good_count,
  292. appraise_mid_count,
  293. appraise_bad_count,
  294. appraise_default_count
  295. from tmp_comment
  296. )t1
  297. group by dt,sku_id;

每日装载

  1. with
  2. tmp_order as
  3. (
  4. select
  5. sku_id,
  6. count(*) order_count,
  7. sum(sku_num) order_num,
  8. sum(if(split_activity_amount>0,1,0)) order_activity_count,
  9. sum(if(split_coupon_amount>0,1,0)) order_coupon_count,
  10. sum(split_activity_amount) order_activity_reduce_amount,
  11. sum(split_coupon_amount) order_coupon_reduce_amount,
  12. sum(original_amount) order_original_amount,
  13. sum(split_final_amount) order_final_amount
  14. from dwd_order_detail
  15. where dt='2020-06-15'
  16. group by sku_id
  17. ),
  18. tmp_pay as
  19. (
  20. select
  21. sku_id,
  22. count(*) payment_count,
  23. sum(sku_num) payment_num,
  24. sum(split_final_amount) payment_amount
  25. from dwd_order_detail
  26. where (dt='2020-06-15'
  27. or dt=date_add('2020-06-15',-1))
  28. and order_id in
  29. (
  30. select order_id from dwd_payment_info where dt='2020-06-15'
  31. )
  32. group by sku_id
  33. ),
  34. tmp_ri as
  35. (
  36. select
  37. sku_id,
  38. count(*) refund_order_count,
  39. sum(refund_num) refund_order_num,
  40. sum(refund_amount) refund_order_amount
  41. from dwd_order_refund_info
  42. where dt='2020-06-15'
  43. group by sku_id
  44. ),
  45. tmp_rp as
  46. (
  47. select
  48. rp.sku_id,
  49. count(*) refund_payment_count,
  50. sum(ri.refund_num) refund_payment_num,
  51. sum(refund_amount) refund_payment_amount
  52. from
  53. (
  54. select
  55. order_id,
  56. sku_id,
  57. refund_amount
  58. from dwd_refund_payment
  59. where dt='2020-06-15'
  60. )rp
  61. left join
  62. (
  63. select
  64. order_id,
  65. sku_id,
  66. refund_num
  67. from dwd_order_refund_info
  68. where dt>=date_add('2020-06-15',-15)
  69. )ri
  70. on rp.order_id=ri.order_id
  71. and rp.sku_id=ri.sku_id
  72. group by rp.sku_id
  73. ),
  74. tmp_cf as
  75. (
  76. select
  77. item sku_id,
  78. sum(if(action_id='cart_add',1,0)) cart_count,
  79. sum(if(action_id='favor_add',1,0)) favor_count
  80. from dwd_action_log
  81. where dt='2020-06-15'
  82. and action_id in ('cart_add','favor_add')
  83. group by item
  84. ),
  85. tmp_comment as
  86. (
  87. select
  88. sku_id,
  89. sum(if(appraise='1201',1,0)) appraise_good_count,
  90. sum(if(appraise='1202',1,0)) appraise_mid_count,
  91. sum(if(appraise='1203',1,0)) appraise_bad_count,
  92. sum(if(appraise='1204',1,0)) appraise_default_count
  93. from dwd_comment_info
  94. where dt='2020-06-15'
  95. group by sku_id
  96. )
  97. insert overwrite table dws_sku_action_daycount partition(dt='2020-06-15')
  98. select
  99. sku_id,
  100. sum(order_count),
  101. sum(order_num),
  102. sum(order_activity_count),
  103. sum(order_coupon_count),
  104. sum(order_activity_reduce_amount),
  105. sum(order_coupon_reduce_amount),
  106. sum(order_original_amount),
  107. sum(order_final_amount),
  108. sum(payment_count),
  109. sum(payment_num),
  110. sum(payment_amount),
  111. sum(refund_order_count),
  112. sum(refund_order_num),
  113. sum(refund_order_amount),
  114. sum(refund_payment_count),
  115. sum(refund_payment_num),
  116. sum(refund_payment_amount),
  117. sum(cart_count),
  118. sum(favor_count),
  119. sum(appraise_good_count),
  120. sum(appraise_mid_count),
  121. sum(appraise_bad_count),
  122. sum(appraise_default_count)
  123. from
  124. (
  125. select
  126. sku_id,
  127. order_count,
  128. order_num,
  129. order_activity_count,
  130. order_coupon_count,
  131. order_activity_reduce_amount,
  132. order_coupon_reduce_amount,
  133. order_original_amount,
  134. order_final_amount,
  135. 0 payment_count,
  136. 0 payment_num,
  137. 0 payment_amount,
  138. 0 refund_order_count,
  139. 0 refund_order_num,
  140. 0 refund_order_amount,
  141. 0 refund_payment_count,
  142. 0 refund_payment_num,
  143. 0 refund_payment_amount,
  144. 0 cart_count,
  145. 0 favor_count,
  146. 0 appraise_good_count,
  147. 0 appraise_mid_count,
  148. 0 appraise_bad_count,
  149. 0 appraise_default_count
  150. from tmp_order
  151. union all
  152. select
  153. sku_id,
  154. 0 order_count,
  155. 0 order_num,
  156. 0 order_activity_count,
  157. 0 order_coupon_count,
  158. 0 order_activity_reduce_amount,
  159. 0 order_coupon_reduce_amount,
  160. 0 order_original_amount,
  161. 0 order_final_amount,
  162. payment_count,
  163. payment_num,
  164. payment_amount,
  165. 0 refund_order_count,
  166. 0 refund_order_num,
  167. 0 refund_order_amount,
  168. 0 refund_payment_count,
  169. 0 refund_payment_num,
  170. 0 refund_payment_amount,
  171. 0 cart_count,
  172. 0 favor_count,
  173. 0 appraise_good_count,
  174. 0 appraise_mid_count,
  175. 0 appraise_bad_count,
  176. 0 appraise_default_count
  177. from tmp_pay
  178. union all
  179. select
  180. sku_id,
  181. 0 order_count,
  182. 0 order_num,
  183. 0 order_activity_count,
  184. 0 order_coupon_count,
  185. 0 order_activity_reduce_amount,
  186. 0 order_coupon_reduce_amount,
  187. 0 order_original_amount,
  188. 0 order_final_amount,
  189. 0 payment_count,
  190. 0 payment_num,
  191. 0 payment_amount,
  192. refund_order_count,
  193. refund_order_num,
  194. refund_order_amount,
  195. 0 refund_payment_count,
  196. 0 refund_payment_num,
  197. 0 refund_payment_amount,
  198. 0 cart_count,
  199. 0 favor_count,
  200. 0 appraise_good_count,
  201. 0 appraise_mid_count,
  202. 0 appraise_bad_count,
  203. 0 appraise_default_count
  204. from tmp_ri
  205. union all
  206. select
  207. sku_id,
  208. 0 order_count,
  209. 0 order_num,
  210. 0 order_activity_count,
  211. 0 order_coupon_count,
  212. 0 order_activity_reduce_amount,
  213. 0 order_coupon_reduce_amount,
  214. 0 order_original_amount,
  215. 0 order_final_amount,
  216. 0 payment_count,
  217. 0 payment_num,
  218. 0 payment_amount,
  219. 0 refund_order_count,
  220. 0 refund_order_num,
  221. 0 refund_order_amount,
  222. refund_payment_count,
  223. refund_payment_num,
  224. refund_payment_amount,
  225. 0 cart_count,
  226. 0 favor_count,
  227. 0 appraise_good_count,
  228. 0 appraise_mid_count,
  229. 0 appraise_bad_count,
  230. 0 appraise_default_count
  231. from tmp_rp
  232. union all
  233. select
  234. sku_id,
  235. 0 order_count,
  236. 0 order_num,
  237. 0 order_activity_count,
  238. 0 order_coupon_count,
  239. 0 order_activity_reduce_amount,
  240. 0 order_coupon_reduce_amount,
  241. 0 order_original_amount,
  242. 0 order_final_amount,
  243. 0 payment_count,
  244. 0 payment_num,
  245. 0 payment_amount,
  246. 0 refund_order_count,
  247. 0 refund_order_num,
  248. 0 refund_order_amount,
  249. 0 refund_payment_count,
  250. 0 refund_payment_num,
  251. 0 refund_payment_amount,
  252. cart_count,
  253. favor_count,
  254. 0 appraise_good_count,
  255. 0 appraise_mid_count,
  256. 0 appraise_bad_count,
  257. 0 appraise_default_count
  258. from tmp_cf
  259. union all
  260. select
  261. sku_id,
  262. 0 order_count,
  263. 0 order_num,
  264. 0 order_activity_count,
  265. 0 order_coupon_count,
  266. 0 order_activity_reduce_amount,
  267. 0 order_coupon_reduce_amount,
  268. 0 order_original_amount,
  269. 0 order_final_amount,
  270. 0 payment_count,
  271. 0 payment_num,
  272. 0 payment_amount,
  273. 0 refund_order_count,
  274. 0 refund_order_num,
  275. 0 refund_order_amount,
  276. 0 refund_payment_count,
  277. 0 refund_payment_num,
  278. 0 refund_payment_amount,
  279. 0 cart_count,
  280. 0 favor_count,
  281. appraise_good_count,
  282. appraise_mid_count,
  283. appraise_bad_count,
  284. appraise_default_count
  285. from tmp_comment
  286. )t1
  287. group by sku_id;

C、查询加载结果

4. 优惠券主题

A、建表语句

  1. DROP TABLE IF EXISTS dws_coupon_info_daycount;
  2. CREATE EXTERNAL TABLE dws_coupon_info_daycount(
  3. `coupon_id` STRING COMMENT '优惠券ID',
  4. `get_count` BIGINT COMMENT '被领取次数',
  5. `order_count` BIGINT COMMENT '被使用(下单)次数',
  6. `order_reduce_amount` DECIMAL(16,2) COMMENT '用券下单优惠金额',
  7. `order_original_amount` DECIMAL(16,2) COMMENT '用券订单原价金额',
  8. `order_final_amount` DECIMAL(16,2) COMMENT '用券下单最终金额',
  9. `payment_count` BIGINT COMMENT '被使用(支付)次数',
  10. `payment_reduce_amount` DECIMAL(16,2) COMMENT '用券支付优惠金额',
  11. `payment_amount` DECIMAL(16,2) COMMENT '用券支付总金额',
  12. `expire_count` BIGINT COMMENT '过期次数'
  13. ) COMMENT '每日活动统计'
  14. PARTITIONED BY (`dt` STRING)
  15. STORED AS PARQUET
  16. LOCATION '/warehouse/gmall/dws/dws_coupon_info_daycount/'
  17. TBLPROPERTIES ("parquet.compression"="lzo");

B、数据装载

首日装载

  1. with
  2. tmp_cu as
  3. (
  4. select
  5. coalesce(coupon_get.dt,coupon_using.dt,coupon_used.dt,coupon_exprie.dt) dt,
  6. coalesce(coupon_get.coupon_id,coupon_using.coupon_id,coupon_used.coupon_id,coupon_exprie.coupon_id) coupon_id,
  7. nvl(get_count,0) get_count,
  8. nvl(order_count,0) order_count,
  9. nvl(payment_count,0) payment_count,
  10. nvl(expire_count,0) expire_count
  11. from
  12. (
  13. select
  14. date_format(get_time,'yyyy-MM-dd') dt,
  15. coupon_id,
  16. count(*) get_count
  17. from dwd_coupon_use
  18. group by date_format(get_time,'yyyy-MM-dd'),coupon_id
  19. )coupon_get
  20. full outer join
  21. (
  22. select
  23. date_format(using_time,'yyyy-MM-dd') dt,
  24. coupon_id,
  25. count(*) order_count
  26. from dwd_coupon_use
  27. where using_time is not null
  28. group by date_format(using_time,'yyyy-MM-dd'),coupon_id
  29. )coupon_using
  30. on coupon_get.dt=coupon_using.dt
  31. and coupon_get.coupon_id=coupon_using.coupon_id
  32. full outer join
  33. (
  34. select
  35. date_format(used_time,'yyyy-MM-dd') dt,
  36. coupon_id,
  37. count(*) payment_count
  38. from dwd_coupon_use
  39. where used_time is not null
  40. group by date_format(used_time,'yyyy-MM-dd'),coupon_id
  41. )coupon_used
  42. on nvl(coupon_get.dt,coupon_using.dt)=coupon_used.dt
  43. and nvl(coupon_get.coupon_id,coupon_using.coupon_id)=coupon_used.coupon_id
  44. full outer join
  45. (
  46. select
  47. date_format(expire_time,'yyyy-MM-dd') dt,
  48. coupon_id,
  49. count(*) expire_count
  50. from dwd_coupon_use
  51. where expire_time is not null
  52. group by date_format(expire_time,'yyyy-MM-dd'),coupon_id
  53. )coupon_exprie
  54. on coalesce(coupon_get.dt,coupon_using.dt,coupon_used.dt)=coupon_exprie.dt
  55. and coalesce(coupon_get.coupon_id,coupon_using.coupon_id,coupon_used.coupon_id)=coupon_exprie.coupon_id
  56. ),
  57. tmp_order as
  58. (
  59. select
  60. date_format(create_time,'yyyy-MM-dd') dt,
  61. coupon_id,
  62. sum(split_coupon_amount) order_reduce_amount,
  63. sum(original_amount) order_original_amount,
  64. sum(split_final_amount) order_final_amount
  65. from dwd_order_detail
  66. where coupon_id is not null
  67. group by date_format(create_time,'yyyy-MM-dd'),coupon_id
  68. ),
  69. tmp_pay as
  70. (
  71. select
  72. date_format(callback_time,'yyyy-MM-dd') dt,
  73. coupon_id,
  74. sum(split_coupon_amount) payment_reduce_amount,
  75. sum(split_final_amount) payment_amount
  76. from
  77. (
  78. select
  79. order_id,
  80. coupon_id,
  81. split_coupon_amount,
  82. split_final_amount
  83. from dwd_order_detail
  84. where coupon_id is not null
  85. )od
  86. join
  87. (
  88. select
  89. order_id,
  90. callback_time
  91. from dwd_payment_info
  92. )pi
  93. on od.order_id=pi.order_id
  94. group by date_format(callback_time,'yyyy-MM-dd'),coupon_id
  95. )
  96. insert overwrite table dws_coupon_info_daycount partition(dt)
  97. select
  98. coupon_id,
  99. sum(get_count),
  100. sum(order_count),
  101. sum(order_reduce_amount),
  102. sum(order_original_amount),
  103. sum(order_final_amount),
  104. sum(payment_count),
  105. sum(payment_reduce_amount),
  106. sum(payment_amount),
  107. sum(expire_count),
  108. dt
  109. from
  110. (
  111. select
  112. dt,
  113. coupon_id,
  114. get_count,
  115. order_count,
  116. 0 order_reduce_amount,
  117. 0 order_original_amount,
  118. 0 order_final_amount,
  119. payment_count,
  120. 0 payment_reduce_amount,
  121. 0 payment_amount,
  122. expire_count
  123. from tmp_cu
  124. union all
  125. select
  126. dt,
  127. coupon_id,
  128. 0 get_count,
  129. 0 order_count,
  130. order_reduce_amount,
  131. order_original_amount,
  132. order_final_amount,
  133. 0 payment_count,
  134. 0 payment_reduce_amount,
  135. 0 payment_amount,
  136. 0 expire_count
  137. from tmp_order
  138. union all
  139. select
  140. dt,
  141. coupon_id,
  142. 0 get_count,
  143. 0 order_count,
  144. 0 order_reduce_amount,
  145. 0 order_original_amount,
  146. 0 order_final_amount,
  147. 0 payment_count,
  148. payment_reduce_amount,
  149. payment_amount,
  150. 0 expire_count
  151. from tmp_pay
  152. )t1
  153. group by dt,coupon_id;

每日装载

  1. with
  2. tmp_cu as
  3. (
  4. select
  5. coupon_id,
  6. sum(if(date_format(get_time,'yyyy-MM-dd')='2020-06-15',1,0)) get_count,
  7. sum(if(date_format(using_time,'yyyy-MM-dd')='2020-06-15',1,0)) order_count,
  8. sum(if(date_format(used_time,'yyyy-MM-dd')='2020-06-15',1,0)) payment_count,
  9. sum(if(date_format(expire_time,'yyyy-MM-dd')='2020-06-15',1,0)) expire_count
  10. from dwd_coupon_use
  11. where dt='9999-99-99'
  12. or dt='2020-06-15'
  13. group by coupon_id
  14. ),
  15. tmp_order as
  16. (
  17. select
  18. coupon_id,
  19. sum(split_coupon_amount) order_reduce_amount,
  20. sum(original_amount) order_original_amount,
  21. sum(split_final_amount) order_final_amount
  22. from dwd_order_detail
  23. where dt='2020-06-15'
  24. and coupon_id is not null
  25. group by coupon_id
  26. ),
  27. tmp_pay as
  28. (
  29. select
  30. coupon_id,
  31. sum(split_coupon_amount) payment_reduce_amount,
  32. sum(split_final_amount) payment_amount
  33. from dwd_order_detail
  34. where (dt='2020-06-15'
  35. or dt=date_add('2020-06-15',-1))
  36. and coupon_id is not null
  37. and order_id in
  38. (
  39. select order_id from dwd_payment_info where dt='2020-06-15'
  40. )
  41. group by coupon_id
  42. )
  43. insert overwrite table dws_coupon_info_daycount partition(dt='2020-06-15')
  44. select
  45. coupon_id,
  46. sum(get_count),
  47. sum(order_count),
  48. sum(order_reduce_amount),
  49. sum(order_original_amount),
  50. sum(order_final_amount),
  51. sum(payment_count),
  52. sum(payment_reduce_amount),
  53. sum(payment_amount),
  54. sum(expire_count)
  55. from
  56. (
  57. select
  58. coupon_id,
  59. get_count,
  60. order_count,
  61. 0 order_reduce_amount,
  62. 0 order_original_amount,
  63. 0 order_final_amount,
  64. payment_count,
  65. 0 payment_reduce_amount,
  66. 0 payment_amount,
  67. expire_count
  68. from tmp_cu
  69. union all
  70. select
  71. coupon_id,
  72. 0 get_count,
  73. 0 order_count,
  74. order_reduce_amount,
  75. order_original_amount,
  76. order_final_amount,
  77. 0 payment_count,
  78. 0 payment_reduce_amount,
  79. 0 payment_amount,
  80. 0 expire_count
  81. from tmp_order
  82. union all
  83. select
  84. coupon_id,
  85. 0 get_count,
  86. 0 order_count,
  87. 0 order_reduce_amount,
  88. 0 order_original_amount,
  89. 0 order_final_amount,
  90. 0 payment_count,
  91. payment_reduce_amount,
  92. payment_amount,
  93. 0 expire_count
  94. from tmp_pay
  95. )t1
  96. group by coupon_id;

C、查询加载结果

5. 活动主题

A、建表语句

  1. DROP TABLE IF EXISTS dws_activity_info_daycount;
  2. CREATE EXTERNAL TABLE dws_activity_info_daycount(
  3. `activity_rule_id` STRING COMMENT '活动规则ID',
  4. `activity_id` STRING COMMENT '活动ID',
  5. `order_count` BIGINT COMMENT '参与某活动某规则下单次数', `order_reduce_amount` DECIMAL(16,2) COMMENT '参与某活动某规则下单减免金额',
  6. `order_original_amount` DECIMAL(16,2) COMMENT '参与某活动某规则下单原始金额',
  7. `order_final_amount` DECIMAL(16,2) COMMENT '参与某活动某规则下单最终金额',
  8. `payment_count` BIGINT COMMENT '参与某活动某规则支付次数',
  9. `payment_reduce_amount` DECIMAL(16,2) COMMENT '参与某活动某规则支付减免金额',
  10. `payment_amount` DECIMAL(16,2) COMMENT '参与某活动某规则支付金额'
  11. ) COMMENT '每日活动统计'
  12. PARTITIONED BY (`dt` STRING)
  13. STORED AS PARQUET
  14. LOCATION '/warehouse/gmall/dws/dws_activity_info_daycount/'
  15. TBLPROPERTIES ("parquet.compression"="lzo");

B、数据装载

首日装载

  1. with
  2. tmp_order as
  3. (
  4. select
  5. date_format(create_time,'yyyy-MM-dd') dt,
  6. activity_rule_id,
  7. activity_id,
  8. count(*) order_count,
  9. sum(split_activity_amount) order_reduce_amount,
  10. sum(original_amount) order_original_amount,
  11. sum(split_final_amount) order_final_amount
  12. from dwd_order_detail
  13. where activity_id is not null
  14. group by date_format(create_time,'yyyy-MM-dd'),activity_rule_id,activity_id
  15. ),
  16. tmp_pay as
  17. (
  18. select
  19. date_format(callback_time,'yyyy-MM-dd') dt,
  20. activity_rule_id,
  21. activity_id,
  22. count(*) payment_count,
  23. sum(split_activity_amount) payment_reduce_amount,
  24. sum(split_final_amount) payment_amount
  25. from
  26. (
  27. select
  28. activity_rule_id,
  29. activity_id,
  30. order_id,
  31. split_activity_amount,
  32. split_final_amount
  33. from dwd_order_detail
  34. where activity_id is not null
  35. )od
  36. join
  37. (
  38. select
  39. order_id,
  40. callback_time
  41. from dwd_payment_info
  42. )pi
  43. on od.order_id=pi.order_id
  44. group by date_format(callback_time,'yyyy-MM-dd'),activity_rule_id,activity_id
  45. )
  46. insert overwrite table dws_activity_info_daycount partition(dt)
  47. select
  48. activity_rule_id,
  49. activity_id,
  50. sum(order_count),
  51. sum(order_reduce_amount),
  52. sum(order_original_amount),
  53. sum(order_final_amount),
  54. sum(payment_count),
  55. sum(payment_reduce_amount),
  56. sum(payment_amount),
  57. dt
  58. from
  59. (
  60. select
  61. dt,
  62. activity_rule_id,
  63. activity_id,
  64. order_count,
  65. order_reduce_amount,
  66. order_original_amount,
  67. order_final_amount,
  68. 0 payment_count,
  69. 0 payment_reduce_amount,
  70. 0 payment_amount
  71. from tmp_order
  72. union all
  73. select
  74. dt,
  75. activity_rule_id,
  76. activity_id,
  77. 0 order_count,
  78. 0 order_reduce_amount,
  79. 0 order_original_amount,
  80. 0 order_final_amount,
  81. payment_count,
  82. payment_reduce_amount,
  83. payment_amount
  84. from tmp_pay
  85. )t1
  86. group by dt,activity_rule_id,activity_id;

每日装载

  1. with
  2. tmp_order as
  3. (
  4. select
  5. activity_rule_id,
  6. activity_id,
  7. count(*) order_count,
  8. sum(split_activity_amount) order_reduce_amount,
  9. sum(original_amount) order_original_amount,
  10. sum(split_final_amount) order_final_amount
  11. from dwd_order_detail
  12. where dt='2020-06-15'
  13. and activity_id is not null
  14. group by activity_rule_id,activity_id
  15. ),
  16. tmp_pay as
  17. (
  18. select
  19. activity_rule_id,
  20. activity_id,
  21. count(*) payment_count,
  22. sum(split_activity_amount) payment_reduce_amount,
  23. sum(split_final_amount) payment_amount
  24. from dwd_order_detail
  25. where (dt='2020-06-15'
  26. or dt=date_add('2020-06-15',-1))
  27. and activity_id is not null
  28. and order_id in
  29. (
  30. select order_id from dwd_payment_info where dt='2020-06-15'
  31. )
  32. group by activity_rule_id,activity_id
  33. )
  34. insert overwrite table dws_activity_info_daycount partition(dt='2020-06-15')
  35. select
  36. activity_rule_id,
  37. activity_id,
  38. sum(order_count),
  39. sum(order_reduce_amount),
  40. sum(order_original_amount),
  41. sum(order_final_amount),
  42. sum(payment_count),
  43. sum(payment_reduce_amount),
  44. sum(payment_amount)
  45. from
  46. (
  47. select
  48. activity_rule_id,
  49. activity_id,
  50. order_count,
  51. order_reduce_amount,
  52. order_original_amount,
  53. order_final_amount,
  54. 0 payment_count,
  55. 0 payment_reduce_amount,
  56. 0 payment_amount
  57. from tmp_order
  58. union all
  59. select
  60. activity_rule_id,
  61. activity_id,
  62. 0 order_count,
  63. 0 order_reduce_amount,
  64. 0 order_original_amount,
  65. 0 order_final_amount,
  66. payment_count,
  67. payment_reduce_amount,
  68. payment_amount
  69. from tmp_pay
  70. )t1
  71. group by activity_rule_id,activity_id;

C、查询加载结果

6. 地区主题

A、建表语句

  1. DROP TABLE IF EXISTS dws_area_stats_daycount;
  2. CREATE EXTERNAL TABLE dws_area_stats_daycount(
  3. `province_id` STRING COMMENT '地区编号',
  4. `visit_count` BIGINT COMMENT '访问次数',
  5. `login_count` BIGINT COMMENT '登录次数',
  6. `visitor_count` BIGINT COMMENT '访客人数',
  7. `user_count` BIGINT COMMENT '用户人数',
  8. `order_count` BIGINT COMMENT '下单次数',
  9. `order_original_amount` DECIMAL(16,2) COMMENT '下单原始金额',
  10. `order_final_amount` DECIMAL(16,2) COMMENT '下单最终金额',
  11. `payment_count` BIGINT COMMENT '支付次数',
  12. `payment_amount` DECIMAL(16,2) COMMENT '支付金额',
  13. `refund_order_count` BIGINT COMMENT '退单次数',
  14. `refund_order_amount` DECIMAL(16,2) COMMENT '退单金额',
  15. `refund_payment_count` BIGINT COMMENT '退款次数',
  16. `refund_payment_amount` DECIMAL(16,2) COMMENT '退款金额'
  17. ) COMMENT '每日地区统计表'
  18. PARTITIONED BY (`dt` STRING)
  19. STORED AS PARQUET
  20. LOCATION '/warehouse/gmall/dws/dws_area_stats_daycount/'
  21. TBLPROPERTIES ("parquet.compression"="lzo");

B、数据装载

首日装载

  1. with
  2. tmp_vu as
  3. (
  4. select
  5. dt,
  6. id province_id,
  7. visit_count,
  8. login_count,
  9. visitor_count,
  10. user_count
  11. from
  12. (
  13. select
  14. dt,
  15. area_code,
  16. count(*) visit_count,--访客访问次数
  17. count(user_id) login_count,--用户访问次数,等价于sum(if(user_id is not null,1,0))
  18. count(distinct(mid_id)) visitor_count,--访客人数
  19. count(distinct(user_id)) user_count--用户人数
  20. from dwd_page_log
  21. where last_page_id is null
  22. group by dt,area_code
  23. )tmp
  24. left join dim_base_province area
  25. on tmp.area_code=area.area_code
  26. ),
  27. tmp_order as
  28. (
  29. select
  30. date_format(create_time,'yyyy-MM-dd') dt,
  31. province_id,
  32. count(*) order_count,
  33. sum(original_amount) order_original_amount,
  34. sum(final_amount) order_final_amount
  35. from dwd_order_info
  36. group by date_format(create_time,'yyyy-MM-dd'),province_id
  37. ),
  38. tmp_pay as
  39. (
  40. select
  41. date_format(callback_time,'yyyy-MM-dd') dt,
  42. province_id,
  43. count(*) payment_count,
  44. sum(payment_amount) payment_amount
  45. from dwd_payment_info
  46. group by date_format(callback_time,'yyyy-MM-dd'),province_id
  47. ),
  48. tmp_ro as
  49. (
  50. select
  51. date_format(create_time,'yyyy-MM-dd') dt,
  52. province_id,
  53. count(*) refund_order_count,
  54. sum(refund_amount) refund_order_amount
  55. from dwd_order_refund_info
  56. group by date_format(create_time,'yyyy-MM-dd'),province_id
  57. ),
  58. tmp_rp as
  59. (
  60. select
  61. date_format(callback_time,'yyyy-MM-dd') dt,
  62. province_id,
  63. count(*) refund_payment_count,
  64. sum(refund_amount) refund_payment_amount
  65. from dwd_refund_payment
  66. group by date_format(callback_time,'yyyy-MM-dd'),province_id
  67. )
  68. insert overwrite table dws_area_stats_daycount partition(dt)
  69. select
  70. province_id,
  71. sum(visit_count),
  72. sum(login_count),
  73. sum(visitor_count),
  74. sum(user_count),
  75. sum(order_count),
  76. sum(order_original_amount),
  77. sum(order_final_amount),
  78. sum(payment_count),
  79. sum(payment_amount),
  80. sum(refund_order_count),
  81. sum(refund_order_amount),
  82. sum(refund_payment_count),
  83. sum(refund_payment_amount),
  84. dt
  85. from
  86. (
  87. select
  88. dt,
  89. province_id,
  90. visit_count,
  91. login_count,
  92. visitor_count,
  93. user_count,
  94. 0 order_count,
  95. 0 order_original_amount,
  96. 0 order_final_amount,
  97. 0 payment_count,
  98. 0 payment_amount,
  99. 0 refund_order_count,
  100. 0 refund_order_amount,
  101. 0 refund_payment_count,
  102. 0 refund_payment_amount
  103. from tmp_vu
  104. union all
  105. select
  106. dt,
  107. province_id,
  108. 0 visit_count,
  109. 0 login_count,
  110. 0 visitor_count,
  111. 0 user_count,
  112. order_count,
  113. order_original_amount,
  114. order_final_amount,
  115. 0 payment_count,
  116. 0 payment_amount,
  117. 0 refund_order_count,
  118. 0 refund_order_amount,
  119. 0 refund_payment_count,
  120. 0 refund_payment_amount
  121. from tmp_order
  122. union all
  123. select
  124. dt,
  125. province_id,
  126. 0 visit_count,
  127. 0 login_count,
  128. 0 visitor_count,
  129. 0 user_count,
  130. 0 order_count,
  131. 0 order_original_amount,
  132. 0 order_final_amount,
  133. payment_count,
  134. payment_amount,
  135. 0 refund_order_count,
  136. 0 refund_order_amount,
  137. 0 refund_payment_count,
  138. 0 refund_payment_amount
  139. from tmp_pay
  140. union all
  141. select
  142. dt,
  143. province_id,
  144. 0 visit_count,
  145. 0 login_count,
  146. 0 visitor_count,
  147. 0 user_count,
  148. 0 order_count,
  149. 0 order_original_amount,
  150. 0 order_final_amount,
  151. 0 payment_count,
  152. 0 payment_amount,
  153. refund_order_count,
  154. refund_order_amount,
  155. 0 refund_payment_count,
  156. 0 refund_payment_amount
  157. from tmp_ro
  158. union all
  159. select
  160. dt,
  161. province_id,
  162. 0 visit_count,
  163. 0 login_count,
  164. 0 visitor_count,
  165. 0 user_count,
  166. 0 order_count,
  167. 0 order_original_amount,
  168. 0 order_final_amount,
  169. 0 payment_count,
  170. 0 payment_amount,
  171. 0 refund_order_count,
  172. 0 refund_order_amount,
  173. refund_payment_count,
  174. refund_payment_amount
  175. from tmp_rp
  176. )t1
  177. group by dt,province_id;

每日装载

  1. with
  2. tmp_vu as
  3. (
  4. select
  5. id province_id,
  6. visit_count,
  7. login_count,
  8. visitor_count,
  9. user_count
  10. from
  11. (
  12. select
  13. area_code,
  14. count(*) visit_count,--访客访问次数
  15. count(user_id) login_count,--用户访问次数,等价于sum(if(user_id is not null,1,0))
  16. count(distinct(mid_id)) visitor_count,--访客人数
  17. count(distinct(user_id)) user_count--用户人数
  18. from dwd_page_log
  19. where dt='2020-06-15'
  20. and last_page_id is null
  21. group by area_code
  22. )tmp
  23. left join dim_base_province area
  24. on tmp.area_code=area.area_code
  25. ),
  26. tmp_order as
  27. (
  28. select
  29. province_id,
  30. count(*) order_count,
  31. sum(original_amount) order_original_amount,
  32. sum(final_amount) order_final_amount
  33. from dwd_order_info
  34. where dt='2020-06-15'
  35. or dt='9999-99-99'
  36. and date_format(create_time,'yyyy-MM-dd')='2020-06-15'
  37. group by province_id
  38. ),
  39. tmp_pay as
  40. (
  41. select
  42. province_id,
  43. count(*) payment_count,
  44. sum(payment_amount) payment_amount
  45. from dwd_payment_info
  46. where dt='2020-06-15'
  47. group by province_id
  48. ),
  49. tmp_ro as
  50. (
  51. select
  52. province_id,
  53. count(*) refund_order_count,
  54. sum(refund_amount) refund_order_amount
  55. from dwd_order_refund_info
  56. where dt='2020-06-15'
  57. group by province_id
  58. ),
  59. tmp_rp as
  60. (
  61. select
  62. province_id,
  63. count(*) refund_payment_count,
  64. sum(refund_amount) refund_payment_amount
  65. from dwd_refund_payment
  66. where dt='2020-06-15'
  67. group by province_id
  68. )
  69. insert overwrite table dws_area_stats_daycount partition(dt='2020-06-15')
  70. select
  71. province_id,
  72. sum(visit_count),
  73. sum(login_count),
  74. sum(visitor_count),
  75. sum(user_count),
  76. sum(order_count),
  77. sum(order_original_amount),
  78. sum(order_final_amount),
  79. sum(payment_count),
  80. sum(payment_amount),
  81. sum(refund_order_count),
  82. sum(refund_order_amount),
  83. sum(refund_payment_count),
  84. sum(refund_payment_amount)
  85. from
  86. (
  87. select
  88. province_id,
  89. visit_count,
  90. login_count,
  91. visitor_count,
  92. user_count,
  93. 0 order_count,
  94. 0 order_original_amount,
  95. 0 order_final_amount,
  96. 0 payment_count,
  97. 0 payment_amount,
  98. 0 refund_order_count,
  99. 0 refund_order_amount,
  100. 0 refund_payment_count,
  101. 0 refund_payment_amount
  102. from tmp_vu
  103. union all
  104. select
  105. province_id,
  106. 0 visit_count,
  107. 0 login_count,
  108. 0 visitor_count,
  109. 0 user_count,
  110. order_count,
  111. order_original_amount,
  112. order_final_amount,
  113. 0 payment_count,
  114. 0 payment_amount,
  115. 0 refund_order_count,
  116. 0 refund_order_amount,
  117. 0 refund_payment_count,
  118. 0 refund_payment_amount
  119. from tmp_order
  120. union all
  121. select
  122. province_id,
  123. 0 visit_count,
  124. 0 login_count,
  125. 0 visitor_count,
  126. 0 user_count,
  127. 0 order_count,
  128. 0 order_original_amount,
  129. 0 order_final_amount,
  130. payment_count,
  131. payment_amount,
  132. 0 refund_order_count,
  133. 0 refund_order_amount,
  134. 0 refund_payment_count,
  135. 0 refund_payment_amount
  136. from tmp_pay
  137. union all
  138. select
  139. province_id,
  140. 0 visit_count,
  141. 0 login_count,
  142. 0 visitor_count,
  143. 0 user_count,
  144. 0 order_count,
  145. 0 order_original_amount,
  146. 0 order_final_amount,
  147. 0 payment_count,
  148. 0 payment_amount,
  149. refund_order_count,
  150. refund_order_amount,
  151. 0 refund_payment_count,
  152. 0 refund_payment_amount
  153. from tmp_ro
  154. union all
  155. select
  156. province_id,
  157. 0 visit_count,
  158. 0 login_count,
  159. 0 visitor_count,
  160. 0 user_count,
  161. 0 order_count,
  162. 0 order_original_amount,
  163. 0 order_final_amount,
  164. 0 payment_count,
  165. 0 payment_amount,
  166. 0 refund_order_count,
  167. 0 refund_order_amount,
  168. refund_payment_count,
  169. refund_payment_amount
  170. from tmp_rp
  171. )t1
  172. group by province_id;

C、查询加载结果

7. DWS 层首日数据装载脚本

A、编写脚本

在 /home/fancy/bin 目录下创建脚本 dwd_to_dws_init.sh

  1. #!/bin/bash
  2. APP=gmall
  3. if [ -n "$2" ] ;then
  4. do_date=$2
  5. else
  6. echo "请传入日期参数"
  7. exit
  8. fi
  9. dws_visitor_action_daycount="
  10. insert overwrite table ${APP}.dws_visitor_action_daycount partition(dt='$do_date')
  11. select
  12. t1.mid_id,
  13. t1.brand,
  14. t1.model,
  15. t1.is_new,
  16. t1.channel,
  17. t1.os,
  18. t1.area_code,
  19. t1.version_code,
  20. t1.visit_count,
  21. t3.page_stats
  22. from
  23. (
  24. select
  25. mid_id,
  26. brand,
  27. model,
  28. if(array_contains(collect_set(is_new),'0'),'0','1') is_new,--ods_page_log中,同一天内,同一设备的is_new字段,可能全部为1,可能全部为0,也可能部分为0,部分为1(卸载重装),故做该处理
  29. collect_set(channel) channel,
  30. collect_set(os) os,
  31. collect_set(area_code) area_code,
  32. collect_set(version_code) version_code,
  33. sum(if(last_page_id is null,1,0)) visit_count
  34. from ${APP}.dwd_page_log
  35. where dt='$do_date'
  36. and last_page_id is null
  37. group by mid_id,model,brand
  38. )t1
  39. join
  40. (
  41. select
  42. mid_id,
  43. brand,
  44. model,
  45. collect_set(named_struct('page_id',page_id,'page_count',page_count,'during_time',during_time)) page_stats
  46. from
  47. (
  48. select
  49. mid_id,
  50. brand,
  51. model,
  52. page_id,
  53. count(*) page_count,
  54. sum(during_time) during_time
  55. from ${APP}.dwd_page_log
  56. where dt='$do_date'
  57. group by mid_id,model,brand,page_id
  58. )t2
  59. group by mid_id,model,brand
  60. )t3
  61. on t1.mid_id=t3.mid_id
  62. and t1.brand=t3.brand
  63. and t1.model=t3.model;
  64. "
  65. dws_area_stats_daycount="
  66. set hive.exec.dynamic.partition.mode=nonstrict;
  67. with
  68. tmp_vu as
  69. (
  70. select
  71. dt,
  72. id province_id,
  73. visit_count,
  74. login_count,
  75. visitor_count,
  76. user_count
  77. from
  78. (
  79. select
  80. dt,
  81. area_code,
  82. count(*) visit_count,--访客访问次数
  83. count(user_id) login_count,--用户访问次数,等价于sum(if(user_id is not null,1,0))
  84. count(distinct(mid_id)) visitor_count,--访客人数
  85. count(distinct(user_id)) user_count--用户人数
  86. from ${APP}.dwd_page_log
  87. where last_page_id is null
  88. group by dt,area_code
  89. )tmp
  90. left join ${APP}.dim_base_province area
  91. on tmp.area_code=area.area_code
  92. ),
  93. tmp_order as
  94. (
  95. select
  96. date_format(create_time,'yyyy-MM-dd') dt,
  97. province_id,
  98. count(*) order_count,
  99. sum(original_amount) order_original_amount,
  100. sum(final_amount) order_final_amount
  101. from ${APP}.dwd_order_info
  102. group by date_format(create_time,'yyyy-MM-dd'),province_id
  103. ),
  104. tmp_pay as
  105. (
  106. select
  107. date_format(callback_time,'yyyy-MM-dd') dt,
  108. province_id,
  109. count(*) payment_count,
  110. sum(payment_amount) payment_amount
  111. from ${APP}.dwd_payment_info
  112. group by date_format(callback_time,'yyyy-MM-dd'),province_id
  113. ),
  114. tmp_ro as
  115. (
  116. select
  117. date_format(create_time,'yyyy-MM-dd') dt,
  118. province_id,
  119. count(*) refund_order_count,
  120. sum(refund_amount) refund_order_amount
  121. from ${APP}.dwd_order_refund_info
  122. group by date_format(create_time,'yyyy-MM-dd'),province_id
  123. ),
  124. tmp_rp as
  125. (
  126. select
  127. date_format(callback_time,'yyyy-MM-dd') dt,
  128. province_id,
  129. count(*) refund_payment_count,
  130. sum(refund_amount) refund_payment_amount
  131. from ${APP}.dwd_refund_payment
  132. group by date_format(callback_time,'yyyy-MM-dd'),province_id
  133. )
  134. insert overwrite table ${APP}.dws_area_stats_daycount partition(dt)
  135. select
  136. province_id,
  137. sum(visit_count),
  138. sum(login_count),
  139. sum(visitor_count),
  140. sum(user_count),
  141. sum(order_count),
  142. sum(order_original_amount),
  143. sum(order_final_amount),
  144. sum(payment_count),
  145. sum(payment_amount),
  146. sum(refund_order_count),
  147. sum(refund_order_amount),
  148. sum(refund_payment_count),
  149. sum(refund_payment_amount),
  150. dt
  151. from
  152. (
  153. select
  154. dt,
  155. province_id,
  156. visit_count,
  157. login_count,
  158. visitor_count,
  159. user_count,
  160. 0 order_count,
  161. 0 order_original_amount,
  162. 0 order_final_amount,
  163. 0 payment_count,
  164. 0 payment_amount,
  165. 0 refund_order_count,
  166. 0 refund_order_amount,
  167. 0 refund_payment_count,
  168. 0 refund_payment_amount
  169. from tmp_vu
  170. union all
  171. select
  172. dt,
  173. province_id,
  174. 0 visit_count,
  175. 0 login_count,
  176. 0 visitor_count,
  177. 0 user_count,
  178. order_count,
  179. order_original_amount,
  180. order_final_amount,
  181. 0 payment_count,
  182. 0 payment_amount,
  183. 0 refund_order_count,
  184. 0 refund_order_amount,
  185. 0 refund_payment_count,
  186. 0 refund_payment_amount
  187. from tmp_order
  188. union all
  189. select
  190. dt,
  191. province_id,
  192. 0 visit_count,
  193. 0 login_count,
  194. 0 visitor_count,
  195. 0 user_count,
  196. 0 order_count,
  197. 0 order_original_amount,
  198. 0 order_final_amount,
  199. payment_count,
  200. payment_amount,
  201. 0 refund_order_count,
  202. 0 refund_order_amount,
  203. 0 refund_payment_count,
  204. 0 refund_payment_amount
  205. from tmp_pay
  206. union all
  207. select
  208. dt,
  209. province_id,
  210. 0 visit_count,
  211. 0 login_count,
  212. 0 visitor_count,
  213. 0 user_count,
  214. 0 order_count,
  215. 0 order_original_amount,
  216. 0 order_final_amount,
  217. 0 payment_count,
  218. 0 payment_amount,
  219. refund_order_count,
  220. refund_order_amount,
  221. 0 refund_payment_count,
  222. 0 refund_payment_amount
  223. from tmp_ro
  224. union all
  225. select
  226. dt,
  227. province_id,
  228. 0 visit_count,
  229. 0 login_count,
  230. 0 visitor_count,
  231. 0 user_count,
  232. 0 order_count,
  233. 0 order_original_amount,
  234. 0 order_final_amount,
  235. 0 payment_count,
  236. 0 payment_amount,
  237. 0 refund_order_count,
  238. 0 refund_order_amount,
  239. refund_payment_count,
  240. refund_payment_amount
  241. from tmp_rp
  242. )t1
  243. group by dt,province_id;
  244. "
  245. dws_user_action_daycount="
  246. set hive.exec.dynamic.partition.mode=nonstrict;
  247. with
  248. tmp_login as
  249. (
  250. select
  251. dt,
  252. user_id,
  253. count(*) login_count
  254. from ${APP}.dwd_page_log
  255. where user_id is not null
  256. and last_page_id is null
  257. group by dt,user_id
  258. ),
  259. tmp_cf as
  260. (
  261. select
  262. dt,
  263. user_id,
  264. sum(if(action_id='cart_add',1,0)) cart_count,
  265. sum(if(action_id='favor_add',1,0)) favor_count
  266. from ${APP}.dwd_action_log
  267. where user_id is not null
  268. and action_id in ('cart_add','favor_add')
  269. group by dt,user_id
  270. ),
  271. tmp_order as
  272. (
  273. select
  274. date_format(create_time,'yyyy-MM-dd') dt,
  275. user_id,
  276. count(*) order_count,
  277. sum(if(activity_reduce_amount>0,1,0)) order_activity_count,
  278. sum(if(coupon_reduce_amount>0,1,0)) order_coupon_count,
  279. sum(activity_reduce_amount) order_activity_reduce_amount,
  280. sum(coupon_reduce_amount) order_coupon_reduce_amount,
  281. sum(original_amount) order_original_amount,
  282. sum(final_amount) order_final_amount
  283. from ${APP}.dwd_order_info
  284. group by date_format(create_time,'yyyy-MM-dd'),user_id
  285. ),
  286. tmp_pay as
  287. (
  288. select
  289. date_format(callback_time,'yyyy-MM-dd') dt,
  290. user_id,
  291. count(*) payment_count,
  292. sum(payment_amount) payment_amount
  293. from ${APP}.dwd_payment_info
  294. group by date_format(callback_time,'yyyy-MM-dd'),user_id
  295. ),
  296. tmp_ri as
  297. (
  298. select
  299. date_format(create_time,'yyyy-MM-dd') dt,
  300. user_id,
  301. count(*) refund_order_count,
  302. sum(refund_num) refund_order_num,
  303. sum(refund_amount) refund_order_amount
  304. from ${APP}.dwd_order_refund_info
  305. group by date_format(create_time,'yyyy-MM-dd'),user_id
  306. ),
  307. tmp_rp as
  308. (
  309. select
  310. date_format(callback_time,'yyyy-MM-dd') dt,
  311. rp.user_id,
  312. count(*) refund_payment_count,
  313. sum(ri.refund_num) refund_payment_num,
  314. sum(rp.refund_amount) refund_payment_amount
  315. from
  316. (
  317. select
  318. user_id,
  319. order_id,
  320. sku_id,
  321. refund_amount,
  322. callback_time
  323. from ${APP}.dwd_refund_payment
  324. )rp
  325. left join
  326. (
  327. select
  328. user_id,
  329. order_id,
  330. sku_id,
  331. refund_num
  332. from ${APP}.dwd_order_refund_info
  333. )ri
  334. on rp.order_id=ri.order_id
  335. and rp.sku_id=rp.sku_id
  336. group by date_format(callback_time,'yyyy-MM-dd'),rp.user_id
  337. ),
  338. tmp_coupon as
  339. (
  340. select
  341. coalesce(coupon_get.dt,coupon_using.dt,coupon_used.dt) dt,
  342. coalesce(coupon_get.user_id,coupon_using.user_id,coupon_used.user_id) user_id,
  343. nvl(coupon_get_count,0) coupon_get_count,
  344. nvl(coupon_using_count,0) coupon_using_count,
  345. nvl(coupon_used_count,0) coupon_used_count
  346. from
  347. (
  348. select
  349. date_format(get_time,'yyyy-MM-dd') dt,
  350. user_id,
  351. count(*) coupon_get_count
  352. from ${APP}.dwd_coupon_use
  353. where get_time is not null
  354. group by user_id,date_format(get_time,'yyyy-MM-dd')
  355. )coupon_get
  356. full outer join
  357. (
  358. select
  359. date_format(using_time,'yyyy-MM-dd') dt,
  360. user_id,
  361. count(*) coupon_using_count
  362. from ${APP}.dwd_coupon_use
  363. where using_time is not null
  364. group by user_id,date_format(using_time,'yyyy-MM-dd')
  365. )coupon_using
  366. on coupon_get.dt=coupon_using.dt
  367. and coupon_get.user_id=coupon_using.user_id
  368. full outer join
  369. (
  370. select
  371. date_format(used_time,'yyyy-MM-dd') dt,
  372. user_id,
  373. count(*) coupon_used_count
  374. from ${APP}.dwd_coupon_use
  375. where used_time is not null
  376. group by user_id,date_format(used_time,'yyyy-MM-dd')
  377. )coupon_used
  378. on nvl(coupon_get.dt,coupon_using.dt)=coupon_used.dt
  379. and nvl(coupon_get.user_id,coupon_using.user_id)=coupon_used.user_id
  380. ),
  381. tmp_comment as
  382. (
  383. select
  384. date_format(create_time,'yyyy-MM-dd') dt,
  385. user_id,
  386. sum(if(appraise='1201',1,0)) appraise_good_count,
  387. sum(if(appraise='1202',1,0)) appraise_mid_count,
  388. sum(if(appraise='1203',1,0)) appraise_bad_count,
  389. sum(if(appraise='1204',1,0)) appraise_default_count
  390. from ${APP}.dwd_comment_info
  391. group by date_format(create_time,'yyyy-MM-dd'),user_id
  392. ),
  393. tmp_od as
  394. (
  395. select
  396. dt,
  397. user_id,
  398. collect_set(named_struct('sku_id',sku_id,'sku_num',sku_num,'order_count',order_count,'activity_reduce_amount',activity_reduce_amount,'coupon_reduce_amount',coupon_reduce_amount,'original_amount',original_amount,'final_amount',final_amount)) order_detail_stats
  399. from
  400. (
  401. select
  402. date_format(create_time,'yyyy-MM-dd') dt,
  403. user_id,
  404. sku_id,
  405. sum(sku_num) sku_num,
  406. count(*) order_count,
  407. cast(sum(split_activity_amount) as decimal(16,2)) activity_reduce_amount,
  408. cast(sum(split_coupon_amount) as decimal(16,2)) coupon_reduce_amount,
  409. cast(sum(original_amount) as decimal(16,2)) original_amount,
  410. cast(sum(split_final_amount) as decimal(16,2)) final_amount
  411. from ${APP}.dwd_order_detail
  412. group by date_format(create_time,'yyyy-MM-dd'),user_id,sku_id
  413. )t1
  414. group by dt,user_id
  415. )
  416. insert overwrite table ${APP}.dws_user_action_daycount partition(dt)
  417. select
  418. coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id,tmp_comment.user_id,tmp_coupon.user_id,tmp_od.user_id),
  419. nvl(login_count,0),
  420. nvl(cart_count,0),
  421. nvl(favor_count,0),
  422. nvl(order_count,0),
  423. nvl(order_activity_count,0),
  424. nvl(order_activity_reduce_amount,0),
  425. nvl(order_coupon_count,0),
  426. nvl(order_coupon_reduce_amount,0),
  427. nvl(order_original_amount,0),
  428. nvl(order_final_amount,0),
  429. nvl(payment_count,0),
  430. nvl(payment_amount,0),
  431. nvl(refund_order_count,0),
  432. nvl(refund_order_num,0),
  433. nvl(refund_order_amount,0),
  434. nvl(refund_payment_count,0),
  435. nvl(refund_payment_num,0),
  436. nvl(refund_payment_amount,0),
  437. nvl(coupon_get_count,0),
  438. nvl(coupon_using_count,0),
  439. nvl(coupon_used_count,0),
  440. nvl(appraise_good_count,0),
  441. nvl(appraise_mid_count,0),
  442. nvl(appraise_bad_count,0),
  443. nvl(appraise_default_count,0),
  444. order_detail_stats,
  445. coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt,tmp_pay.dt,tmp_ri.dt,tmp_rp.dt,tmp_comment.dt,tmp_coupon.dt,tmp_od.dt)
  446. from tmp_login
  447. full outer join tmp_cf
  448. on tmp_login.user_id=tmp_cf.user_id
  449. and tmp_login.dt=tmp_cf.dt
  450. full outer join tmp_order
  451. on coalesce(tmp_login.user_id,tmp_cf.user_id)=tmp_order.user_id
  452. and coalesce(tmp_login.dt,tmp_cf.dt)=tmp_order.dt
  453. full outer join tmp_pay
  454. on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id)=tmp_pay.user_id
  455. and coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt)=tmp_pay.dt
  456. full outer join tmp_ri
  457. on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id)=tmp_ri.user_id
  458. and coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt,tmp_pay.dt)=tmp_ri.dt
  459. full outer join tmp_rp
  460. on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id)=tmp_rp.user_id
  461. and coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt,tmp_pay.dt,tmp_ri.dt)=tmp_rp.dt
  462. full outer join tmp_comment
  463. on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id)=tmp_comment.user_id
  464. and coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt,tmp_pay.dt,tmp_ri.dt,tmp_rp.dt)=tmp_comment.dt
  465. full outer join tmp_coupon
  466. on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id,tmp_comment.user_id)=tmp_coupon.user_id
  467. and coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt,tmp_pay.dt,tmp_ri.dt,tmp_rp.dt,tmp_comment.dt)=tmp_coupon.dt
  468. full outer join tmp_od
  469. on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id,tmp_comment.user_id,tmp_coupon.user_id)=tmp_od.user_id
  470. and coalesce(tmp_login.dt,tmp_cf.dt,tmp_order.dt,tmp_pay.dt,tmp_ri.dt,tmp_rp.dt,tmp_comment.dt,tmp_coupon.dt)=tmp_od.dt;
  471. "
  472. dws_activity_info_daycount="
  473. set hive.exec.dynamic.partition.mode=nonstrict;
  474. with
  475. tmp_order as
  476. (
  477. select
  478. date_format(create_time,'yyyy-MM-dd') dt,
  479. activity_rule_id,
  480. activity_id,
  481. count(*) order_count,
  482. sum(split_activity_amount) order_reduce_amount,
  483. sum(original_amount) order_original_amount,
  484. sum(split_final_amount) order_final_amount
  485. from ${APP}.dwd_order_detail
  486. where activity_id is not null
  487. group by date_format(create_time,'yyyy-MM-dd'),activity_rule_id,activity_id
  488. ),
  489. tmp_pay as
  490. (
  491. select
  492. date_format(callback_time,'yyyy-MM-dd') dt,
  493. activity_rule_id,
  494. activity_id,
  495. count(*) payment_count,
  496. sum(split_activity_amount) payment_reduce_amount,
  497. sum(split_final_amount) payment_amount
  498. from
  499. (
  500. select
  501. activity_rule_id,
  502. activity_id,
  503. order_id,
  504. split_activity_amount,
  505. split_final_amount
  506. from ${APP}.dwd_order_detail
  507. where activity_id is not null
  508. )od
  509. join
  510. (
  511. select
  512. order_id,
  513. callback_time
  514. from ${APP}.dwd_payment_info
  515. )pi
  516. on od.order_id=pi.order_id
  517. group by date_format(callback_time,'yyyy-MM-dd'),activity_rule_id,activity_id
  518. )
  519. insert overwrite table ${APP}.dws_activity_info_daycount partition(dt)
  520. select
  521. activity_rule_id,
  522. activity_id,
  523. sum(order_count),
  524. sum(order_reduce_amount),
  525. sum(order_original_amount),
  526. sum(order_final_amount),
  527. sum(payment_count),
  528. sum(payment_reduce_amount),
  529. sum(payment_amount),
  530. dt
  531. from
  532. (
  533. select
  534. dt,
  535. activity_rule_id,
  536. activity_id,
  537. order_count,
  538. order_reduce_amount,
  539. order_original_amount,
  540. order_final_amount,
  541. 0 payment_count,
  542. 0 payment_reduce_amount,
  543. 0 payment_amount
  544. from tmp_order
  545. union all
  546. select
  547. dt,
  548. activity_rule_id,
  549. activity_id,
  550. 0 order_count,
  551. 0 order_reduce_amount,
  552. 0 order_original_amount,
  553. 0 order_final_amount,
  554. payment_count,
  555. payment_reduce_amount,
  556. payment_amount
  557. from tmp_pay
  558. )t1
  559. group by dt,activity_rule_id,activity_id;"
  560. dws_sku_action_daycount="
  561. set hive.exec.dynamic.partition.mode=nonstrict;
  562. with
  563. tmp_order as
  564. (
  565. select
  566. date_format(create_time,'yyyy-MM-dd') dt,
  567. sku_id,
  568. count(*) order_count,
  569. sum(sku_num) order_num,
  570. sum(if(split_activity_amount>0,1,0)) order_activity_count,
  571. sum(if(split_coupon_amount>0,1,0)) order_coupon_count,
  572. sum(split_activity_amount) order_activity_reduce_amount,
  573. sum(split_coupon_amount) order_coupon_reduce_amount,
  574. sum(original_amount) order_original_amount,
  575. sum(split_final_amount) order_final_amount
  576. from ${APP}.dwd_order_detail
  577. group by date_format(create_time,'yyyy-MM-dd'),sku_id
  578. ),
  579. tmp_pay as
  580. (
  581. select
  582. date_format(callback_time,'yyyy-MM-dd') dt,
  583. sku_id,
  584. count(*) payment_count,
  585. sum(sku_num) payment_num,
  586. sum(split_final_amount) payment_amount
  587. from ${APP}.dwd_order_detail od
  588. join
  589. (
  590. select
  591. order_id,
  592. callback_time
  593. from ${APP}.dwd_payment_info
  594. where callback_time is not null
  595. )pi on pi.order_id=od.order_id
  596. group by date_format(callback_time,'yyyy-MM-dd'),sku_id
  597. ),
  598. tmp_ri as
  599. (
  600. select
  601. date_format(create_time,'yyyy-MM-dd') dt,
  602. sku_id,
  603. count(*) refund_order_count,
  604. sum(refund_num) refund_order_num,
  605. sum(refund_amount) refund_order_amount
  606. from ${APP}.dwd_order_refund_info
  607. group by date_format(create_time,'yyyy-MM-dd'),sku_id
  608. ),
  609. tmp_rp as
  610. (
  611. select
  612. date_format(callback_time,'yyyy-MM-dd') dt,
  613. rp.sku_id,
  614. count(*) refund_payment_count,
  615. sum(ri.refund_num) refund_payment_num,
  616. sum(refund_amount) refund_payment_amount
  617. from
  618. (
  619. select
  620. order_id,
  621. sku_id,
  622. refund_amount,
  623. callback_time
  624. from ${APP}.dwd_refund_payment
  625. )rp
  626. left join
  627. (
  628. select
  629. order_id,
  630. sku_id,
  631. refund_num
  632. from ${APP}.dwd_order_refund_info
  633. )ri
  634. on rp.order_id=ri.order_id
  635. and rp.sku_id=ri.sku_id
  636. group by date_format(callback_time,'yyyy-MM-dd'),rp.sku_id
  637. ),
  638. tmp_cf as
  639. (
  640. select
  641. dt,
  642. item sku_id,
  643. sum(if(action_id='cart_add',1,0)) cart_count,
  644. sum(if(action_id='favor_add',1,0)) favor_count
  645. from ${APP}.dwd_action_log
  646. where action_id in ('cart_add','favor_add')
  647. group by dt,item
  648. ),
  649. tmp_comment as
  650. (
  651. select
  652. date_format(create_time,'yyyy-MM-dd') dt,
  653. sku_id,
  654. sum(if(appraise='1201',1,0)) appraise_good_count,
  655. sum(if(appraise='1202',1,0)) appraise_mid_count,
  656. sum(if(appraise='1203',1,0)) appraise_bad_count,
  657. sum(if(appraise='1204',1,0)) appraise_default_count
  658. from ${APP}.dwd_comment_info
  659. group by date_format(create_time,'yyyy-MM-dd'),sku_id
  660. )
  661. insert overwrite table ${APP}.dws_sku_action_daycount partition(dt)
  662. select
  663. sku_id,
  664. sum(order_count),
  665. sum(order_num),
  666. sum(order_activity_count),
  667. sum(order_coupon_count),
  668. sum(order_activity_reduce_amount),
  669. sum(order_coupon_reduce_amount),
  670. sum(order_original_amount),
  671. sum(order_final_amount),
  672. sum(payment_count),
  673. sum(payment_num),
  674. sum(payment_amount),
  675. sum(refund_order_count),
  676. sum(refund_order_num),
  677. sum(refund_order_amount),
  678. sum(refund_payment_count),
  679. sum(refund_payment_num),
  680. sum(refund_payment_amount),
  681. sum(cart_count),
  682. sum(favor_count),
  683. sum(appraise_good_count),
  684. sum(appraise_mid_count),
  685. sum(appraise_bad_count),
  686. sum(appraise_default_count),
  687. dt
  688. from
  689. (
  690. select
  691. dt,
  692. sku_id,
  693. order_count,
  694. order_num,
  695. order_activity_count,
  696. order_coupon_count,
  697. order_activity_reduce_amount,
  698. order_coupon_reduce_amount,
  699. order_original_amount,
  700. order_final_amount,
  701. 0 payment_count,
  702. 0 payment_num,
  703. 0 payment_amount,
  704. 0 refund_order_count,
  705. 0 refund_order_num,
  706. 0 refund_order_amount,
  707. 0 refund_payment_count,
  708. 0 refund_payment_num,
  709. 0 refund_payment_amount,
  710. 0 cart_count,
  711. 0 favor_count,
  712. 0 appraise_good_count,
  713. 0 appraise_mid_count,
  714. 0 appraise_bad_count,
  715. 0 appraise_default_count
  716. from tmp_order
  717. union all
  718. select
  719. dt,
  720. sku_id,
  721. 0 order_count,
  722. 0 order_num,
  723. 0 order_activity_count,
  724. 0 order_coupon_count,
  725. 0 order_activity_reduce_amount,
  726. 0 order_coupon_reduce_amount,
  727. 0 order_original_amount,
  728. 0 order_final_amount,
  729. payment_count,
  730. payment_num,
  731. payment_amount,
  732. 0 refund_order_count,
  733. 0 refund_order_num,
  734. 0 refund_order_amount,
  735. 0 refund_payment_count,
  736. 0 refund_payment_num,
  737. 0 refund_payment_amount,
  738. 0 cart_count,
  739. 0 favor_count,
  740. 0 appraise_good_count,
  741. 0 appraise_mid_count,
  742. 0 appraise_bad_count,
  743. 0 appraise_default_count
  744. from tmp_pay
  745. union all
  746. select
  747. dt,
  748. sku_id,
  749. 0 order_count,
  750. 0 order_num,
  751. 0 order_activity_count,
  752. 0 order_coupon_count,
  753. 0 order_activity_reduce_amount,
  754. 0 order_coupon_reduce_amount,
  755. 0 order_original_amount,
  756. 0 order_final_amount,
  757. 0 payment_count,
  758. 0 payment_num,
  759. 0 payment_amount,
  760. refund_order_count,
  761. refund_order_num,
  762. refund_order_amount,
  763. 0 refund_payment_count,
  764. 0 refund_payment_num,
  765. 0 refund_payment_amount,
  766. 0 cart_count,
  767. 0 favor_count,
  768. 0 appraise_good_count,
  769. 0 appraise_mid_count,
  770. 0 appraise_bad_count,
  771. 0 appraise_default_count
  772. from tmp_ri
  773. union all
  774. select
  775. dt,
  776. sku_id,
  777. 0 order_count,
  778. 0 order_num,
  779. 0 order_activity_count,
  780. 0 order_coupon_count,
  781. 0 order_activity_reduce_amount,
  782. 0 order_coupon_reduce_amount,
  783. 0 order_original_amount,
  784. 0 order_final_amount,
  785. 0 payment_count,
  786. 0 payment_num,
  787. 0 payment_amount,
  788. 0 refund_order_count,
  789. 0 refund_order_num,
  790. 0 refund_order_amount,
  791. refund_payment_count,
  792. refund_payment_num,
  793. refund_payment_amount,
  794. 0 cart_count,
  795. 0 favor_count,
  796. 0 appraise_good_count,
  797. 0 appraise_mid_count,
  798. 0 appraise_bad_count,
  799. 0 appraise_default_count
  800. from tmp_rp
  801. union all
  802. select
  803. dt,
  804. sku_id,
  805. 0 order_count,
  806. 0 order_num,
  807. 0 order_activity_count,
  808. 0 order_coupon_count,
  809. 0 order_activity_reduce_amount,
  810. 0 order_coupon_reduce_amount,
  811. 0 order_original_amount,
  812. 0 order_final_amount,
  813. 0 payment_count,
  814. 0 payment_num,
  815. 0 payment_amount,
  816. 0 refund_order_count,
  817. 0 refund_order_num,
  818. 0 refund_order_amount,
  819. 0 refund_payment_count,
  820. 0 refund_payment_num,
  821. 0 refund_payment_amount,
  822. cart_count,
  823. favor_count,
  824. 0 appraise_good_count,
  825. 0 appraise_mid_count,
  826. 0 appraise_bad_count,
  827. 0 appraise_default_count
  828. from tmp_cf
  829. union all
  830. select
  831. dt,
  832. sku_id,
  833. 0 order_count,
  834. 0 order_num,
  835. 0 order_activity_count,
  836. 0 order_coupon_count,
  837. 0 order_activity_reduce_amount,
  838. 0 order_coupon_reduce_amount,
  839. 0 order_original_amount,
  840. 0 order_final_amount,
  841. 0 payment_count,
  842. 0 payment_num,
  843. 0 payment_amount,
  844. 0 refund_order_count,
  845. 0 refund_order_num,
  846. 0 refund_order_amount,
  847. 0 refund_payment_count,
  848. 0 refund_payment_num,
  849. 0 refund_payment_amount,
  850. 0 cart_count,
  851. 0 favor_count,
  852. appraise_good_count,
  853. appraise_mid_count,
  854. appraise_bad_count,
  855. appraise_default_count
  856. from tmp_comment
  857. )t1
  858. group by dt,sku_id;"
  859. dws_coupon_info_daycount="
  860. set hive.exec.dynamic.partition.mode=nonstrict;
  861. with
  862. tmp_cu as
  863. (
  864. select
  865. coalesce(coupon_get.dt,coupon_using.dt,coupon_used.dt,coupon_exprie.dt) dt,
  866. coalesce(coupon_get.coupon_id,coupon_using.coupon_id,coupon_used.coupon_id,coupon_exprie.coupon_id) coupon_id,
  867. nvl(get_count,0) get_count,
  868. nvl(order_count,0) order_count,
  869. nvl(payment_count,0) payment_count,
  870. nvl(expire_count,0) expire_count
  871. from
  872. (
  873. select
  874. date_format(get_time,'yyyy-MM-dd') dt,
  875. coupon_id,
  876. count(*) get_count
  877. from ${APP}.dwd_coupon_use
  878. group by date_format(get_time,'yyyy-MM-dd'),coupon_id
  879. )coupon_get
  880. full outer join
  881. (
  882. select
  883. date_format(using_time,'yyyy-MM-dd') dt,
  884. coupon_id,
  885. count(*) order_count
  886. from ${APP}.dwd_coupon_use
  887. where using_time is not null
  888. group by date_format(using_time,'yyyy-MM-dd'),coupon_id
  889. )coupon_using
  890. on coupon_get.dt=coupon_using.dt
  891. and coupon_get.coupon_id=coupon_using.coupon_id
  892. full outer join
  893. (
  894. select
  895. date_format(used_time,'yyyy-MM-dd') dt,
  896. coupon_id,
  897. count(*) payment_count
  898. from ${APP}.dwd_coupon_use
  899. where used_time is not null
  900. group by date_format(used_time,'yyyy-MM-dd'),coupon_id
  901. )coupon_used
  902. on nvl(coupon_get.dt,coupon_using.dt)=coupon_used.dt
  903. and nvl(coupon_get.coupon_id,coupon_using.coupon_id)=coupon_used.coupon_id
  904. full outer join
  905. (
  906. select
  907. date_format(expire_time,'yyyy-MM-dd') dt,
  908. coupon_id,
  909. count(*) expire_count
  910. from ${APP}.dwd_coupon_use
  911. where expire_time is not null
  912. group by date_format(expire_time,'yyyy-MM-dd'),coupon_id
  913. )coupon_exprie
  914. on coalesce(coupon_get.dt,coupon_using.dt,coupon_used.dt)=coupon_exprie.dt
  915. and coalesce(coupon_get.coupon_id,coupon_using.coupon_id,coupon_used.coupon_id)=coupon_exprie.coupon_id
  916. ),
  917. tmp_order as
  918. (
  919. select
  920. date_format(create_time,'yyyy-MM-dd') dt,
  921. coupon_id,
  922. sum(split_coupon_amount) order_reduce_amount,
  923. sum(original_amount) order_original_amount,
  924. sum(split_final_amount) order_final_amount
  925. from ${APP}.dwd_order_detail
  926. where coupon_id is not null
  927. group by date_format(create_time,'yyyy-MM-dd'),coupon_id
  928. ),
  929. tmp_pay as
  930. (
  931. select
  932. date_format(callback_time,'yyyy-MM-dd') dt,
  933. coupon_id,
  934. sum(split_coupon_amount) payment_reduce_amount,
  935. sum(split_final_amount) payment_amount
  936. from
  937. (
  938. select
  939. order_id,
  940. coupon_id,
  941. split_coupon_amount,
  942. split_final_amount
  943. from ${APP}.dwd_order_detail
  944. where coupon_id is not null
  945. )od
  946. join
  947. (
  948. select
  949. order_id,
  950. callback_time
  951. from ${APP}.dwd_payment_info
  952. )pi
  953. on od.order_id=pi.order_id
  954. group by date_format(callback_time,'yyyy-MM-dd'),coupon_id
  955. )
  956. insert overwrite table ${APP}.dws_coupon_info_daycount partition(dt)
  957. select
  958. coupon_id,
  959. sum(get_count),
  960. sum(order_count),
  961. sum(order_reduce_amount),
  962. sum(order_original_amount),
  963. sum(order_final_amount),
  964. sum(payment_count),
  965. sum(payment_reduce_amount),
  966. sum(payment_amount),
  967. sum(expire_count),
  968. dt
  969. from
  970. (
  971. select
  972. dt,
  973. coupon_id,
  974. get_count,
  975. order_count,
  976. 0 order_reduce_amount,
  977. 0 order_original_amount,
  978. 0 order_final_amount,
  979. payment_count,
  980. 0 payment_reduce_amount,
  981. 0 payment_amount,
  982. expire_count
  983. from tmp_cu
  984. union all
  985. select
  986. dt,
  987. coupon_id,
  988. 0 get_count,
  989. 0 order_count,
  990. order_reduce_amount,
  991. order_original_amount,
  992. order_final_amount,
  993. 0 payment_count,
  994. 0 payment_reduce_amount,
  995. 0 payment_amount,
  996. 0 expire_count
  997. from tmp_order
  998. union all
  999. select
  1000. dt,
  1001. coupon_id,
  1002. 0 get_count,
  1003. 0 order_count,
  1004. 0 order_reduce_amount,
  1005. 0 order_original_amount,
  1006. 0 order_final_amount,
  1007. 0 payment_count,
  1008. payment_reduce_amount,
  1009. payment_amount,
  1010. 0 expire_count
  1011. from tmp_pay
  1012. )t1
  1013. group by dt,coupon_id;
  1014. "
  1015. case $1 in
  1016. "dws_visitor_action_daycount" )
  1017. hive -e "$dws_visitor_action_daycount"
  1018. ;;
  1019. "dws_user_action_daycount" )
  1020. hive -e "$dws_user_action_daycount"
  1021. ;;
  1022. "dws_activity_info_daycount" )
  1023. hive -e "$dws_activity_info_daycount"
  1024. ;;
  1025. "dws_area_stats_daycount" )
  1026. hive -e "$dws_area_stats_daycount"
  1027. ;;
  1028. "dws_sku_action_daycount" )
  1029. hive -e "$dws_sku_action_daycount"
  1030. ;;
  1031. "dws_coupon_info_daycount" )
  1032. hive -e "$dws_coupon_info_daycount"
  1033. ;;
  1034. "all" )
  1035. hive -e "$dws_visitor_action_daycount$dws_user_action_daycount$dws_activity_info_daycount$dws_area_stats_daycount$dws_sku_action_daycount$dws_coupon_info_daycount"
  1036. ;;
  1037. esac

增加执行权限

  1. [fancy@node101 bin]$ chmod +x dwd_to_dws_init.sh

B、脚本使用

执行脚本

  1. [fancy@node101 bin]$ dwd_to_dws_init.sh all 2020-06-14

查看数据是否导入成功

8. DWS 层每日数据装载脚本

A、编写脚本

在 /home/fancy/bin 目录下创建脚本 dwd_to_dws.sh

  1. #!/bin/bash
  2. APP=gmall
  3. # 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天
  4. if [ -n "$2" ] ;then
  5. do_date=$2
  6. else
  7. do_date=`date -d "-1 day" +%F`
  8. fi
  9. dws_visitor_action_daycount="insert overwrite table ${APP}.dws_visitor_action_daycount partition(dt='$do_date')
  10. select
  11. t1.mid_id,
  12. t1.brand,
  13. t1.model,
  14. t1.is_new,
  15. t1.channel,
  16. t1.os,
  17. t1.area_code,
  18. t1.version_code,
  19. t1.visit_count,
  20. t3.page_stats
  21. from
  22. (
  23. select
  24. mid_id,
  25. brand,
  26. model,
  27. if(array_contains(collect_set(is_new),'0'),'0','1') is_new,--ods_page_log中,同一天内,同一设备的is_new字段,可能全部为1,可能全部为0,也可能部分为0,部分为1(卸载重装),故做该处理
  28. collect_set(channel) channel,
  29. collect_set(os) os,
  30. collect_set(area_code) area_code,
  31. collect_set(version_code) version_code,
  32. sum(if(last_page_id is null,1,0)) visit_count
  33. from ${APP}.dwd_page_log
  34. where dt='$do_date'
  35. and last_page_id is null
  36. group by mid_id,model,brand
  37. )t1
  38. join
  39. (
  40. select
  41. mid_id,
  42. brand,
  43. model,
  44. collect_set(named_struct('page_id',page_id,'page_count',page_count,'during_time',during_time)) page_stats
  45. from
  46. (select
  47. mid_id,
  48. brand,
  49. model,
  50. page_id,
  51. count(*) page_count,
  52. sum(during_time) during_time
  53. from ${APP}.dwd_page_log
  54. where dt='$do_date'
  55. group by mid_id,model,brand,page_id
  56. )t2
  57. group by mid_id,model,brand
  58. )t3
  59. on t1.mid_id=t3.mid_id
  60. and t1.brand=t3.brand
  61. and t1.model=t3.model;"
  62. dws_user_action_daycount="
  63. with
  64. tmp_login as
  65. (
  66. select
  67. user_id,
  68. count(*) login_count
  69. from ${APP}.dwd_page_log
  70. where dt='$do_date'
  71. and user_id is not null
  72. and last_page_id is null
  73. group by user_id
  74. ),
  75. tmp_cf as
  76. (
  77. select
  78. user_id,
  79. sum(if(action_id='cart_add',1,0)) cart_count,
  80. sum(if(action_id='favor_add',1,0)) favor_count
  81. from ${APP}.dwd_action_log
  82. where dt='$do_date'
  83. and user_id is not null
  84. and action_id in ('cart_add','favor_add')
  85. group by user_id
  86. ),
  87. tmp_order as
  88. (
  89. select
  90. user_id,
  91. count(*) order_count,
  92. sum(if(activity_reduce_amount>0,1,0)) order_activity_count,
  93. sum(if(coupon_reduce_amount>0,1,0)) order_coupon_count,
  94. sum(activity_reduce_amount) order_activity_reduce_amount,
  95. sum(coupon_reduce_amount) order_coupon_reduce_amount,
  96. sum(original_amount) order_original_amount,
  97. sum(final_amount) order_final_amount
  98. from ${APP}.dwd_order_info
  99. where (dt='$do_date'
  100. or dt='9999-99-99')
  101. and date_format(create_time,'yyyy-MM-dd')='$do_date'
  102. group by user_id
  103. ),
  104. tmp_pay as
  105. (
  106. select
  107. user_id,
  108. count(*) payment_count,
  109. sum(payment_amount) payment_amount
  110. from ${APP}.dwd_payment_info
  111. where dt='$do_date'
  112. group by user_id
  113. ),
  114. tmp_ri as
  115. (
  116. select
  117. user_id,
  118. count(*) refund_order_count,
  119. sum(refund_num) refund_order_num,
  120. sum(refund_amount) refund_order_amount
  121. from ${APP}.dwd_order_refund_info
  122. where dt='$do_date'
  123. group by user_id
  124. ),
  125. tmp_rp as
  126. (
  127. select
  128. rp.user_id,
  129. count(*) refund_payment_count,
  130. sum(ri.refund_num) refund_payment_num,
  131. sum(rp.refund_amount) refund_payment_amount
  132. from
  133. (
  134. select
  135. user_id,
  136. order_id,
  137. sku_id,
  138. refund_amount
  139. from ${APP}.dwd_refund_payment
  140. where dt='$do_date'
  141. )rp
  142. left join
  143. (
  144. select
  145. user_id,
  146. order_id,
  147. sku_id,
  148. refund_num
  149. from ${APP}.dwd_order_refund_info
  150. where dt>=date_add('$do_date',-15)
  151. )ri
  152. on rp.order_id=ri.order_id
  153. and rp.sku_id=rp.sku_id
  154. group by rp.user_id
  155. ),
  156. tmp_coupon as
  157. (
  158. select
  159. user_id,
  160. sum(if(date_format(get_time,'yyyy-MM-dd')='$do_date',1,0)) coupon_get_count,
  161. sum(if(date_format(using_time,'yyyy-MM-dd')='$do_date',1,0)) coupon_using_count,
  162. sum(if(date_format(used_time,'yyyy-MM-dd')='$do_date',1,0)) coupon_used_count
  163. from ${APP}.dwd_coupon_use
  164. where (dt='$do_date' or dt='9999-99-99')
  165. and (date_format(get_time, 'yyyy-MM-dd') = '$do_date'
  166. or date_format(using_time,'yyyy-MM-dd')='$do_date'
  167. or date_format(used_time,'yyyy-MM-dd')='$do_date')
  168. group by user_id
  169. ),
  170. tmp_comment as
  171. (
  172. select
  173. user_id,
  174. sum(if(appraise='1201',1,0)) appraise_good_count,
  175. sum(if(appraise='1202',1,0)) appraise_mid_count,
  176. sum(if(appraise='1203',1,0)) appraise_bad_count,
  177. sum(if(appraise='1204',1,0)) appraise_default_count
  178. from ${APP}.dwd_comment_info
  179. where dt='$do_date'
  180. group by user_id
  181. ),
  182. tmp_od as
  183. (
  184. select
  185. user_id,
  186. collect_set(named_struct('sku_id',sku_id,'sku_num',sku_num,'order_count',order_count,'activity_reduce_amount',activity_reduce_amount,'coupon_reduce_amount',coupon_reduce_amount,'original_amount',original_amount,'final_amount',final_amount)) order_detail_stats
  187. from
  188. (
  189. select
  190. user_id,
  191. sku_id,
  192. sum(sku_num) sku_num,
  193. count(*) order_count,
  194. cast(sum(split_activity_amount) as decimal(16,2)) activity_reduce_amount,
  195. cast(sum(split_coupon_amount) as decimal(16,2)) coupon_reduce_amount,
  196. cast(sum(original_amount) as decimal(16,2)) original_amount,
  197. cast(sum(split_final_amount) as decimal(16,2)) final_amount
  198. from ${APP}.dwd_order_detail
  199. where dt='$do_date'
  200. group by user_id,sku_id
  201. )t1
  202. group by user_id
  203. )
  204. insert overwrite table ${APP}.dws_user_action_daycount partition(dt='$do_date')
  205. select
  206. coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id,tmp_comment.user_id,tmp_coupon.user_id,tmp_od.user_id),
  207. nvl(login_count,0),
  208. nvl(cart_count,0),
  209. nvl(favor_count,0),
  210. nvl(order_count,0),
  211. nvl(order_activity_count,0),
  212. nvl(order_activity_reduce_amount,0),
  213. nvl(order_coupon_count,0),
  214. nvl(order_coupon_reduce_amount,0),
  215. nvl(order_original_amount,0),
  216. nvl(order_final_amount,0),
  217. nvl(payment_count,0),
  218. nvl(payment_amount,0),
  219. nvl(refund_order_count,0),
  220. nvl(refund_order_num,0),
  221. nvl(refund_order_amount,0),
  222. nvl(refund_payment_count,0),
  223. nvl(refund_payment_num,0),
  224. nvl(refund_payment_amount,0),
  225. nvl(coupon_get_count,0),
  226. nvl(coupon_using_count,0),
  227. nvl(coupon_used_count,0),
  228. nvl(appraise_good_count,0),
  229. nvl(appraise_mid_count,0),
  230. nvl(appraise_bad_count,0),
  231. nvl(appraise_default_count,0),
  232. order_detail_stats
  233. from tmp_login
  234. full outer join tmp_cf on tmp_login.user_id=tmp_cf.user_id
  235. full outer join tmp_order on coalesce(tmp_login.user_id,tmp_cf.user_id)=tmp_order.user_id
  236. full outer join tmp_pay on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id)=tmp_pay.user_id
  237. full outer join tmp_ri on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id)=tmp_ri.user_id
  238. full outer join tmp_rp on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id)=tmp_rp.user_id
  239. full outer join tmp_comment on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id)=tmp_comment.user_id
  240. full outer join tmp_coupon on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id,tmp_comment.user_id)=tmp_coupon.user_id
  241. full outer join tmp_od on coalesce(tmp_login.user_id,tmp_cf.user_id,tmp_order.user_id,tmp_pay.user_id,tmp_ri.user_id,tmp_rp.user_id,tmp_comment.user_id,tmp_coupon.user_id)=tmp_od.user_id;
  242. "
  243. dws_activity_info_daycount="
  244. with
  245. tmp_order as
  246. (
  247. select
  248. activity_rule_id,
  249. activity_id,
  250. count(*) order_count,
  251. sum(split_activity_amount) order_reduce_amount,
  252. sum(original_amount) order_original_amount,
  253. sum(split_final_amount) order_final_amount
  254. from ${APP}.dwd_order_detail
  255. where dt='$do_date'
  256. and activity_id is not null
  257. group by activity_rule_id,activity_id
  258. ),
  259. tmp_pay as
  260. (
  261. select
  262. activity_rule_id,
  263. activity_id,
  264. count(*) payment_count,
  265. sum(split_activity_amount) payment_reduce_amount,
  266. sum(split_final_amount) payment_amount
  267. from ${APP}.dwd_order_detail
  268. where (dt='$do_date'
  269. or dt=date_add('$do_date',-1))
  270. and activity_id is not null
  271. and order_id in
  272. (
  273. select order_id from ${APP}.dwd_payment_info where dt='$do_date'
  274. )
  275. group by activity_rule_id,activity_id
  276. )
  277. insert overwrite table ${APP}.dws_activity_info_daycount partition(dt='$do_date')
  278. select
  279. activity_rule_id,
  280. activity_id,
  281. sum(order_count),
  282. sum(order_reduce_amount),
  283. sum(order_original_amount),
  284. sum(order_final_amount),
  285. sum(payment_count),
  286. sum(payment_reduce_amount),
  287. sum(payment_amount)
  288. from
  289. (
  290. select
  291. activity_rule_id,
  292. activity_id,
  293. order_count,
  294. order_reduce_amount,
  295. order_original_amount,
  296. order_final_amount,
  297. 0 payment_count,
  298. 0 payment_reduce_amount,
  299. 0 payment_amount
  300. from tmp_order
  301. union all
  302. select
  303. activity_rule_id,
  304. activity_id,
  305. 0 order_count,
  306. 0 order_reduce_amount,
  307. 0 order_original_amount,
  308. 0 order_final_amount,
  309. payment_count,
  310. payment_reduce_amount,
  311. payment_amount
  312. from tmp_pay
  313. )t1
  314. group by activity_rule_id,activity_id;"
  315. dws_sku_action_daycount="
  316. with
  317. tmp_order as
  318. (
  319. select
  320. sku_id,
  321. count(*) order_count,
  322. sum(sku_num) order_num,
  323. sum(if(split_activity_amount>0,1,0)) order_activity_count,
  324. sum(if(split_coupon_amount>0,1,0)) order_coupon_count,
  325. sum(split_activity_amount) order_activity_reduce_amount,
  326. sum(split_coupon_amount) order_coupon_reduce_amount,
  327. sum(original_amount) order_original_amount,
  328. sum(split_final_amount) order_final_amount
  329. from ${APP}.dwd_order_detail
  330. where dt='$do_date'
  331. group by sku_id
  332. ),
  333. tmp_pay as
  334. (
  335. select
  336. sku_id,
  337. count(*) payment_count,
  338. sum(sku_num) payment_num,
  339. sum(split_final_amount) payment_amount
  340. from ${APP}.dwd_order_detail
  341. where (dt='$do_date'
  342. or dt=date_add('$do_date',-1))
  343. and order_id in
  344. (
  345. select order_id from ${APP}.dwd_payment_info where dt='$do_date'
  346. )
  347. group by sku_id
  348. ),
  349. tmp_ri as
  350. (
  351. select
  352. sku_id,
  353. count(*) refund_order_count,
  354. sum(refund_num) refund_order_num,
  355. sum(refund_amount) refund_order_amount
  356. from ${APP}.dwd_order_refund_info
  357. where dt='$do_date'
  358. group by sku_id
  359. ),
  360. tmp_rp as
  361. (
  362. select
  363. rp.sku_id,
  364. count(*) refund_payment_count,
  365. sum(ri.refund_num) refund_payment_num,
  366. sum(refund_amount) refund_payment_amount
  367. from
  368. (
  369. select
  370. order_id,
  371. sku_id,
  372. refund_amount
  373. from ${APP}.dwd_refund_payment
  374. where dt='$do_date'
  375. )rp
  376. left join
  377. (
  378. select
  379. order_id,
  380. sku_id,
  381. refund_num
  382. from ${APP}.dwd_order_refund_info
  383. where dt>=date_add('$do_date',-15)
  384. )ri
  385. on rp.order_id=ri.order_id
  386. and rp.sku_id=ri.sku_id
  387. group by rp.sku_id
  388. ),
  389. tmp_cf as
  390. (
  391. select
  392. item sku_id,
  393. sum(if(action_id='cart_add',1,0)) cart_count,
  394. sum(if(action_id='favor_add',1,0)) favor_count
  395. from ${APP}.dwd_action_log
  396. where dt='$do_date'
  397. and action_id in ('cart_add','favor_add')
  398. group by item
  399. ),
  400. tmp_comment as
  401. (
  402. select
  403. sku_id,
  404. sum(if(appraise='1201',1,0)) appraise_good_count,
  405. sum(if(appraise='1202',1,0)) appraise_mid_count,
  406. sum(if(appraise='1203',1,0)) appraise_bad_count,
  407. sum(if(appraise='1204',1,0)) appraise_default_count
  408. from ${APP}.dwd_comment_info
  409. where dt='$do_date'
  410. group by sku_id
  411. )
  412. insert overwrite table ${APP}.dws_sku_action_daycount partition(dt='$do_date')
  413. select
  414. sku_id,
  415. sum(order_count),
  416. sum(order_num),
  417. sum(order_activity_count),
  418. sum(order_coupon_count),
  419. sum(order_activity_reduce_amount),
  420. sum(order_coupon_reduce_amount),
  421. sum(order_original_amount),
  422. sum(order_final_amount),
  423. sum(payment_count),
  424. sum(payment_num),
  425. sum(payment_amount),
  426. sum(refund_order_count),
  427. sum(refund_order_num),
  428. sum(refund_order_amount),
  429. sum(refund_payment_count),
  430. sum(refund_payment_num),
  431. sum(refund_payment_amount),
  432. sum(cart_count),
  433. sum(favor_count),
  434. sum(appraise_good_count),
  435. sum(appraise_mid_count),
  436. sum(appraise_bad_count),
  437. sum(appraise_default_count)
  438. from
  439. (
  440. select
  441. sku_id,
  442. order_count,
  443. order_num,
  444. order_activity_count,
  445. order_coupon_count,
  446. order_activity_reduce_amount,
  447. order_coupon_reduce_amount,
  448. order_original_amount,
  449. order_final_amount,
  450. 0 payment_count,
  451. 0 payment_num,
  452. 0 payment_amount,
  453. 0 refund_order_count,
  454. 0 refund_order_num,
  455. 0 refund_order_amount,
  456. 0 refund_payment_count,
  457. 0 refund_payment_num,
  458. 0 refund_payment_amount,
  459. 0 cart_count,
  460. 0 favor_count,
  461. 0 appraise_good_count,
  462. 0 appraise_mid_count,
  463. 0 appraise_bad_count,
  464. 0 appraise_default_count
  465. from tmp_order
  466. union all
  467. select
  468. sku_id,
  469. 0 order_count,
  470. 0 order_num,
  471. 0 order_activity_count,
  472. 0 order_coupon_count,
  473. 0 order_activity_reduce_amount,
  474. 0 order_coupon_reduce_amount,
  475. 0 order_original_amount,
  476. 0 order_final_amount,
  477. payment_count,
  478. payment_num,
  479. payment_amount,
  480. 0 refund_order_count,
  481. 0 refund_order_num,
  482. 0 refund_order_amount,
  483. 0 refund_payment_count,
  484. 0 refund_payment_num,
  485. 0 refund_payment_amount,
  486. 0 cart_count,
  487. 0 favor_count,
  488. 0 appraise_good_count,
  489. 0 appraise_mid_count,
  490. 0 appraise_bad_count,
  491. 0 appraise_default_count
  492. from tmp_pay
  493. union all
  494. select
  495. sku_id,
  496. 0 order_count,
  497. 0 order_num,
  498. 0 order_activity_count,
  499. 0 order_coupon_count,
  500. 0 order_activity_reduce_amount,
  501. 0 order_coupon_reduce_amount,
  502. 0 order_original_amount,
  503. 0 order_final_amount,
  504. 0 payment_count,
  505. 0 payment_num,
  506. 0 payment_amount,
  507. refund_order_count,
  508. refund_order_num,
  509. refund_order_amount,
  510. 0 refund_payment_count,
  511. 0 refund_payment_num,
  512. 0 refund_payment_amount,
  513. 0 cart_count,
  514. 0 favor_count,
  515. 0 appraise_good_count,
  516. 0 appraise_mid_count,
  517. 0 appraise_bad_count,
  518. 0 appraise_default_count
  519. from tmp_ri
  520. union all
  521. select
  522. sku_id,
  523. 0 order_count,
  524. 0 order_num,
  525. 0 order_activity_count,
  526. 0 order_coupon_count,
  527. 0 order_activity_reduce_amount,
  528. 0 order_coupon_reduce_amount,
  529. 0 order_original_amount,
  530. 0 order_final_amount,
  531. 0 payment_count,
  532. 0 payment_num,
  533. 0 payment_amount,
  534. 0 refund_order_count,
  535. 0 refund_order_num,
  536. 0 refund_order_amount,
  537. refund_payment_count,
  538. refund_payment_num,
  539. refund_payment_amount,
  540. 0 cart_count,
  541. 0 favor_count,
  542. 0 appraise_good_count,
  543. 0 appraise_mid_count,
  544. 0 appraise_bad_count,
  545. 0 appraise_default_count
  546. from tmp_rp
  547. union all
  548. select
  549. sku_id,
  550. 0 order_count,
  551. 0 order_num,
  552. 0 order_activity_count,
  553. 0 order_coupon_count,
  554. 0 order_activity_reduce_amount,
  555. 0 order_coupon_reduce_amount,
  556. 0 order_original_amount,
  557. 0 order_final_amount,
  558. 0 payment_count,
  559. 0 payment_num,
  560. 0 payment_amount,
  561. 0 refund_order_count,
  562. 0 refund_order_num,
  563. 0 refund_order_amount,
  564. 0 refund_payment_count,
  565. 0 refund_payment_num,
  566. 0 refund_payment_amount,
  567. cart_count,
  568. favor_count,
  569. 0 appraise_good_count,
  570. 0 appraise_mid_count,
  571. 0 appraise_bad_count,
  572. 0 appraise_default_count
  573. from tmp_cf
  574. union all
  575. select
  576. sku_id,
  577. 0 order_count,
  578. 0 order_num,
  579. 0 order_activity_count,
  580. 0 order_coupon_count,
  581. 0 order_activity_reduce_amount,
  582. 0 order_coupon_reduce_amount,
  583. 0 order_original_amount,
  584. 0 order_final_amount,
  585. 0 payment_count,
  586. 0 payment_num,
  587. 0 payment_amount,
  588. 0 refund_order_count,
  589. 0 refund_order_num,
  590. 0 refund_order_amount,
  591. 0 refund_payment_count,
  592. 0 refund_payment_num,
  593. 0 refund_payment_amount,
  594. 0 cart_count,
  595. 0 favor_count,
  596. appraise_good_count,
  597. appraise_mid_count,
  598. appraise_bad_count,
  599. appraise_default_count
  600. from tmp_comment
  601. )t1
  602. group by sku_id;"
  603. dws_coupon_info_daycount="
  604. with
  605. tmp_cu as
  606. (
  607. select
  608. coupon_id,
  609. sum(if(date_format(get_time,'yyyy-MM-dd')='$do_date',1,0)) get_count,
  610. sum(if(date_format(using_time,'yyyy-MM-dd')='$do_date',1,0)) order_count,
  611. sum(if(date_format(used_time,'yyyy-MM-dd')='$do_date',1,0)) payment_count,
  612. sum(if(date_format(expire_time,'yyyy-MM-dd')='$do_date',1,0)) expire_count
  613. from ${APP}.dwd_coupon_use
  614. where dt='9999-99-99'
  615. or dt='$do_date'
  616. group by coupon_id
  617. ),
  618. tmp_order as
  619. (
  620. select
  621. coupon_id,
  622. sum(split_coupon_amount) order_reduce_amount,
  623. sum(original_amount) order_original_amount,
  624. sum(split_final_amount) order_final_amount
  625. from ${APP}.dwd_order_detail
  626. where dt='$do_date'
  627. and coupon_id is not null
  628. group by coupon_id
  629. ),
  630. tmp_pay as
  631. (
  632. select
  633. coupon_id,
  634. sum(split_coupon_amount) payment_reduce_amount,
  635. sum(split_final_amount) payment_amount
  636. from ${APP}.dwd_order_detail
  637. where (dt='$do_date'
  638. or dt=date_add('$do_date',-1))
  639. and coupon_id is not null
  640. and order_id in
  641. (
  642. select order_id from ${APP}.dwd_payment_info where dt='$do_date'
  643. )
  644. group by coupon_id
  645. )
  646. insert overwrite table ${APP}.dws_coupon_info_daycount partition(dt='$do_date')
  647. select
  648. coupon_id,
  649. sum(get_count),
  650. sum(order_count),
  651. sum(order_reduce_amount),
  652. sum(order_original_amount),
  653. sum(order_final_amount),
  654. sum(payment_count),
  655. sum(payment_reduce_amount),
  656. sum(payment_amount),
  657. sum(expire_count)
  658. from
  659. (
  660. select
  661. coupon_id,
  662. get_count,
  663. order_count,
  664. 0 order_reduce_amount,
  665. 0 order_original_amount,
  666. 0 order_final_amount,
  667. payment_count,
  668. 0 payment_reduce_amount,
  669. 0 payment_amount,
  670. expire_count
  671. from tmp_cu
  672. union all
  673. select
  674. coupon_id,
  675. 0 get_count,
  676. 0 order_count,
  677. order_reduce_amount,
  678. order_original_amount,
  679. order_final_amount,
  680. 0 payment_count,
  681. 0 payment_reduce_amount,
  682. 0 payment_amount,
  683. 0 expire_count
  684. from tmp_order
  685. union all
  686. select
  687. coupon_id,
  688. 0 get_count,
  689. 0 order_count,
  690. 0 order_reduce_amount,
  691. 0 order_original_amount,
  692. 0 order_final_amount,
  693. 0 payment_count,
  694. payment_reduce_amount,
  695. payment_amount,
  696. 0 expire_count
  697. from tmp_pay
  698. )t1
  699. group by coupon_id;"
  700. dws_area_stats_daycount="
  701. with
  702. tmp_vu as
  703. (
  704. select
  705. id province_id,
  706. visit_count,
  707. login_count,
  708. visitor_count,
  709. user_count
  710. from
  711. (
  712. select
  713. area_code,
  714. count(*) visit_count,--访客访问次数
  715. count(user_id) login_count,--用户访问次数,等价于sum(if(user_id is not null,1,0))
  716. count(distinct(mid_id)) visitor_count,--访客人数
  717. count(distinct(user_id)) user_count--用户人数
  718. from ${APP}.dwd_page_log
  719. where dt='$do_date'
  720. and last_page_id is null
  721. group by area_code
  722. )tmp
  723. left join ${APP}.dim_base_province area
  724. on tmp.area_code=area.area_code
  725. ),
  726. tmp_order as
  727. (
  728. select
  729. province_id,
  730. count(*) order_count,
  731. sum(original_amount) order_original_amount,
  732. sum(final_amount) order_final_amount
  733. from ${APP}.dwd_order_info
  734. where dt='$do_date'
  735. or dt='9999-99-99'
  736. and date_format(create_time,'yyyy-MM-dd')='$do_date'
  737. group by province_id
  738. ),
  739. tmp_pay as
  740. (
  741. select
  742. province_id,
  743. count(*) payment_count,
  744. sum(payment_amount) payment_amount
  745. from ${APP}.dwd_payment_info
  746. where dt='$do_date'
  747. group by province_id
  748. ),
  749. tmp_ro as
  750. (
  751. select
  752. province_id,
  753. count(*) refund_order_count,
  754. sum(refund_amount) refund_order_amount
  755. from ${APP}.dwd_order_refund_info
  756. where dt='$do_date'
  757. group by province_id
  758. ),
  759. tmp_rp as
  760. (
  761. select
  762. province_id,
  763. count(*) refund_payment_count,
  764. sum(refund_amount) refund_payment_amount
  765. from ${APP}.dwd_refund_payment
  766. where dt='$do_date'
  767. group by province_id
  768. )
  769. insert overwrite table ${APP}.dws_area_stats_daycount partition(dt='$do_date')
  770. select
  771. province_id,
  772. sum(visit_count),
  773. sum(login_count),
  774. sum(visitor_count),
  775. sum(user_count),
  776. sum(order_count),
  777. sum(order_original_amount),
  778. sum(order_final_amount),
  779. sum(payment_count),
  780. sum(payment_amount),
  781. sum(refund_order_count),
  782. sum(refund_order_amount),
  783. sum(refund_payment_count),
  784. sum(refund_payment_amount)
  785. from
  786. (
  787. select
  788. province_id,
  789. visit_count,
  790. login_count,
  791. visitor_count,
  792. user_count,
  793. 0 order_count,
  794. 0 order_original_amount,
  795. 0 order_final_amount,
  796. 0 payment_count,
  797. 0 payment_amount,
  798. 0 refund_order_count,
  799. 0 refund_order_amount,
  800. 0 refund_payment_count,
  801. 0 refund_payment_amount
  802. from tmp_vu
  803. union all
  804. select
  805. province_id,
  806. 0 visit_count,
  807. 0 login_count,
  808. 0 visitor_count,
  809. 0 user_count,
  810. order_count,
  811. order_original_amount,
  812. order_final_amount,
  813. 0 payment_count,
  814. 0 payment_amount,
  815. 0 refund_order_count,
  816. 0 refund_order_amount,
  817. 0 refund_payment_count,
  818. 0 refund_payment_amount
  819. from tmp_order
  820. union all
  821. select
  822. province_id,
  823. 0 visit_count,
  824. 0 login_count,
  825. 0 visitor_count,
  826. 0 user_count,
  827. 0 order_count,
  828. 0 order_original_amount,
  829. 0 order_final_amount,
  830. payment_count,
  831. payment_amount,
  832. 0 refund_order_count,
  833. 0 refund_order_amount,
  834. 0 refund_payment_count,
  835. 0 refund_payment_amount
  836. from tmp_pay
  837. union all
  838. select
  839. province_id,
  840. 0 visit_count,
  841. 0 login_count,
  842. 0 visitor_count,
  843. 0 user_count,
  844. 0 order_count,
  845. 0 order_original_amount,
  846. 0 order_final_amount,
  847. 0 payment_count,
  848. 0 payment_amount,
  849. refund_order_count,
  850. refund_order_amount,
  851. 0 refund_payment_count,
  852. 0 refund_payment_amount
  853. from tmp_ro
  854. union all
  855. select
  856. province_id,
  857. 0 visit_count,
  858. 0 login_count,
  859. 0 visitor_count,
  860. 0 user_count,
  861. 0 order_count,
  862. 0 order_original_amount,
  863. 0 order_final_amount,
  864. 0 payment_count,
  865. 0 payment_amount,
  866. 0 refund_order_count,
  867. 0 refund_order_amount,
  868. refund_payment_count,
  869. refund_payment_amount
  870. from tmp_rp
  871. )t1
  872. group by province_id;"
  873. case $1 in
  874. "dws_visitor_action_daycount" )
  875. hive -e "$dws_visitor_action_daycount"
  876. ;;
  877. "dws_user_action_daycount" )
  878. hive -e "$dws_user_action_daycount"
  879. ;;
  880. "dws_activity_info_daycount" )
  881. hive -e "$dws_activity_info_daycount"
  882. ;;
  883. "dws_area_stats_daycount" )
  884. hive -e "$dws_area_stats_daycount"
  885. ;;
  886. "dws_sku_action_daycount" )
  887. hive -e "$dws_sku_action_daycount"
  888. ;;
  889. "dws_coupon_info_daycount" )
  890. hive -e "$dws_coupon_info_daycount"
  891. ;;
  892. "all" )
  893. hive -e "$dws_visitor_action_daycount$dws_user_action_daycount$dws_activity_info_daycount$dws_area_stats_daycount$dws_sku_action_daycount$dws_coupon_info_daycount"
  894. ;;
  895. esac

增加执行权限

  1. [fancy@node101 bin]$ chmod +x dwd_to_dws.sh

B、脚本使用

执行脚本

  1. [fancy@node101 bin]$ dwd_to_dws.sh all 2020-06-14

查看数据是否导入成功

发表评论

表情:
评论列表 (有 0 条评论,145人围观)

还没有评论,来说两句吧...

相关阅读