檢視某個分割槽之前所有的資料 騰訊大資料面試真題彙總

2021-10-16 03:47:51 字數 3984 閱讀 3062

1)筆試部分

(1)有一表名t_sh_mtt_netdisk_log,從表名可以看出該表是什麼業務的,是什麼週期粒度的表。

(2)怎麼檢視表結構,表建立語句?怎麼檢視表有哪些分割槽?怎麼檢視分割槽對應hdfs路徑?怎麼計算某個分割槽的資料量大小?怎麼計算某個分割槽的檔案總數?

(3)有一hive sql,怎麼計算這個sql會產生多少個map數?

(4)怎麼檢視hive有什麼自帶函式?怎麼檢視函式的詳細資訊?

(5)hive支援哪些基本資料型別?

(6)請指出下面兩個語句讀取分割槽ds資料的不同

select * from t where ds=20150101 and province='gd' or province='ex'

select x fromt where ds 20150101 and(province='gd' or province='ex')

(7)將字串"keyl=valuel&key2=value2...keyn=valuen"進行分割放到乙個字段裡面,可以查出任意乙個keyx對應的valuex值。請寫出查詢語句,並計算總共有多少個key值。

(8)用乙個字串比如"alblc"來測試某個函式比如split(用|分隔符將字串進行分割)的語句

(9)a表和b表內連線,a表為小表,只有2000行記錄

select a.*from a join b on a.key=b.key

可以進行怎樣的優化

(10)a表left join b表,b表為小衣,可以進行怎樣優化?

scleet a.*from a left join join b ona.key=b.key

如果a為小表,可以怎樣優化?

(11)請指出下面sql語句的區別

select a.* from a left join b on a.key = b.key and a.ds=*** and b.ds=***

sclect a.* from a lef join b on a.key = b.key and b.ds=***

select a.* from a lef join b on a.key = b.key and b.ds=*** where a.ds=***

select a.* from a left join b on a.key = b.key where a.ds=*** and b.ds=***

(12)多表連按的寫法:a,.b,c三個表內連線,連線欄位都是key,怎樣寫連線語句?

(13)兩大表連線,發生了資料傾斜,有幾個reduce無法完成,怎麼查詢發生資料傾斜的原因?應該怎樣優化?

語句:select t1.*,nvl(t2.x,1) from t1 left join t2 on t1.guid=t2.guid

(14)兩大表連線,發生了資料傾斜。有乙個reduce無法完成,檢直發現t1中guid="的記錄有很多,其他guid都不重複,這條語句該怎樣優化?

語句:select t1.*,nvl(t2.x,1) from t1 left join t2 on t1.guid = t2.guid

(15)如何用hive q!實現sql中的exist/in 子句

mysql語句如下:

sel ect a* from a where a.key in(select dstinct key from b where key like 『filter%』)

(16)sort by、distribute by、cluster by 和 order by 區別

1)筆試題

用hivesql實現

(1)全量使用者登員日誌表t_login_all,字段資訊ftime(登入日期)、openid(登入帳號)新增使用者登入日誌表t_login_new,字段資訊ftime(登入日期)、openid(登入帳號)求每天新增使用者次日、7天、30天留存率。

(說明:7天留存是指當天有登入且第7天還登入的使用者)

(2)訊息流水表t_chat all,字段資訊:

ftime(日期)、send_user id(發訊息使用者id)、receive.user id(接收訊息使用者id)、chat id(訊息id)、send.time(發訊息時間)

使用者登入流水日誌表t_login_all,字段資訊:

ftime(日期)、user_id(使用者id)、login_id(登入id)、login_loc(登入區服)、login_time(登入時間)

求:每天有收發訊息使用者最近登入時間、登入區服,輸出ftime,user_id,login_loc,login_time

用spark core實現,寫scala指令碼

1、reducebykey()、groupbykey()有什麼區別?

2、dataframe和rdd有什麼區別?

3、使用累加器,對陣列array(1,2,3,4)每個元素實現累加操作,最後列印輸出求和結果。

4、現有檔案file.txt,檔案格式如下

order_id,user_id,payment,productid

1、1768,50,155

2、1218,600,211

3、2239,788,242

4、3101,288,599

5、4899,25,230

6、2311,890,981

求top10個payment欄位的值

1)技術部分

(1)我看你上面寫了你會spark,那你用spark寫一下剛剛那道題的**(第6題),不能用spark sql

(2)我看你上面有寫到熟悉hive原理和優化,你說一下怎麼優化

(3)優化有說到語句優化,然後又說回到pv和uv那個問題,假如說讓你優化你怎麼優化(我**裡面有count(distinct id) uv,)

(4)問了一些kafka的,我只記得一點點,問我資料會不會重複消費,什麼情況下會重複消費

(5)在hive執行語句的時候如果很慢,什麼原因造成

我有提到資料傾斜的問題,他又問怎麼解決資料傾斜

2)專案部分

(1)讓你挑乙個比較有亮點的專案詳細說

(2)你負責了什麼,數倉中統計了哪些指標,

(3)剛剛聽你說專案裡面有提到分層,如果我要你求每天商品的pv,uv,從ods層到dm層它的具體流向,各層都統計了什麼(後來讓寫求pv,uv的sql語句)

3)場景部分

(1)有乙個分割槽表,表名t,欄位qq,age,按天分割槽,讓寫出建立表的語句

(2)剛剛的分割槽表,求20200221這個分割槽中,年齡第n大的qq號列表

(3)有乙個表,兩個字段,分別是qqa和qqb,資料如下:

12,34

12,56

12,78

34,56

34,12

找出所有互相關注的qq對

4)手寫部分

(1)三個字段,timestamp,user_id,product_id,讓求pv最大的商品,寫了之後又叫用scala**寫一遍,然後又問,假如說只讓你求pv數大於100的top3呢,**又怎麼寫

1)技術部分

(1)你們數倉用什麼建模方法,說出常見的建模方法?

(2)維度建模有什麼好處? 為什麼選擇這個?比如最後業務需求要增加乙個維度,我們需要做什麼工作?

(3)怎麼判斷乙個需求能不能實現,你們的判斷標準是什麼?需求變更要做什麼

(4)增加乙個維度後發現查詢的速度變得非常慢,是什麼原因導致的?

(5)你們ads層的資料量每天的資料量有多大?ads層在mysql中的表是怎麼建立的?有什麼注意事項?索引怎麼建立的?

(6)你知道spark的寬窄依賴嗎? 有沒有把寬依賴轉化為窄依賴的例子?

(7)spark引數調優做了些什麼 ?

2)演算法部分

(1)乙個list [1,5,5,7,9] 去重,並計算時間空間複雜度

(2)單鏈表的反轉

Oracle中檢視系統所有的表和所有的字段

獲取表 select table name from user tables 當前使用者擁有的表 select table name from all tables 所有使用者的表 select table name from dba tables 包括系統表 select table name f...

檢視域中所有的使用者

前言 我們在新增域使用者時,有時會有使用者沒有新增,或者已新增的使用者名稱拼寫錯誤。這時,我們想查一下目前域中所有的使用者,使用如下命令。net user domain 其他一些命令 查詢域管理員使用者 net group domain admins domain 查詢域使用者 net user d...

關於檢視所有的svn命令

想要檢視svn的所有命令和命令的簡寫,可以使用下面命令 svn help root onlineyx02 svn help 用法 svn options args subversion 命令列客戶端,版本 1.6.11。使用 svn help 顯示子命令的幫助資訊。使用 svn version 檢視...