1. 程式人生 > >實習專案之(二)APP熱點標籤分析

實習專案之(二)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!

---------------------------謹以此部落格作為自己的學習記錄,如有發現問題之處,歡迎指正。