videoods.total_price_video.sql 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. -- Task: 视频维度表 ID: 1000579613 Type: ODPS_SQL
  2. --@exclude_input=total_price_video
  3. --@exclude_output=total_price_video
  4. --@exclude_input=total_reward_video
  5. --@exclude_output=total_reward_video
  6. --@exclude_input=every_video_status_category
  7. --@exclude_output=every_video_status_category
  8. --@exclude_input=videoid_top_tag_name
  9. --@exclude_output=videoid_top_tag_name
  10. --odps sql
  11. --********************************************************************--
  12. --author:liuzhongguo
  13. --create time:2020-06-06 16:40:39
  14. --********************************************************************--
  15. --每个视频的一级标签
  16. DROP TABLE IF EXISTS videoid_top_tag_name ;
  17. CREATE TABLE videoid_top_tag_name AS
  18. SELECT a.id AS videoid
  19. ,concat_ws(',',collect_set(c.tag_name)) tag_name
  20. FROM videoods.wx_video a
  21. LEFT JOIN videoods.wx_video_tag_rel b
  22. ON a.id = b.video_id LEFT
  23. JOIN (
  24. SELECT tag_id
  25. ,tag_name
  26. ,level
  27. FROM videoods.wx_video_tag
  28. ) c
  29. ON b.tag_id = c.tag_id
  30. --WHERE tag_name IN ('音乐','综艺','搞笑','舞蹈','祝福','旅行','百态','健康','科技','妙招','影视','美食','时尚','运动','游戏','抗肺炎','在家学','热点','社会','人文','生活','财富','情感','时尚' ,'游戏' ,'网课' ,'微商' ,'婚庆' ,'小语种' ,'广告' ,'宣传片' ,'聚会活动' ,'加密&可见' ,'低质内容' ,'宗教' ,'影视作品' ,'ASMR' ,'无法加载' ,'其他平台' ,'私密&删除' ,'内容无意义' ,'涉及政治' ,'邪教迷信' ,'群体事件' ,'暴恐血腥' ,'网络谣言' ,'淫秽色情' ,'涉嫌侵权' ,'低俗内容' ,'其他')
  31. WHERE level = 1
  32. GROUP BY a.id
  33. ;
  34. --每个视频的二级标签
  35. DROP TABLE IF EXISTS videoid_second_tag_name ;
  36. CREATE TABLE videoid_second_tag_name AS
  37. SELECT a.id AS videoid
  38. ,concat_ws(',',collect_set(c.tag_name)) tag_name
  39. FROM videoods.wx_video a
  40. LEFT JOIN videoods.wx_video_tag_rel b
  41. ON a.id = b.video_id LEFT
  42. JOIN (
  43. SELECT tag_id
  44. ,tag_name
  45. ,level
  46. FROM videoods.wx_video_tag
  47. ) c
  48. ON b.tag_id = c.tag_id
  49. WHERE tag_name IN ('民生' ,'灾祸' ,'时政' ,'法制' ,'节庆活动' ,'正能量' ,'打抱不平' ,'八卦' ,'军事' ,'历史' ,'非遗文化' ,'人物传记' ,'法律' ,'哲学' ,'艺术' ,'心理' ,'文学' ,'人生经历' ,'风土人情' ,'才艺' ,'妙招' ,'生活常识' ,'家居' ,'美女' ,'萌娃' ,'动物' ,'种草' ,'祝福' ,'助眠' ,'生活观赏' ,'星座' ,'生活辟谣' ,'三农' ,'奇闻' ,'科技前沿' ,'科学科普' ,'数码' ,'机械' ,'汽车' ,'科学推理' ,'科学实验' ,'财经' ,'商贸' ,'创业分享' ,'两性' ,'爱情' ,'亲情' ,'友情' ,'职场' ,'人生哲理' ,'乡情' ,'性学' ,'养生' ,'医学' ,'育儿' ,'美食分享' ,'美食制作' ,'黑暗料理' ,'奢侈料理' ,'自制片' ,'电影' ,'电视剧' ,'动漫' ,'综艺' ,'航拍' ,'摄影' ,'VLOG' ,'地标' ,'户外探险' ,'自驾游' ,'段子' ,'恶搞' ,'街访' ,'鬼畜' ,'相声' ,'小品' ,'脱口秀' ,'搞笑配音' ,'糗事' ,'舞蹈展示' ,'舞蹈教学' ,'影视舞蹈' ,'健身' ,'赛事' ,'瑜伽' ,'足球' ,'篮球' ,'乒乓球' ,'轮滑' ,'滑雪' ,'极限运动' ,'游泳' ,'钓鱼' ,'运动教学' ,'唱歌' ,'MV' ,'音乐相册' ,'音乐随拍' ,'音乐现场' ,'戏曲' ,'说唱' ,'口技' ,'乐器' ,'教学' ,'穿搭' ,'美妆' ,'美甲' ,'美发' ,'T台秀' ,'手游' ,'PC游戏' ,'主机游戏' ,'页游' ,'桌游' ,'街机')
  50. --WHERE level = 2
  51. GROUP BY a.id
  52. ;
  53. --每个视频的三级标签
  54. DROP TABLE IF EXISTS videoid_third_tag_name ;
  55. CREATE TABLE videoid_third_tag_name AS
  56. SELECT a.id AS videoid
  57. ,concat_ws(',',collect_set(c.tag_name)) tag_name
  58. FROM videoods.wx_video a
  59. LEFT JOIN videoods.wx_video_tag_rel b
  60. ON a.id = b.video_id LEFT
  61. JOIN (
  62. SELECT tag_id
  63. ,tag_name
  64. ,level
  65. FROM videoods.wx_video_tag
  66. ) c
  67. ON b.tag_id = c.tag_id
  68. --WHERE tag_name IN ('就业' ,'租房' ,'劳务' ,'食品' ,'出行' ,'天灾' ,'人祸' ,'刑事案件' ,'民事纠纷' ,'娱乐圈' ,'仪仗队' ,'阅兵' ,'军演' ,'武器' ,'战争' ,'中国古代史' ,'中国近代史' ,'国外历史' ,'建筑' ,'雕塑' ,'手工' ,'书法' ,'绘画' ,'魔术' ,'杂技' ,'房屋' ,'室内设计' ,'防火防盗' ,'园艺' ,'音乐喷泉' ,'展会' ,'民俗' ,'奇人' ,'世界之最' ,'未解之谜' ,'外星文明' ,'时空穿梭' ,'灵异事件' ,'风水玄说' ,'新产品' ,'新技术' ,'科学发现' ,'动物' ,'物理' ,'数学' ,'天文地理' ,'物质' ,'证券' ,'金融投资' ,'宏观经济' ,'产业经济' ,'房地产' ,'婚姻' ,'恋爱' ,'体疗' ,'食疗' ,'中医' ,'营养学' ,'医疗原理' ,'急救知识' ,'儿童健康' ,'儿童教育' ,'美食推荐' ,'吃播' ,'探店' ,'大胃王' ,'电影解说' ,'电影剪辑' ,'电视剧解说' ,'电视剧剪辑' ,'动漫解说' ,'动漫剪辑' ,'流浪' ,'品城' ,'暗访' ,'国外' ,'国内' ,'舞蹈种类(略)' ,'奥运会' ,'NBA' ,'世界杯' ,'优质' ,'翻唱' ,'反串' ,'合成' ,'乐器种类' ,'内衣秀' ,'旗袍秀' ,'时装秀')
  69. WHERE level = 2
  70. GROUP by a.id
  71. ;
  72. --每个视频的各种状态
  73. DROP TABLE IF EXISTS every_video_status_category ;
  74. CREATE TABLE every_video_status_category AS
  75. SELECT a.video_id as videoid
  76. ,视频审核状态 as video_edit
  77. ,视频的数据状态 as video_data_stat
  78. ,视频可搜状态 as video_recommend
  79. ,视频种类 as video_category
  80. FROM (
  81. SELECT video_id
  82. ,(
  83. CASE WHEN audit_status=1 THEN '审核中'
  84. WHEN audit_status=2 THEN '不通过'
  85. WHEN audit_status=3 THEN '待修改'
  86. WHEN audit_status=4 THEN '自己可见'
  87. WHEN audit_status=5 THEN '通过'
  88. END
  89. ) AS 视频审核状态
  90. ,(
  91. CASE WHEN video_status=1 THEN '有效' --公开
  92. WHEN video_status=2 THEN '已删除'
  93. WHEN video_status=3 THEN '已屏蔽'
  94. WHEN video_status=4 THEN '关注可见'
  95. WHEN video_status=5 THEN '分享可见'
  96. WHEN video_status=6 THEN '自己可见'
  97. END
  98. ) AS 视频的数据状态
  99. ,(
  100. CASE WHEN recommend_status=0 THEN '不可搜'
  101. WHEN recommend_status=-6 THEN '待推荐'
  102. WHEN recommend_status=1 THEN '普通推荐' --普通推荐,编辑推荐都是推荐
  103. WHEN recommend_status=10 THEN '编辑推荐'
  104. WHEN recommend_status=-7 THEN '可搜索'
  105. END
  106. ) AS 视频可搜状态
  107. FROM videoods.wx_video_status
  108. ) a
  109. FULL OUTER JOIN (
  110. SELECT video_id
  111. ,(
  112. CASE WHEN category_id=1 THEN '内容'
  113. WHEN category_id=2 THEN '场景'
  114. WHEN category_id=3 THEN '工具'
  115. WHEN category_id=4 THEN '未分类'
  116. WHEN category_id=5 THEN '原创内容'
  117. WHEN category_id=6 THEN '转载内容'
  118. END
  119. ) AS 视频种类
  120. ,row_number() over(partition by video_id order by id desc) as rn
  121. FROM videoods.wx_video_category_info
  122. ) b
  123. ON a.video_id = b.video_id
  124. AND b.rn = 1
  125. ;
  126. --赞赏总金额和赞赏人数、被赞赏视频数
  127. DROP TABLE IF EXISTS total_reward_video ;
  128. CREATE TABLE total_reward_video AS
  129. SELECT video_id AS videoid
  130. ,SUM(reward_amount)/100 AS total_reward --赞赏总金额
  131. ,coalesce(
  132. SUM(
  133. CASE WHEN FROM_UNIXTIME(CAST( create_time/ 1000 AS BIGINT) )='${bizdate}' THEN reward_amount
  134. END
  135. )
  136. ,0
  137. )/100 AS currentday_reward --当日赞赏金额
  138. ,COUNT(1) AS total_reward_times --赞赏次数
  139. ,COUNT(DISTINCT uid) AS reward_person --赞赏人数
  140. FROM videoods.wx_video_reward_record
  141. GROUP BY video_id
  142. ;
  143. --付费数据
  144. DROP TABLE IF EXISTS total_price_video ;
  145. CREATE TABLE total_price_video AS
  146. SELECT video_id AS videoid
  147. ,SUM(price) AS total_price --付费总金额
  148. ,coalesce(
  149. SUM(
  150. CASE WHEN FROM_UNIXTIME(CAST( gmt_payment_timestamp/ 1000 AS BIGINT) )='${bizdate}' THEN price
  151. END
  152. )
  153. ,0
  154. ) AS currentday_price --当日付费金额
  155. ,COUNT(1) AS total_price_times --付费次数
  156. ,COUNT(DISTINCT uid) AS total_price_person --付费人数
  157. FROM videoods.wx_video_purchase_record
  158. GROUP BY video_id
  159. ;
  160. -- 新增视频类型判别
  161. DROP TABLE if_create_video;
  162. CREATE TABLE IF NOT EXISTS if_create_video AS
  163. SELECT DISTINCT
  164. id
  165. ,(CASE WHEN t2.video_id IS NULL THEN '上传视频'
  166. WHEN t2.video_id IS NOT NULL THEN '创作视频'
  167. END ) if_create
  168. ,if_change
  169. ,(CASE WHEN t2.from_scene=2 THEN '创作工具' WHEN t2.from_scene=3 THEN '普通上传转创作工具'
  170. WHEN t2.from_scene=4 THEN '后台转加工' WHEN t2.from_scene=5 THEN '卡点视频' END ) video_type
  171. FROM
  172. (SELECT
  173. id
  174. FROM
  175. videoods.wx_video
  176. ) t1
  177. LEFT JOIN
  178. (SELECT
  179. video_id,from_scene
  180. FROM
  181. videoods.produce_video_project
  182. ) t2
  183. ON t1.id=t2.video_id
  184. LEFT JOIN
  185. (SELECT pvp.video_id,
  186. (CASE
  187. WHEN pvp.parent_project_id is not null and pvp.uid!=pvp_parent.uid THEN '再创作'
  188. WHEN pvp.parent_project_id IS NOT NULL AND pvp.uid=pvp_parent.uid THEN '再编辑' END ) if_change
  189. FROM videoods.produce_video_project pvp
  190. JOIN videoods.produce_video_project pvp_parent
  191. ON CAST (pvp.parent_project_id AS STRING ) = pvp_parent.project_id
  192. JOIN videoods.wx_video
  193. ON pvp.video_id = wx_video.id
  194. UNION ALL
  195. SELECT pvp.video_id,'原创'
  196. FROM videoods.produce_video_project pvp
  197. JOIN videoods.wx_video
  198. ON pvp.video_id = wx_video.id
  199. WHERE pvp.parent_project_id IS NULL
  200. ) t3
  201. ON t1.id=t3.video_id
  202. ;
  203. --CREATE TABLE dim_video AS
  204. INSERT OVERWRITE TABLE dim_video
  205. SELECT a1.videoid --视频id
  206. ,a1.title --视频标题
  207. ,distrubute_title --视频分发标题
  208. ,video_category --视频种类
  209. ,a3.tag_name --视频一级分类
  210. ,a1.gmt_create --上传时间
  211. ,tags --视频标签
  212. ,a1.uid --生产者id
  213. ,video_edit --视频审核状态
  214. ,video_data_stat --视频的数据状态
  215. ,video_recommend --视频可搜状态
  216. ,CASE WHEN a7.cover_img_path IS NULL THEN '无'
  217. ELSE '有'
  218. END AS is_img --视频分发封面
  219. ,(
  220. UNIX_TIMESTAMP(datetrunc(GETDATE(), "DD"))-UNIX_TIMESTAMP(a1.gmt_create)
  221. )/(60*60*24) AS existence_days --发布距今天数
  222. ,concat(
  223. 'https://admin.yishihui.com/cms/post-detail/'
  224. ,a1.videoid
  225. ,'/info'
  226. ) AS video_url --后台视频链接
  227. ,a1.total_time --视频时长
  228. ,coalesce(a1.play_count,0) play_count --播放人数
  229. ,coalesce(a1.play_count_total,0) play_count_total --播放次数
  230. ,coalesce(total_reward,0) total_reward --赞赏总金额
  231. ,coalesce(currentday_reward,0) currentday_reward --当日赞赏金额
  232. ,coalesce(total_reward_times,0) total_reward_times --赞赏次数
  233. ,coalesce(reward_person,0) reward_person --赞赏人数
  234. ,coalesce(total_price,0) total_price --付费总金额
  235. ,coalesce(currentday_price,0) currentday_price --当日付费金额
  236. ,coalesce(total_price_times,0) total_price_times --付费次数
  237. ,coalesce(total_price_person,0) total_price_person --付费人数
  238. ----------------------------------新增----------------------------------
  239. ,app_recommend_status --app推荐状态
  240. ,charge --收费状态
  241. ,CASE WHEN a10.video_id IS NULL THEN '未加密'
  242. ELSE '加密'
  243. END AS is_pwd --是否加密
  244. ,width --视频宽度
  245. ,height --视频高度
  246. ----------------------------------新增2---------------------------------
  247. ,a11.tag_name as tag_name2 --二级标签
  248. ,a12.tag_name as tag_name3 --三级标签
  249. ---------------------------------新增3----------------------------------
  250. ,a13.if_create --是否为创作视频
  251. ---------------------------------新增4----------------------------------
  252. ,a13.if_change
  253. ,a9.app_type
  254. ,a9.descr
  255. ,a13.video_type
  256. ,a14.if_in_youthCommunity
  257. ,a14.if_in_agedCommunity
  258. ,a15.name
  259. FROM (
  260. SELECT id AS videoid
  261. ,uid
  262. ,title
  263. ,play_count
  264. ,play_count_total
  265. ,total_time
  266. ,gmt_create
  267. ,width
  268. ,height
  269. FROM videoods.wx_video
  270. ) a1
  271. LEFT JOIN ( --视频标签
  272. SELECT a.video_id
  273. ,concat_ws(',', collect_set(b.tag_name)) AS tags
  274. FROM (
  275. SELECT video_id
  276. ,tag_id
  277. FROM videoods.wx_video_tag_rel
  278. ) a
  279. LEFT JOIN (
  280. SELECT tag_id
  281. ,tag_name
  282. FROM videoods.wx_video_tag
  283. ) b
  284. ON a.tag_id = b.tag_id
  285. GROUP BY video_id
  286. ) a2
  287. ON a1.videoid = a2.video_id LEFT
  288. JOIN ( --每个视频的一级分类
  289. SELECT videoid
  290. ,tag_name
  291. FROM videoid_top_tag_name
  292. ) a3
  293. ON a1.videoid = a3.videoid
  294. LEFT JOIN ( --每个视频的各种状态
  295. SELECT videoid
  296. ,video_edit
  297. ,video_data_stat
  298. ,video_recommend
  299. ,video_category
  300. FROM every_video_status_category
  301. ) a4
  302. ON a1.videoid = a4.videoid LEFT
  303. JOIN ( --赞赏总金额和赞赏人数、被赞赏视频数
  304. SELECT videoid
  305. ,total_reward
  306. ,currentday_reward
  307. ,total_reward_times
  308. ,reward_person
  309. FROM total_reward_video
  310. ) a5
  311. ON a1.videoid = a5.videoid
  312. LEFT JOIN ( --付费数据
  313. SELECT videoid
  314. ,total_price
  315. ,currentday_price
  316. ,total_price_times
  317. ,total_price_person
  318. FROM total_price_video
  319. ) a6
  320. ON a1.videoid = a6.videoid LEFT
  321. JOIN ( --分发标题
  322. SELECT video_id
  323. ,title AS distrubute_title
  324. ,cover_img_path
  325. FROM videoods.wx_video_recommend_ext
  326. ) a7
  327. ON a1.videoid = a7.video_id
  328. LEFT JOIN ( --app推荐
  329. SELECT video_id
  330. ,(
  331. CASE WHEN app_recommend_status=-1 THEN '未分类'
  332. WHEN app_recommend_status=0 THEN '不可搜'
  333. WHEN app_recommend_status=-7 THEN '可搜索'
  334. WHEN app_recommend_status=1 THEN '普通推荐' --有app推荐
  335. WHEN app_recommend_status=-6 THEN '待推荐'
  336. WHEN app_recommend_status=10 THEN '编辑推荐'
  337. WHEN app_recommend_status=20 THEN '实时推荐'
  338. END
  339. ) AS app_recommend_status --app推荐状态
  340. FROM videoods.wx_video_status
  341. ) a8
  342. ON a1.videoid = a8.video_id LEFT
  343. JOIN ( --是否免费
  344. SELECT video_id
  345. ,CASE WHEN charge=0 THEN '免费'
  346. WHEN charge=1 THEN '收费'
  347. END AS charge
  348. ,app_type
  349. ,descr
  350. FROM videoods.wx_video_detail
  351. ) a9
  352. ON a1.videoid = a9.video_id
  353. LEFT JOIN ( --是否加密
  354. SELECT video_id
  355. FROM wx_video_pwd
  356. ) a10
  357. ON a1.videoid = a10.video_id LEFT
  358. JOIN videoid_second_tag_name a11 --二级标签
  359. ON a1.videoid = a11.videoid
  360. LEFT JOIN videoid_third_tag_name a12 --三级标签
  361. ON a1.videoid = a12.videoid
  362. LEFT JOIN if_create_video a13
  363. ON a1.videoid=a13.id
  364. LEFT JOIN (
  365. SELECT video_id
  366. ,CONCAT_WS(
  367. ','
  368. ,collect_set(
  369. CASE WHEN repository_type=1 AND data_status=1 THEN '进入青年社区'
  370. WHEN repository_type=1 AND data_status=0 THEN '未进入青年社区'
  371. END
  372. )
  373. ) if_in_youthCommunity
  374. ,CONCAT_WS(
  375. ','
  376. ,collect_set(
  377. CASE WHEN repository_type=0 AND data_status=1 THEN '进入老年社区'
  378. WHEN repository_type=0 AND data_status=0 THEN '未进入老年社区'
  379. END
  380. )
  381. ) if_in_agedCommunity
  382. FROM videoods.video_repository_type
  383. GROUP BY video_id
  384. ) a14
  385. ON a1.videoid=a14.video_id
  386. LEFT JOIN
  387. (SELECT
  388. t1.video_id,t2.name
  389. FROM
  390. videoods.video_topic t1 LEFT JOIN videoods.topic t2
  391. ON t1.topic_id=t2.id
  392. WHERE t1.data_status=1
  393. ) a15
  394. ON a1.videoid=a15.video_id
  395. ;