實習專案之(二)APP熱點標籤分析
APP熱點標籤分析
專案角色: 核心研發 開發組人員: 1
工作內容:
通過hive資料倉庫,hivesql語句和udf/udaf/udtf對海量資料完成統計分析,找到熱度標籤,通過熱度標籤能夠提高APP的下載量和使用量
一、主要過程基本點
1.資料倉庫工作的四大法寶,四層專案目錄要建好
(1)config:設定配置引數,這個裡面只是涉及到了hive的引數設定
檔名稱(set_env.sh)
內容:
(2)create:建立表使用的sql語句的儲存檔案
1.建立相應的輸入輸出表
標準格式兄弟
(3)deal:
1.載入到初始表的語句
2.載入到結果表即output表的sh檔案
3.定義一個main.sh來依次執行這些sh檔案
首先,上面的兩個過程已經分別驗證並通過
接下來,看看總的執行指令碼咋寫
小專案,也好寫,總而言之一句話,建表導資料完了!
二、遇到的問題
1.移動檔案
為啥第一次顯示許可權不夠,第二次加上./就行了呢
結論:要不就啥都不加,要加不能加個/上去
/ 根目錄
~代表你的/home/使用者明目錄
2.sh檔案中第一行 #! /bin/sh和 #! /bin/bash的區別
(1) sh 一般設成 bash 的軟鏈 (symlink)
(2) 在一般的 linux 系統當中(例外如 FreeBSD,OpenBSD 等),使用 sh 呼叫執行指令碼相當於打開了bash 的 POSIX 標準模式
(3) 也就是說 /bin/sh 相當於 /bin/bash --posix
所以,它們之間的各種差異都是來自 POSIX 標準模式 和 bash 的差異,比如 用 : 擷取字串,不能用 let , 遇錯中斷 等等,在使用時需要注意。
3.載入本地資料到hive表中
load data local inpath inpathname overwrite into table tbname;
4.向輸出表輸出資料(即將一個表的查詢結果輸出到另一個表中)
insert into tb outputtb
select tag,count(1) as rank from inputtb lateral view explode(split(tags,','))
tags_table as tag where tag!=' ' and tag!='-' group by tag order by
rank desc limit 20;
count(1)的用法:
索性擴充一下:SQL裡的count(*)、count(1)、count(column_name)的區別
1、主要區別
1)count(*)所有行進行統計,包含值為null的行。
2)count(column)會對指定列具有的行數進行統計,除去值為NULL的行。
3)count(1)與count(*) 的效果是一樣的。
2、效能問題
1)In any case,SELECT COUNT(*) FROM tablename is the best choice.
2)儘量減少SELECT COUNT(*) FROM tablename WHERE COL = 'value' 這種查詢。
3)最好不要使用SELECT COUNT(COL) FROM tablename WHERE COL2='value' 這種查詢。
注意:
如果表沒有主鍵,那麼count(1)比count(*)快。
如果表只有一個欄位,count(*)最快。
5.關於sql中的drop、truncate、delete的區別
1、drop刪除的是整個表,而delete和truncate刪除的是表中的資料
2、delete刪除的資料會在log日誌中儲存,truncate刪除的資料不會在log日誌中儲存
3、刪除速度:drop>truncate>delete
4、truncate只能刪除table中的資料,而delete既可以刪除table中的資料,也可以刪除索引
5、對於foreign key約束的引用表,不能使用truncate table,而應該使用不帶where子句的delete語句
此外需要注意的是:hive中沒有delete操作、update也沒有
----把自己做過的專案又整體回顧了一遍,真好
---------後續待繼續學習補充,
Aupa Atleti!
---------------------------謹以此部落格作為自己的學習記錄,如有發現問題之處,歡迎指正。