hive 操作

第一節(jié):

hive作為大數(shù)據(jù)中重要組成的一部分湖苞,它是基于Hadoop的映射數(shù)據(jù)庫表,其提供的Hue可以將簡單的HQL語句轉(zhuǎn)化為MapReduce任務(wù)執(zhí)行吗浩,大大簡化了學(xué)習(xí)成本揩页;HQL大體上和SQL相同,只是有少部分sql語句在hql上兼容不好速缆,具體出現(xiàn)的錯(cuò)誤日后再行補(bǔ)上降允。

基礎(chǔ):

創(chuàng)建數(shù)據(jù)庫:Create database ?test;

創(chuàng)建數(shù)據(jù)表:Create table if not exists test(id int comment ‘序列號(hào)', name string comment ‘姓名', ?age string comment?‘年齡', sex string comment '性別'….)?ROW?FORMAT?DELIMITED?FIELDS?TERMINATED?BY?‘,’ ?# ?設(shè)置列分割符為’,’,為后面導(dǎo)入hdfs的csv文件作準(zhǔn)備; ?

? ? 3.修改數(shù)據(jù)表結(jié)構(gòu): alter table test addcolumns(address ?string); # 增加表列

修改表名稱:alter table test rename to tt ;

修改列:ALTER TABLE test change name new_name string;?

刪除列 : alter table test drop name;

刪除表:drop table test ;

去除導(dǎo)入數(shù)據(jù)的第一行或最后一行:create table test(id int, name string) TBLPROPERTIES('skip.header.line.count’=‘*’/?‘skip.footer.line.count'=‘*') # 去除首/尾 *行;

上傳文件到HDFS:

?? ?1. 將本地?cái)?shù)據(jù)push到hdfs艺糜, hdfs?dfs -put localfile_path remote_filepath;

2. 在hue上執(zhí)行LOAD?DATA?INPATH?‘remote_filepath’[overwrite]INTO?TABLE?text; # 將hdfs的文件導(dǎo)入到hive中剧董;

?注:如果導(dǎo)入數(shù)據(jù)出現(xiàn)Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive, 可能是hdfs文件權(quán)限問題破停; 解決方案:hdfs dfs -chomd 777 ?filename (文件在hdfs的路徑);load data local?inpath指的直接從本地文件中加載翅楼,先將本地文件拷貝到hdfs,然后再使用真慢;overwrite 是將原先表的數(shù)據(jù)進(jìn)行覆蓋? ?3. select count(*) from test; ?# 查詢記錄毅臊,驗(yàn)證數(shù)據(jù)是否導(dǎo)入成功;

? ? 4.Select * from test limit 10;

5.SELECT?DISTINCT('columns_name')?from?test;

在有了全量表之后黑界,需要將全量表根據(jù)業(yè)務(wù)拆分為多張子表的需求時(shí)管嬉,可以根據(jù)字表的字段從全表中的數(shù)據(jù)選擇性導(dǎo)入相應(yīng)的數(shù)據(jù),例如:

create table if not exists test1(id int comment?‘ID號(hào)’, name string comment '姓名’);

Insert overwrite table test1 select id, name from test; <一條一條數(shù)據(jù)插入效率很慢>

Create table if not exists test2 as select name from test; <復(fù)制非分區(qū)表>

如果是分區(qū)表朗鸠,先要復(fù)制表結(jié)構(gòu): create table test3 like test; 之后將分區(qū)數(shù)據(jù)拷貝到對(duì)應(yīng)的目錄下:dfs -cp -f /user/hive/warehouse/test/*?/user/hive/warehouse/test3/; 最后同步信息 msck repair ?table test3;

上面所講的所謂的內(nèi)部表蚯撩,還有一種叫做外部表,例如:

create?external table if not exists ex_test(id int, name string, sex string) partitioned by(birth string) row format?delimited fields terminated by?‘\t’ location?‘file_path’<文件在hdfs路徑>

注:如果沒有指定location,則會(huì)在/usr/hive/warehouse/建立一個(gè)表目錄烛占,之后將hdfs的數(shù)據(jù)移動(dòng)到該目錄下求厕;

外部表和內(nèi)部表的區(qū)別:內(nèi)部表是將hdfs移動(dòng),當(dāng)內(nèi)部表刪除之后扰楼,對(duì)應(yīng)的數(shù)據(jù)也會(huì)被刪除呀癣,而外部表則是刪除之后,其數(shù)據(jù)還在指定的目錄中弦赖;

Hive數(shù)據(jù)存儲(chǔ)方式:1.Txtfile<默認(rèn)项栏,不壓縮>; 2.sequencefile<二進(jìn)制文件支持,壓縮類型None蹬竖,Record沼沈,Block>; 3.RcFile(直接對(duì)數(shù)據(jù)進(jìn)行分開流酬,保證同一個(gè)record在一個(gè)塊上,加載開銷大列另,但是壓縮比大芽腾,查詢響應(yīng)快,推薦使用)页衙;4.Orcfile<后出來的>

第二節(jié):

hive的分區(qū)操作摊滔,因?yàn)閔ive在大規(guī)模的數(shù)據(jù)中進(jìn)行查詢相關(guān)操作,適當(dāng)?shù)姆謪^(qū)有助于提升查詢數(shù)據(jù)的效率店乐;

例如創(chuàng)建一個(gè)test表:

Create table if not exists test(id int, name string) partitioned by( sex string) row format delimited fields terminated by ‘,’ ;

根據(jù)性別sex進(jìn)行分區(qū)艰躺,分區(qū)類似于將數(shù)據(jù)放在不同的文件夾下,因而在hive進(jìn)行數(shù)據(jù)查找時(shí)可以根據(jù)where條件分區(qū)查找而不用進(jìn)行全表掃描眨八,從而提高效率腺兴;但也不是分區(qū)越多越好;由于分區(qū)對(duì)應(yīng)的是hdfs上一個(gè)個(gè)小文件廉侧,當(dāng)小文件過多页响,會(huì)導(dǎo)致mapper任務(wù)越多,從而導(dǎo)致初始化任務(wù)消耗資源過多段誊,影響性能拘泞;而且hive的創(chuàng)建文件數(shù)有限制,太多分區(qū)可能超出限制導(dǎo)致出錯(cuò)枕扫;總之要根據(jù)實(shí)際的需求創(chuàng)建分區(qū)陪腌;

添加一個(gè)或多個(gè)分區(qū):alter table test add partition(brith=’1992’), partition(birth=‘1995’),..;

刪除分區(qū):alter table test drop partition(birth=’1992’);

查看分區(qū):show partitions test;

重命名分區(qū): alter table test partition(birth=’1992’) rename to partition(birth=‘1995’);

同步hdfs的分區(qū)信息:msck repairtable test;

分桶表 == MapReduce分區(qū):

將表按照字段列進(jìn)行劃分并排序;

Create table if not exists test(id int, name string, sex string) clustered by(id) sorted by (name string) into 4 buckets row format delimited fields terminated by ‘\t’ stored as textfile;

插入數(shù)據(jù):

insert table 桶表名 select * from table **;

常用的內(nèi)置方法:

Case when ‘’ then ‘’ else '' end ;

Select id, case when num>100 then ‘0-99’ when num<1000 then ‘100-1000’ else ‘>1000’ end from table_name ;

等同于: select id from table_name ?where num<100 ; &&?select id from table_name ?where num>100 and num<1000; &&?select id from table_name ?where num>1000;

If (單個(gè)條件判斷):

SELECT title, if(num>100,0,1) as n,num from car_back LIMIT 10;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烟瞧,一起剝皮案震驚了整個(gè)濱河市诗鸭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌参滴,老刑警劉巖强岸,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異砾赔,居然都是意外死亡蝌箍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門暴心,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妓盲,“玉大人,你說我怎么就攤上這事专普∶醭模” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵檀夹,是天一觀的道長筋粗。 經(jīng)常有香客問我策橘,道長,這世上最難降的妖魔是什么娜亿? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任丽已,我火速辦了婚禮,結(jié)果婚禮上买决,老公的妹妹穿的比我還像新娘沛婴。我一直安慰自己,他們只是感情好策州,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宫仗,像睡著了一般够挂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上藕夫,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天孽糖,我揣著相機(jī)與錄音,去河邊找鬼毅贮。 笑死办悟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的滩褥。 我是一名探鬼主播病蛉,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瑰煎!你這毒婦竟也來了铺然?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤酒甸,失蹤者是張志新(化名)和其女友劉穎魄健,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體插勤,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沽瘦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了农尖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片析恋。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盛卡,靈堂內(nèi)的尸體忽然破棺而出绿满,到底是詐尸還是另有隱情,我是刑警寧澤窟扑,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布喇颁,位于F島的核電站漏健,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏橘霎。R本人自食惡果不足惜蔫浆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姐叁。 院中可真熱鬧瓦盛,春花似錦、人聲如沸外潜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽处窥。三九已至嘱吗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滔驾,已是汗流浹背谒麦。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哆致,地道東北人绕德。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像摊阀,于是被迫代替她去往敵國和親耻蛇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容