HiveSQL數(shù)據(jù)操控、查詢語言(DML、DQL)_第1頁
HiveSQL數(shù)據(jù)操控、查詢語言(DML、DQL)_第2頁
HiveSQL數(shù)據(jù)操控、查詢語言(DML、DQL)_第3頁
HiveSQL數(shù)據(jù)操控、查詢語言(DML、DQL)_第4頁
HiveSQL數(shù)據(jù)操控、查詢語言(DML、DQL)_第5頁
已閱讀5頁,還剩124頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

HiveSQL數(shù)據(jù)操控、查詢語言(DML、DQL)HiveSQL-DML-Load加載數(shù)據(jù)HiveSQL-DML-Insert插入數(shù)據(jù)HiveTransaction事務(wù)表HiveSQL-DML-Update、Delete更新、刪除數(shù)據(jù)HiveSQL-DQL-Select查詢數(shù)據(jù)HiveSQLJoin連接操作掌握HiveLoad加載數(shù)據(jù)的方式掌握Insert語法在Hive中的使用掌握多重插入、動(dòng)態(tài)分區(qū)插入、數(shù)據(jù)導(dǎo)出理解Hive中事務(wù)的支持、事務(wù)表創(chuàng)建使用了解Hive中更新、刪除語法重點(diǎn)掌握HiveSelect查詢語法掌握Hive中join操作HiveSQL-DML-Load加載數(shù)據(jù)01HiveLoad功能與語法規(guī)則練習(xí):使用Load加載數(shù)據(jù)到表中Hive3.0Load新特性在Hive中建表成功之后,就會(huì)在HDFS上創(chuàng)建一個(gè)與之對(duì)應(yīng)的文件夾,且文件夾名字就是表名;文件夾父路徑是由參數(shù)hive.metastore.warehouse.dir控制,默認(rèn)值是/user/hive/warehouse;也可以在建表的時(shí)候使用location語句指定任意路徑。HiveSQL-DML-Load加載數(shù)據(jù)回顧不管路徑在哪里,只有把數(shù)據(jù)文件移動(dòng)到對(duì)應(yīng)的表文件夾下面,Hive才能映射解析成功;最原始暴力的方式就是使用hadoopfs–put|-mv等方式直接將數(shù)據(jù)移動(dòng)到表文件夾下;但是,Hive官方推薦使用Load命令將數(shù)據(jù)加載到表中。HiveSQL-DML-Load加載數(shù)據(jù)回顧Load英文單詞的含義為:加載、裝載;所謂加載是指:將數(shù)據(jù)文件移動(dòng)到與Hive表對(duì)應(yīng)的位置,移動(dòng)時(shí)是純復(fù)制、移動(dòng)操作。純復(fù)制、移動(dòng)指在數(shù)據(jù)load加載到表中時(shí),Hive不會(huì)對(duì)表中的數(shù)據(jù)內(nèi)容進(jìn)行任何轉(zhuǎn)換,任何操作。HiveSQL-DML-Load加載數(shù)據(jù)功能HiveSQL-DML-Load加載數(shù)據(jù)語法規(guī)則LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)]

LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)][INPUTFORMAT'inputformat'SERDE'serde'](3.0orlater)

filepath表示待移動(dòng)數(shù)據(jù)的路徑。可以指向文件(在這種情況下,Hive將文件移動(dòng)到表中),也可以指向目錄(在這種情況下,Hive將把該目錄中的所有文件移動(dòng)到表中)。filepath文件路徑支持下面三種形式,要結(jié)合LOCAL關(guān)鍵字一起考慮:相對(duì)路徑,例如:project/data1絕對(duì)路徑,例如:/user/hive/project/data1具有schema的完整URI,例如:hdfs://namenode:9000/user/hive/project/data1HiveSQL-DML-Load加載數(shù)據(jù)語法規(guī)則之filepath指定LOCAL,將在本地文件系統(tǒng)中查找文件路徑。若指定相對(duì)路徑,將相對(duì)于用戶的當(dāng)前工作目錄進(jìn)行解釋;用戶也可以為本地文件指定完整的URI-例如:file:///user/hive/project/data1。沒有指定LOCAL關(guān)鍵字。如果filepath指向的是一個(gè)完整的URI,會(huì)直接使用這個(gè)URI;如果沒有指定schema,Hive會(huì)使用在hadoop配置文件中參數(shù)指定的(不出意外,都是HDFS)。HiveSQL-DML-Load加載數(shù)據(jù)語法規(guī)則之LOCAL如果對(duì)HiveServer2服務(wù)運(yùn)行此命令本地文件系統(tǒng)指的是Hiveserver2服務(wù)所在機(jī)器的本地Linux文件系統(tǒng),不是Hive客戶端所在的本地文件系統(tǒng)。HiveSQL-DML-Load加載數(shù)據(jù)LOCAL本地是哪里?node1node2node3Hiveserver2metastoreBeelinelocalFSloaddatalocal如果使用了OVERWRITE關(guān)鍵字,則目標(biāo)表(或者分區(qū))中的已經(jīng)存在的數(shù)據(jù)會(huì)被刪除,然后再將filepath指向的文件/目錄中的內(nèi)容添加到表/分區(qū)中。HiveSQL-DML-Load加載數(shù)據(jù)語法規(guī)則之OVERWRITEHiveLoad功能與語法規(guī)則練習(xí):使用Load加載數(shù)據(jù)到表中Hive3.0Load新特性HiveSQL-DML-Load加載數(shù)據(jù)LoadDataFromLocalFSorHDFS1、練習(xí)LoadDataFromLocalFS2、練習(xí)LoadDataFromHDFS3、理解Local關(guān)鍵字的含義4、練習(xí)LoadDadaToPartitionTableLoadDataFromLocalFSorHDFS建表--step1:建表

--建表student_local用于演示從本地加載數(shù)據(jù)

createtablestudent_local(numint,namestring,sexstring,ageint,deptstring)rowformatdelimitedfieldsterminatedby',';

--建表student_HDFS用于演示從HDFS加載數(shù)據(jù)

createexternaltablestudent_HDFS(numint,namestring,sexstring,ageint,deptstring)rowformatdelimitedfieldsterminatedby',';

--建表student_HDFS_p用于演示從HDFS加載數(shù)據(jù)到分區(qū)表

createtablestudent_HDFS_p(numint,namestring,sexstring,ageint,deptstring)partitionedby(countrystring)rowformatdelimitedfieldsterminatedby',';

LoadDataFromLocalFSorHDFS加載數(shù)據(jù)--建議使用beeline客戶端可以顯示出加載過程日志信息

--step2:加載數(shù)據(jù)

--從本地加載數(shù)據(jù)數(shù)據(jù)位于HS2(node1)本地文件系統(tǒng)本質(zhì)是hadoopfs-put上傳操作

LOADDATALOCALINPATH'/root/hivedata/students.txt'INTOTABLEstudent_local;

--從HDFS加載數(shù)據(jù)數(shù)據(jù)位于HDFS文件系統(tǒng)根目錄下本質(zhì)是hadoopfs-mv移動(dòng)操作

--先把數(shù)據(jù)上傳到HDFS上hadoopfs-put/root/hivedata/students.txt/

LOADDATAINPATH'/students.txt'INTOTABLEstudent_HDFS;

從HDFS加載數(shù)據(jù)到分區(qū)表中并制定分區(qū)數(shù)據(jù)位于HDFS文件系統(tǒng)根目錄下

--先把數(shù)據(jù)上傳到HDFS上hadoopfs-put/root/hivedata/students.txt/

LOADDATAINPATH'/students.txt'INTOTABLEstudent_HDFS_ppartition(country="CHina");LoadDataFromLocalFSorHDFS加載數(shù)據(jù)日志信息HiveLoad功能與語法規(guī)則練習(xí):使用Load加載數(shù)據(jù)到表中Hive3.0Load新特性Hive3.0+,load加載數(shù)據(jù)時(shí)除了移動(dòng)、復(fù)制操作之外,在某些場(chǎng)合下還會(huì)將加載重寫為INSERTASSELECT。Hive3.0+,還支持使用inputformat、SerDe指定輸入格式,例如Text,ORC等。比如,如果表具有分區(qū),則load命令沒有指定分區(qū),則將load轉(zhuǎn)換為INSERTASSELECT,并假定最后一組列為分區(qū)列,如果文件不符合預(yù)期,則報(bào)錯(cuò)。HiveSQL-DML-Load加載數(shù)據(jù)Hive3.0新特性例子如下:本來加載的時(shí)候沒有指定分區(qū),語句是報(bào)錯(cuò)的,但是文件的格式符合表的結(jié)構(gòu),前兩個(gè)是col1,col2,最后一個(gè)是分區(qū)字段col3,則此時(shí)會(huì)將load語句轉(zhuǎn)換成為insertasselect語句。HiveSQL-DML-Load加載數(shù)據(jù)Hive3.0新特性hive3.0load命令新特性

CREATETABLEifnotexiststab1(col1int,col2int)

PARTITIONEDBY(col3int)

rowformatdelimitedfieldsterminatedby',';

LOADDATALOCALINPATH'/root/hivedata/tab1.txt'INTOTABLEtab1;

--tab1.txt內(nèi)容如下

11,22,1

33,44,2HiveSQL-DML-insert插入數(shù)據(jù)02Hive

Insert使用方式MultipleInserts多重插入DynamicPartitionInserts動(dòng)態(tài)分區(qū)插入InsertDirectory導(dǎo)出數(shù)據(jù)在MySQL這樣的RDBMS中,通常使用insert+values的方式來向表插入數(shù)據(jù),并且執(zhí)行速度很快。這也是RDBMS中表插入數(shù)據(jù)的核心方式。Hiveinsert使用方式背景:RDBMS中如何使用insertINSERTINTOtable_name(field1,field2,...fieldN)

VALUES

(value1,value2,...valueN);假如把Hive當(dāng)成RDBMS,用insert+values的方式插入數(shù)據(jù),會(huì)如何?執(zhí)行過程非常非常慢,原因在于底層是使用MapReduce把數(shù)據(jù)寫入Hive表中試想一下,如果在Hive中使用insert+values,對(duì)于大數(shù)據(jù)環(huán)境一條條插入數(shù)據(jù),用時(shí)難以想象。Hiveinsert使用方式背景:RDBMS中如何使用insert--hive中insert+values

createtablet_test_insert(idint,namestring,ageint);

insertintotablet_test_insertvalues(1,"allen",18);Hive官方推薦加載數(shù)據(jù)的方式:清洗數(shù)據(jù)成為結(jié)構(gòu)化文件,再使用Load語法加載數(shù)據(jù)到表中。這樣的效率更高。但是并不意味insert語法在Hive中沒有用武之地。Hiveinsert使用方式insert+select表示:將后面查詢返回的結(jié)果作為內(nèi)容插入到指定表中,注意OVERWRITE將覆蓋已有數(shù)據(jù)。需要保證查詢結(jié)果列的數(shù)目和需要插入數(shù)據(jù)表格的列數(shù)目一致。如果查詢出來的數(shù)據(jù)類型和插入表格對(duì)應(yīng)的列數(shù)據(jù)類型不一致,將會(huì)進(jìn)行轉(zhuǎn)換,但是不能保證轉(zhuǎn)換一定成功,轉(zhuǎn)換失敗的數(shù)據(jù)將會(huì)為NULL。Hiveinsert使用方式insert+selectINSERTOVERWRITETABLEtablename1[PARTITION(partcol1=val1,partcol2=val2...)[IFNOTEXISTS]]select_statement1FROMfrom_statement;

INSERTINTOTABLEtablename1[PARTITION(partcol1=val1,partcol2=val2...)]select_statement1FROMfrom_statement;Hiveinsert使用方式insert+select--step1:創(chuàng)建一張?jiān)幢韘tudent

droptableifexistsstudent;

createtablestudent(numint,namestring,sexstring,ageint,deptstring)

rowformatdelimited

fieldsterminatedby',';

--加載數(shù)據(jù)

loaddatalocalinpath'/root/hivedata/students.txt'intotablestudent;

--step2:創(chuàng)建一張目標(biāo)表只有兩個(gè)字段

createtablestudent_from_insert(snoint,snamestring);

--使用insert+select插入數(shù)據(jù)到新表中

insertintotablestudent_from_insertselectnum,namefromstudent;

select*

fromstudent_insert1;Hive

Insert使用方式MultipleInserts多重插入DynamicPartitionInserts動(dòng)態(tài)分區(qū)插入InsertDirectory導(dǎo)出數(shù)據(jù)翻譯為多次插入,多重插入,其核心功能是:一次掃描,多次插入。語法目的就是減少掃描的次數(shù),在一次掃描中。完成多次insert操作。Hiveinsert使用方式multipleinserts多重插入multipleinserts

--當(dāng)前庫下已有一張表student

select*fromstudent;

--創(chuàng)建兩張新表

createtablestudent_insert1(snoint);

createtablestudent_insert2(snamestring);

--多重插入

fromstudent

insertoverwritetablestudent_insert1

selectnum

insertoverwritetablestudent_insert2

selectname;Hive

Insert使用方式MultipleInserts多重插入DynamicPartitionInserts動(dòng)態(tài)分區(qū)插入InsertDirectory導(dǎo)出數(shù)據(jù)對(duì)于分區(qū)表的數(shù)據(jù)導(dǎo)入加載,最基礎(chǔ)的是通過load命令加載數(shù)據(jù)。在load過程中,分區(qū)值是手動(dòng)指定寫死的,叫做靜態(tài)分區(qū)。dynamicpartitioninsert動(dòng)態(tài)分區(qū)插入背景createtablestudent_HDFS_p(Snoint,Snamestring,Sexstring,Sageint,Sdeptstring)partitionedby(countrystring)rowformatdelimitedfieldsterminatedby',';

--注意分區(qū)字段country的值是在導(dǎo)入數(shù)據(jù)的時(shí)候手動(dòng)指定的China

LOADDATAINPATH'/students.txt'INTOTABLEstudent_HDFS_ppartition(country="China");假如說現(xiàn)在有全球224個(gè)國(guó)家的人員名單(每個(gè)國(guó)家名單單獨(dú)一個(gè)文件),導(dǎo)入到分區(qū)表中,不同國(guó)家不同分區(qū),如何高效實(shí)現(xiàn)?使用load語法導(dǎo)入224次?dynamicpartitioninsert動(dòng)態(tài)分區(qū)插入再假如,現(xiàn)在有一份名單students.txt,內(nèi)容如下;要求創(chuàng)建一張分區(qū)表,根據(jù)最后一個(gè)字段(選修專業(yè))進(jìn)行分區(qū),同一個(gè)專業(yè)的同學(xué)分到同一個(gè)分區(qū)中,如何實(shí)現(xiàn)?dynamicpartitioninsert動(dòng)態(tài)分區(qū)插入背景動(dòng)態(tài)分區(qū)插入指的是:分區(qū)的值是由后續(xù)的select查詢語句的結(jié)果來動(dòng)態(tài)確定的。根據(jù)查詢結(jié)果自動(dòng)分區(qū)。dynamicpartitioninsert動(dòng)態(tài)分區(qū)插入概述dynamicpartitioninsert動(dòng)態(tài)分區(qū)插入配置參數(shù)hive.exec.dynamic.partitiontrue需要設(shè)置true為啟用動(dòng)態(tài)分區(qū)插入hive.exec.dynamic.partition.modestrict在strict模式下,用戶必須至少指定一個(gè)靜態(tài)分區(qū),以防用戶意外覆蓋所有分區(qū);在nonstrict模式下,允許所有分區(qū)都是動(dòng)態(tài)的FROMpage_view_stgpvs

INSERTOVERWRITETABLEpage_viewPARTITION(dt='2008-06-08',country)

SELECTpvs.viewTime,pvs.userid,pvs.page_url,pvs.referrer_url,null,null,pvs.ip,pvs.cnt

--在這里,country分區(qū)將由SELECT子句(即t)的最后一列動(dòng)態(tài)創(chuàng)建。

--而dt分區(qū)是手動(dòng)指定寫死的。

--如果是nonstrict模式下,dt分區(qū)也可以動(dòng)態(tài)創(chuàng)建。dynamicpartitioninsert動(dòng)態(tài)分區(qū)插入練習(xí)--1、首先設(shè)置動(dòng)態(tài)分區(qū)模式為非嚴(yán)格模式默認(rèn)已經(jīng)開啟了動(dòng)態(tài)分區(qū)功能

sethive.exec.dynamic.partition=true;

sethive.exec.dynamic.partition.mode=nonstrict;

--2、當(dāng)前庫下已有一張表student

select*fromstudent;

--3、創(chuàng)建分區(qū)表以sdept作為分區(qū)字段

createtablestudent_partition(Snoint,Snamestring,Sexstring,Sageint)partitionedby(Sdeptstring);

--4、執(zhí)行動(dòng)態(tài)分區(qū)插入操作

insertintotablestudent_partitionpartition(Sdept)

selectnum,name,sex,age,deptfromstudent;

--其中,num,name,sex,age作為表的字段內(nèi)容插入表中

--dept作為分區(qū)字段值

select*

fromstudent_partition;最終執(zhí)行結(jié)果如下,可以發(fā)現(xiàn)實(shí)現(xiàn)了自動(dòng)分區(qū):dynamicpartitioninsert動(dòng)態(tài)分區(qū)插入結(jié)果Hive

Insert使用方式MultipleInserts多重插入DynamicPartitionInserts動(dòng)態(tài)分區(qū)插入InsertDirectory導(dǎo)出數(shù)據(jù)Hive支持將select查詢的結(jié)果導(dǎo)出成文件存放在文件系統(tǒng)中。語法格式如下;注意:導(dǎo)出操作是一個(gè)OVERWRITE覆蓋操作,慎重。insertDirectory導(dǎo)出數(shù)據(jù)語法格式--標(biāo)準(zhǔn)語法:

INSERTOVERWRITE[LOCAL]DIRECTORYdirectory1

[ROWFORMATrow_format][STOREDASfile_format]

SELECT...FROM...

--Hiveextension(multipleinserts):

FROMfrom_statement

INSERTOVERWRITE[LOCAL]DIRECTORYdirectory1select_statement1

[INSERTOVERWRITE[LOCAL]DIRECTORYdirectory2select_statement2]...

--row_format

:DELIMITED[FIELDSTERMINATEDBYchar[ESCAPEDBYchar]][COLLECTIONITEMSTERMINATEDBYchar]

[MAPKEYSTERMINATEDBYchar][LINESTERMINATEDBYchar]目錄可以是完整的URI。如果未指定scheme,則Hive將使用hadoop配置變量來決定導(dǎo)出位置;如果使用LOCAL關(guān)鍵字,則Hive會(huì)將數(shù)據(jù)寫入本地文件系統(tǒng)上的目錄;寫入文件系統(tǒng)的數(shù)據(jù)被序列化為文本,列之間用\001隔開,行之間用換行符隔開。如果列都不是原始數(shù)據(jù)類型,那么這些列將序列化為JSON格式。也可以在導(dǎo)出的時(shí)候指定分隔符換行符和文件格式。insertDirectory導(dǎo)出數(shù)據(jù)語法格式--標(biāo)準(zhǔn)語法:

INSERTOVERWRITE[LOCAL]DIRECTORYdirectory1

[ROWFORMATrow_format][STOREDASfile_format](Note:OnlyavailablestartingwithHive0.11.0)

SELECT...FROM...

--Hiveextension(multipleinserts):

FROMfrom_statement

INSERTOVERWRITE[LOCAL]DIRECTORYdirectory1select_statement1

[INSERTOVERWRITE[LOCAL]DIRECTORYdirectory2select_statement2]...

--row_format

:DELIMITED[FIELDSTERMINATEDBYchar[ESCAPEDBYchar]][COLLECTIONITEMSTERMINATEDBYchar]

[MAPKEYSTERMINATEDBYchar][LINESTERMINATEDBYchar]insertDirectory導(dǎo)出數(shù)據(jù)演示--導(dǎo)出操作演示

--當(dāng)前庫下已有一張表student

select*fromstudent;

--1、導(dǎo)出查詢結(jié)果到HDFS指定目錄下

insertoverwritedirectory'/tmp/hive_export/e1'select*fromstudent;

--2、導(dǎo)出時(shí)指定分隔符和文件存儲(chǔ)格式

insertoverwritedirectory'/tmp/hive_export/e2'rowformatdelimitedfieldsterminatedby','

storedasorc

select*fromstudent;

--3、導(dǎo)出數(shù)據(jù)到本地文件系統(tǒng)指定目錄下

insertoverwritelocaldirectory'/root/hive_export/e1'select*fromstudent;insertDirectory導(dǎo)出數(shù)據(jù)演示HiveTransaction事務(wù)表03Hive事務(wù)背景知識(shí)Hive事務(wù)表實(shí)現(xiàn)原理Hive事務(wù)表使用設(shè)置與局限性案例:創(chuàng)建使用Hive事務(wù)表Hive設(shè)計(jì)之初時(shí),是不支持事務(wù)的,原因:Hive的核心目標(biāo)是將已經(jīng)存在的結(jié)構(gòu)化數(shù)據(jù)文件映射成為表,然后提供基于表的SQL分析處理,是一款面向歷史、面向分析的工具;Hive作為數(shù)據(jù)倉庫,是分析數(shù)據(jù)規(guī)律的,而不是創(chuàng)造數(shù)據(jù)規(guī)律的;Hive中表的數(shù)據(jù)存儲(chǔ)于HDFS上,而HDFS是不支持隨機(jī)修改文件數(shù)據(jù)的,其常見的模型是一次寫入,多次讀取。HiveTransaction事務(wù)表Hive事務(wù)背景知識(shí)從Hive0.14版本開始,具有ACID語義的事務(wù)(支持INSERT,UPDATE和DELETE)已添加到Hive中,以解決以下場(chǎng)景下遇到的問題:流式傳輸數(shù)據(jù)使用如ApacheFlume或ApacheKafka之類的工具將數(shù)據(jù)流式傳輸?shù)浆F(xiàn)有分區(qū)中,可能會(huì)有臟讀(開始查詢后能看到寫入的數(shù)據(jù))。HiveTransaction事務(wù)表Hive事務(wù)背景知識(shí)從Hive0.14版本開始,具有ACID語義的事務(wù)已添加到Hive中,以解決以下場(chǎng)景下遇到的問題:變化緩慢數(shù)據(jù)更新星型模式數(shù)據(jù)倉庫中,維度表隨時(shí)間緩慢變化。例如,零售商將開設(shè)新商店,需要將其添加到商店表中,或者現(xiàn)有商店可能會(huì)更改其平方英尺或某些其他跟蹤的特征。這些更改需要插入單個(gè)記錄或更新記錄(取決于所選策略)。數(shù)據(jù)修正有時(shí)發(fā)現(xiàn)收集的數(shù)據(jù)不正確,需要局部更正。HiveTransaction事務(wù)表Hive事務(wù)背景知識(shí)Hive事務(wù)背景知識(shí)Hive事務(wù)表實(shí)現(xiàn)原理Hive事務(wù)表使用設(shè)置與局限性案例:創(chuàng)建使用Hive事務(wù)表Hive的文件是存儲(chǔ)在HDFS上的,而HDFS上又不支持對(duì)文件的任意修改,只能是采取另外的手段來完成。用HDFS文件作為原始數(shù)據(jù)(基礎(chǔ)數(shù)據(jù)),用delta保存事務(wù)操作的記錄增量數(shù)據(jù);正在執(zhí)行中的事務(wù),是以一個(gè)staging開頭的文件夾維護(hù)的,執(zhí)行結(jié)束就是delta文件夾。每次執(zhí)行一次事務(wù)操作都會(huì)有這樣的一個(gè)delta增量文件夾;當(dāng)訪問Hive數(shù)據(jù)時(shí),根據(jù)HDFS原始文件和delta增量文件做合并,查詢最新的數(shù)據(jù)。HiveTransaction事務(wù)表實(shí)現(xiàn)原理INSERT語句會(huì)直接創(chuàng)建delta目錄;DELETE目錄的前綴是delete_delta;UPDATE語句采用了split-update特性,即先刪除、后插入;HiveTransaction事務(wù)表實(shí)現(xiàn)原理delta_minWID_maxWID_stmtID,即delta前綴、寫事務(wù)的ID范圍、以及語句ID;刪除時(shí)前綴是delete_delta,里面包含了要?jiǎng)h除的文件;Hive會(huì)為寫事務(wù)(INSERT、DELETE等)創(chuàng)建一個(gè)寫事務(wù)ID(WriteID),該ID在表范圍內(nèi)唯一;語句ID(StatementID)則是當(dāng)一個(gè)事務(wù)中有多條寫入語句時(shí)使用的,用作唯一標(biāo)識(shí)。HiveTransaction事務(wù)表實(shí)現(xiàn)原理之delta文件夾命名格式每個(gè)事務(wù)的delta文件夾下,都有兩個(gè)文件:_orc_acid_version的內(nèi)容是2,即當(dāng)前ACID版本號(hào)是2。和版本1的主要區(qū)別是UPDATE語句采用了split-update特性,即先刪除、后插入。這個(gè)文件不是ORC文件,可以下載下來直接查看。HiveTransaction事務(wù)表實(shí)現(xiàn)原理bucket_00000文件則是寫入的數(shù)據(jù)內(nèi)容。如果事務(wù)表沒有分區(qū)和分桶,就只有一個(gè)這樣的文件。文件都以O(shè)RC格式存儲(chǔ),底層二級(jí)制,需要使用ORC

TOOLS查看,詳見附件資料。HiveTransaction事務(wù)表實(shí)現(xiàn)原理operation:0表示插入,1表示更新,2表示刪除。由于使用了split-update,UPDATE是不會(huì)出現(xiàn)的,所以delta文件中的operation是0,delete_delta文件中的operation是2。originalTransaction、currentTransaction:該條記錄的原始寫事務(wù)ID,當(dāng)前的寫事務(wù)ID。rowId:一個(gè)自增的唯一ID,在寫事務(wù)和分桶的組合中唯一。row:具體數(shù)據(jù)。對(duì)于DELETE語句,則為null,對(duì)于INSERT就是插入的數(shù)據(jù),對(duì)于UPDATE就是更新后的數(shù)據(jù)。隨著表的修改操作,創(chuàng)建了越來越多的delta增量文件,就需要合并以保持足夠的性能。合并器Compactor是一套在HiveMetastore內(nèi)運(yùn)行,支持ACID系統(tǒng)的后臺(tái)進(jìn)程。所有合并都是在后臺(tái)完成的,不會(huì)阻止數(shù)據(jù)的并發(fā)讀、寫。合并后,系統(tǒng)將等待所有舊文件的讀操作完成后,刪除舊文件。合并操作分為兩種,minorcompaction(小合并)、majorcompaction(大合并):小合并會(huì)將一組delta增量文件重寫為單個(gè)增量文件,默認(rèn)觸發(fā)條件為10個(gè)delta文件;大合并將一個(gè)或多個(gè)增量文件和基礎(chǔ)文件重寫為新的基礎(chǔ)文件,默認(rèn)觸發(fā)條件為delta文件相應(yīng)于基礎(chǔ)文件占比,10%。HiveTransaction事務(wù)表合并器(Compactor)Hive事務(wù)背景知識(shí)Hive事務(wù)表實(shí)現(xiàn)原理Hive事務(wù)表使用設(shè)置與局限性案例:創(chuàng)建使用Hive事務(wù)表雖然Hive支持了具有ACID語義的事務(wù),但是在使用起來,并沒有像在MySQL中使用那樣方便,有很多限制;尚不支持BEGIN,COMMIT和ROLLBACK,所有語言操作都是自動(dòng)提交的;表文件存儲(chǔ)格式僅支持ORC(STOREDASORC);需要配置參數(shù)開啟事務(wù)使用;外部表無法創(chuàng)建為事務(wù)表,因?yàn)镠ive只能控制元數(shù)據(jù),無法管理數(shù)據(jù);表屬性參數(shù)transactional必須設(shè)置為true;必須將Hive事務(wù)管理器設(shè)置為org.apache.hadoop.hive.ql.lockmgr.DbTxnManager才能使用ACID表;事務(wù)表不支持LOADDATA...語句。HiveTransaction事務(wù)表局限性Client端:服務(wù)端:HiveTransaction事務(wù)表設(shè)置參數(shù)可以使用set設(shè)置當(dāng)前session生效也可以配置在hive-site.xml中)

sethive.support.concurrency=true;--Hive是否支持并發(fā)

sethive.enforce.bucketing=true;--從Hive2.0開始不再需要是否開啟分桶功能

sethive.exec.dynamic.partition.mode=nonstrict;--動(dòng)態(tài)分區(qū)模式非嚴(yán)格

sethive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;--setpactor.initiator.on=true;--是否在Metastore實(shí)例上運(yùn)行啟動(dòng)壓縮合并

setpactor.worker.threads=1;--在此metastore實(shí)例上運(yùn)行多少個(gè)合并程序工作線程。Hive事務(wù)背景知識(shí)Hive事務(wù)表實(shí)現(xiàn)原理Hive事務(wù)表使用設(shè)置與局限性案例:創(chuàng)建使用Hive事務(wù)表HiveTransaction事務(wù)表使用--Hive中事務(wù)表的創(chuàng)建使用

--1、開啟事務(wù)配置(可以使用set設(shè)置當(dāng)前session生效也可以配置在hive-site.xml中)

sethive.support.concurrency=true;--Hive是否支持并發(fā)

sethive.enforce.bucketing=true;--從Hive2.0開始不再需要是否開啟分桶功能

sethive.exec.dynamic.partition.mode=nonstrict;--動(dòng)態(tài)分區(qū)模式非嚴(yán)格

sethive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;--

setpactor.initiator.on=true;--是否在Metastore實(shí)例上運(yùn)行啟動(dòng)壓縮合并

setpactor.worker.threads=1;--在此metastore實(shí)例上運(yùn)行多少個(gè)壓縮程序工作線程。

--2、創(chuàng)建Hive事務(wù)表

createtabletrans_student(

idint,

nameString,

ageint

)storedasorcTBLPROPERTIES('transactional'='true');HiveTransaction事務(wù)表使用--3、針對(duì)事務(wù)表進(jìn)行insertupdatedelete操作

insertintotrans_student(id,name,age)

values(1,"allen",18);

select*

fromtrans_student;

updatetrans_student

setage=20

whereid=1;

deletefromtrans_studentwhereid=1;

select*

fromtrans_student;HiveSQL-DML-Update、Delete04你理解的Hive這款軟件,定位是什么?是面向事務(wù)支持事務(wù)的RDBMS,還是面向分析,支持分析的數(shù)據(jù)倉庫?HiveSQL-DML-Update、DeleteHive是基于Hadoop的數(shù)據(jù)倉庫,是面向分析支持分析工具。將已有的結(jié)構(gòu)化數(shù)據(jù)文件映射成為表,然后提供SQL分析數(shù)據(jù)的能力。因此在Hive中常見的操作就是分析查詢select操作。Hive早期是不支持update和delete語法的,因?yàn)镠ive所處理的數(shù)據(jù)都是已經(jīng)存在的的數(shù)據(jù)、歷史數(shù)據(jù)。后續(xù)Hive支持了相關(guān)的update和delete操作,不過有很多約束。詳見Hive事務(wù)的支持。HiveSQL-DML-Update、Delete概述HiveSQL-DML-Update、Deleteupdate操作--3、針對(duì)事務(wù)表進(jìn)行insertupdate操作

insertintotrans_student(id,name,age)

values(1,"allen",18);

select*

fromtrans_student;

updatetrans_student

setage=20

whereid=1;

select*

fromtrans_student;--Hive中事務(wù)表的創(chuàng)建使用

--1、開啟事務(wù)配置(可以使用set設(shè)置當(dāng)前session生效也可以配置在hive-site.xml中)

sethive.support.concurrency=true;--Hive是否支持并發(fā)

sethive.enforce.bucketing=true;--從Hive2.0開始不再需要是否開啟分桶功能

sethive.exec.dynamic.partition.mode=nonstrict;--動(dòng)態(tài)分區(qū)模式非嚴(yán)格

sethive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;--

setpactor.initiator.on=true;--是否在Metastore實(shí)例上運(yùn)行啟動(dòng)壓縮合并

setpactor.worker.threads=1;--在此metastore實(shí)例上運(yùn)行多少個(gè)壓縮程序工作線程。

--2、創(chuàng)建Hive事務(wù)表

createtabletrans_student(

idint,

nameString,

ageint

)storedasorcTBLPROPERTIES('transactional'='true');HiveSQL-DML-Update、Deletedelete操作--Hive中事務(wù)表的創(chuàng)建使用

--1、開啟事務(wù)配置(可以使用set設(shè)置當(dāng)前session生效也可以配置在hive-site.xml中)

sethive.support.concurrency=true;--Hive是否支持并發(fā)

sethive.enforce.bucketing=true;--從Hive2.0開始不再需要是否開啟分桶功能

sethive.exec.dynamic.partition.mode=nonstrict;--動(dòng)態(tài)分區(qū)模式非嚴(yán)格

sethive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;--

setpactor.initiator.on=true;--是否在Metastore實(shí)例上運(yùn)行啟動(dòng)線程和清理線程

setpactor.worker.threads=1;--在此metastore實(shí)例上運(yùn)行多少個(gè)壓縮程序工作線程。

--2、創(chuàng)建Hive事務(wù)表

createtabletrans_student(

idint,

nameString,

ageint

)storedasorcTBLPROPERTIES('transactional'='true');--3、針對(duì)事務(wù)表進(jìn)行insert

delete操作

insertintotrans_student(id,name,age)

values(1,"allen",18);

select*

fromtrans_student;

deletefromtrans_studentwhereid=1;

select*

fromtrans_student;HiveSQL-DQL-Select查詢數(shù)據(jù)05從哪里查詢?nèi)Q于FROM關(guān)鍵字后面的table_reference??梢允瞧胀ㄎ锢肀?、視圖、join結(jié)果或子查詢結(jié)果。表名和列名不區(qū)分大小寫。HiveSQL-DQL-Select查詢數(shù)據(jù)語法樹[WITHCommonTableExpression(,CommonTableExpression)*]

SELECT[ALL|DISTINCT]select_expr,select_expr,...

FROMtable_reference

[WHEREwhere_condition]

[GROUPBYcol_list]

[ORDERBYcol_list]

[CLUSTERBYcol_list

|[DISTRIBUTEBYcol_list][SORTBYcol_list]

]

[LIMIT[offset,]rows];HiveSQL-DQL-Select查詢數(shù)據(jù)美國(guó)Covid-19新冠數(shù)據(jù)之select查詢準(zhǔn)備一下select語法測(cè)試環(huán)境,在附件資料中有一份數(shù)據(jù)文件《us-covid19-counties.dat》,里面記錄了2021-01-28美國(guó)各個(gè)縣累計(jì)新冠確診病例數(shù)和累計(jì)死亡病例數(shù)。HiveSQL-DQL-Select查詢數(shù)據(jù)數(shù)據(jù)環(huán)境準(zhǔn)備--step1:創(chuàng)建普通表t_usa_covid19

droptableifexistst_usa_covid19;

CREATETABLEt_usa_covid19(

count_datestring,

countystring,

statestring,

fipsint,

casesint,

deathsint)

rowformatdelimitedfieldsterminatedby",";

--將源數(shù)據(jù)load加載到t_usa_covid19表對(duì)應(yīng)的路徑下

loaddatalocalinpath'/root/hivedata/us-covid19-counties.dat'intotablet_usa_covid19;

--step2:創(chuàng)建一張分區(qū)表基于count_date日期,state州進(jìn)行分區(qū)

CREATETABLEifnotexistst_usa_covid19_p(

countystring,

fipsint,

casesint,

deathsint)

partitionedby(count_datestring,statestring)

rowformatdelimitedfieldsterminatedby",";

--step3:使用動(dòng)態(tài)分區(qū)插入將數(shù)據(jù)導(dǎo)入t_usa_covid19_p中

sethive.exec.dynamic.partition.mode=nonstrict;

insertintotablet_usa_covid19_ppartition(count_date,state)

selectcounty,fips,cases,deaths,count_date,statefromt_usa_covid19;HiveSQL-DQL-Select查詢數(shù)據(jù)數(shù)據(jù)環(huán)境準(zhǔn)備HiveSQLselect查詢基礎(chǔ)語法HiveSQLselect查詢高階語法HiveSQL-DQL-Select語法樹[WITHCommonTableExpression(,CommonTableExpression)*]

SELECT[ALL|DISTINCT]select_expr,select_expr,...

FROMtable_reference

[WHEREwhere_condition]

[GROUPBYcol_list]

[ORDERBYcol_list]

[CLUSTERBYcol_list

|[DISTRIBUTEBYcol_list][SORTBYcol_list]

]

[LIMIT[offset,]rows];基礎(chǔ)語法select_expr表示檢索查詢返回的列,必須至少有一個(gè)select_expr。HiveSQLselect查詢基礎(chǔ)語法select_expr--1、select_expr

--查詢所有字段或者指定字段

select*fromt_usa_covid19_p;

selectcounty,cases,deathsfromt_usa_covid19_p;

--查詢匹配正則表達(dá)式的所有字段

SEThive.support.quoted.identifiers=none;--帶反引號(hào)的名稱被解釋為正則表達(dá)式

select`^c.*`fromt_usa_covid19_p;

--查詢當(dāng)前數(shù)據(jù)庫

selectcurrent_database();--省去from關(guān)鍵字

--查詢使用函數(shù)

selectcount(county)fromt_usa_covid19_p;用于指定查詢返回結(jié)果中重復(fù)的行如何處理。如果沒有給出這些選項(xiàng),則默認(rèn)值為ALL(返回所有匹配的行)。DISTINCT指定從結(jié)果集中刪除重復(fù)的行。HiveSQLselect查詢基礎(chǔ)語法ALL、DISTINCT--2、ALLDISTINCT

--返回所有匹配的行

selectstate

fromt_usa_covid19_p;

--相當(dāng)于

selectallstate

fromt_usa_covid19_p;

--返回所有匹配的行去除重復(fù)的結(jié)果

selectdistinctstate

fromt_usa_covid19_p;

--多個(gè)字段distinct整體去重

selectdistinctcounty,statefromt_usa_covid19_p;

selectdistinctsexfromstudent;WHERE后面是一個(gè)布爾表達(dá)式,用于查詢過濾。在WHERE表達(dá)式中,可以使用Hive支持的任何函數(shù)和運(yùn)算符,但聚合函數(shù)除外。那么為什么不能在where子句中使用聚合函數(shù)呢?因?yàn)榫酆虾瘮?shù)要使用它的前提是結(jié)果集已經(jīng)確定。而where子句還處于“確定”結(jié)果集的過程中,因而不能使用聚合函數(shù)。從Hive0.13開始,WHERE子句支持某些類型的子查詢。HiveSQLselect查詢基礎(chǔ)語法WHEREHiveSQLselect查詢基礎(chǔ)語法WHERE--3、WHERECAUSE

select*fromt_usa_covid19_pwhere1>2;--1>2返回false

select*fromt_usa_covid19_pwhere1=1;--1=1返回true

--where條件中使用函數(shù)找出州名字母長(zhǎng)度超過10位的有哪些

select*fromt_usa_covid19_pwherelength(state)>10;

--where子句支持子查詢

SELECT*

FROMA

WHEREA.aIN(SELECTfooFROMB);

--注意:where條件中不能使用聚合函數(shù)

--報(bào)錯(cuò)SemanticException:NotyetsupportedplaceforUDAF'count'

--聚合函數(shù)要使用它的前提是結(jié)果集已經(jīng)確定。

--而where子句還處于“確定”結(jié)果集的過程中,因而不能使用聚合函數(shù)。

selectstate,count(deaths)

fromt_usa_covid19_pwherecount(deaths)>100groupbystate;

--可以使用Having實(shí)現(xiàn)

selectstate,count(deaths)

fromt_usa_covid19_pgroupbystate

havingcount(deaths)>100;針對(duì)Hive分區(qū)表,在查詢時(shí)可以指定分區(qū)查詢,減少全表掃描,也叫做分區(qū)裁剪。所謂分區(qū)裁剪指:對(duì)分區(qū)表進(jìn)行查詢時(shí),會(huì)檢查WHERE子句或JOIN中的ON子句中是否存在對(duì)分區(qū)字段的過濾,如果存在,則僅訪問查詢符合條件的分區(qū),即裁剪掉沒必要訪問的分區(qū)。HiveSQLselect查詢基礎(chǔ)語法分區(qū)查詢、分區(qū)裁剪--4、分區(qū)查詢、分區(qū)裁剪

--找出來自加州,累計(jì)死亡人數(shù)大于1000的縣state字段就是分區(qū)字段進(jìn)行分區(qū)裁剪避免全表掃描

select*fromt_usa_covid19_pwherestate="California"anddeaths>1000;

--多分區(qū)裁剪

select*fromt_usa_covid19_pwherecount_date="2021-01-28"andstate="California"anddeaths>1000;GROUPBY語句用于結(jié)合聚合函數(shù),根據(jù)一個(gè)或多個(gè)列對(duì)結(jié)果集進(jìn)行分組。注意:出現(xiàn)在GROUPBY中select_expr的字段:要么是GROUPBY分組的字段;要么是被聚合函數(shù)應(yīng)用的字段。HiveSQLselect查詢基礎(chǔ)語法GROUPBY概念出現(xiàn)在GROUPBY中select_expr的字段:要么是GROUPBY分組的字段;要么是被聚合函數(shù)應(yīng)用的字段。原因:避免出現(xiàn)一個(gè)字段多個(gè)值的歧義。分組字段出現(xiàn)select_expr中,一定沒有歧義,因?yàn)榫褪腔谠撟侄畏纸M的,同一組中必相同;被聚合函數(shù)應(yīng)用的字段,也沒歧義,因?yàn)榫酆虾瘮?shù)的本質(zhì)就是多進(jìn)一出,最終返回一個(gè)結(jié)果。HiveSQLselect查詢基礎(chǔ)語法GROUPBY語法限制基于category進(jìn)行分組,相同顏色的分在同一組中。在select_expr中,如果出現(xiàn)category字段,則沒有問題,因?yàn)橥唤M中category值一樣,但是返回day就有問題了,day的結(jié)果不一樣。HiveSQLselect查詢基礎(chǔ)語法GROUPBY使用--5、GROUPBY

--根據(jù)state州進(jìn)行分組

--SemanticException:ExpressionnotinGROUPBYkey'deaths'

--deaths不是分組字段報(bào)錯(cuò)

--state是分組字段可以直接出現(xiàn)在select_expr中

selectstate,deaths

fromt_usa_covid19_pwherecount_date="2021-01-28"groupbystate;

--被聚合函數(shù)應(yīng)用

selectstate,count(deaths)

fromt_usa_covid19_pwherecount_date="2021-01-28"groupbystate;在SQL中增加HAVING子句原因是,WHERE關(guān)鍵字無法與聚合函數(shù)一起使用。HAVING子句可以讓我們篩選分組后的各組數(shù)據(jù),并且可以在Having中使用聚合函數(shù),因?yàn)榇藭r(shí)where,groupby已經(jīng)執(zhí)行結(jié)束,結(jié)果集已經(jīng)確定。HiveSQLselect查詢基礎(chǔ)語法HAVING--6、having

--統(tǒng)計(jì)死亡病例數(shù)大于10000的州

--where語句中不能使用聚合函數(shù)語法報(bào)錯(cuò)

selectstate,sum(deaths)

fromt_usa_covid19_pwherecount_date="2021-01-28"andsum(deaths)>10000groupbystate;

--先where分組前過濾(此處是分區(qū)裁剪),再進(jìn)行g(shù)roupby分組,分組后每個(gè)分組結(jié)果集確定再使用having過濾

selectstate,sum(deaths)

fromt_usa_covid19_p

wherecount_date="2021-01-28"

groupbystate

havingsum(deaths)>10000;

--這樣寫更好即在groupby的時(shí)候聚合函數(shù)已經(jīng)作用得出結(jié)果having直接引用結(jié)果過濾不需要再單獨(dú)計(jì)算一次了

selectstate,sum(deaths)ascnts

fromt_usa_covid19_p

wherecount_date="2021-01-28"

groupbystate

havingcnts>10000;having是在分組后對(duì)數(shù)據(jù)進(jìn)行過濾where是在分組前對(duì)數(shù)據(jù)進(jìn)行過濾having后面可以使用聚合函數(shù)where后面不可以使用聚合函數(shù)HiveSQLselect查詢基礎(chǔ)語法HAVING與WHERE區(qū)別LIMIT用于限制SELECT語句返回的行數(shù)。LIMIT接受一個(gè)或兩個(gè)數(shù)字參數(shù),這兩個(gè)參數(shù)都必須是非負(fù)整數(shù)常量。第一個(gè)參數(shù)指定要返回的第一行的偏移量(從Hive2.0.0開始),第二個(gè)參數(shù)指定要返回的最大行數(shù)。當(dāng)給出單個(gè)參數(shù)時(shí),它代表最大行數(shù),并且偏移量默認(rèn)為0。HiveSQLselect查詢基礎(chǔ)語法LIMIT--7、limit

--沒有限制返回2021.1.28加州的所有記錄

select*fromt_usa_covid19_p

wherecount_date="2021-01-28"

andstate="California";

--返回結(jié)果集的前5條

select*fromt_usa_covid19_p

wherecount_date="2021-01-28"

andstate="California"

limit5;

--返回結(jié)果集從第1行開始共3行

select*fromt_usa_covid19_p

wherecount_date="2021-01-28"

andstate="California"

limit2,3;--注意第一個(gè)參數(shù)偏移量是從0開始的在查詢過程中執(zhí)行順序:from>where>group(含聚合)>having>order>select;聚合語句(sum,min,max,avg,count)要比having子句優(yōu)先執(zhí)行where子句在查詢過程中執(zhí)行優(yōu)先級(jí)別優(yōu)先于聚合語句(sum,min,max,avg,count)結(jié)合下面SQL感受:HiveSQLselect查詢基礎(chǔ)語法執(zhí)行順序selectstate,sum(deaths)ascnts

fromt_usa_covid19_p

wherecount_date="2021-01-28"

groupbystate

havingcnts>10000;HiveSQLselect查詢基礎(chǔ)語法HiveSQLselect查詢高階語法HiveSQL-DQL-Select語法樹[WITHCommonTableExpression(,CommonTableExpression)*]

SELECT[ALL|DISTINCT]select_expr,select_expr,...

FROMtable_reference

[WHEREwhere_condition]

[GROUPBYcol_list]

[ORDERBYcol_list]

[CLUSTERBYcol_list

|[DISTRIBUTEBYcol_list][SORTBYcol_list]

]

[LIMIT[offset,]rows];高階語法HiveSQL中的ORDERBY語法類似于標(biāo)準(zhǔn)SQL語言中的ORDERBY語法,會(huì)對(duì)輸出的結(jié)果進(jìn)行全局排序。因此當(dāng)?shù)讓邮褂肕apReduce引擎執(zhí)行的時(shí)候,只會(huì)有一個(gè)reducetask執(zhí)行。如果輸出的行數(shù)太大,會(huì)導(dǎo)致需要很長(zhǎng)的時(shí)間才能完成全局排序。默認(rèn)排序?yàn)樯颍ˋSC),也可以指定為DESC降序。在Hive2.1.0和更高版本中,支持在ORDERBY子句中為每個(gè)列指定null類型結(jié)果排序順序。ASC順序的默認(rèn)空排序順序?yàn)镹ULLSFIRST,而DESC順序的默認(rèn)空排序順序?yàn)镹ULLSLAST。HiveSQLselect查詢高階語法ORDERBYHiveSQLselect查詢高階語法ORDERBY1、orderby

--根據(jù)字段進(jìn)行排序

select*fromt_usa_covid19_p

wherecount_date="2021-01-28"

andstate="California"

orderbydeaths;----默認(rèn)asc,nullsfirst也可以手動(dòng)指定nullslast

select*fromt_usa_covid19_p

wherecount_date="2021-01-28"

andstate="California"

orderbydeathsdesc;--指定descnulllast

--強(qiáng)烈建議將LIMIT與ORDERBY一起使用。避免數(shù)據(jù)集行數(shù)過大

--當(dāng)hive.mapred.mode設(shè)置為strict嚴(yán)格模式時(shí),使用不帶LIMIT的ORDERBY時(shí)會(huì)引發(fā)異常。

select*fromt_usa_covid19_p

wherecount_date="2021-01-28"

andstate="California"

orderbydeathsdesc

limit3;根據(jù)指定字段將數(shù)據(jù)分組,每組內(nèi)再根據(jù)該字段正序排序(只能正序)。概況起來就是:根據(jù)同一個(gè)字段,分且排序。分組規(guī)則hash散列(分桶表規(guī)則一樣):Hash_Func(col_name)%reducetask個(gè)數(shù)分為幾組取決于reducetask的個(gè)數(shù)HiveSQLselect查詢高階語法CLUSTERBYHiveSQLselect查詢高階語法CLUSTERBY--2、clusterby

select*fromstudent;

--不指定reducetask個(gè)數(shù)

--日志顯示:Numberofreducetasksnotspecified.Estimatedfrominputdatasize:1

select*fromstudentclusterbynum;

--手動(dòng)設(shè)置reducetask個(gè)數(shù)

setmapreduce.job.reduces=2;

select*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論