国产另类ts人妖一区二区_欧美肥老太做爰视频_快穿高h肉_国产欧美综合在线

當(dāng)前位置: 首頁(yè) / 技術(shù)干貨 / 正文
Hive的分區(qū)表

2023-02-09

   數(shù)據(jù) 查詢(xún) 分區(qū)

  Hive表在創(chuàng)建的時(shí)候,其實(shí)就是在HDFS的指定目錄上創(chuàng)建的一個(gè)文件夾。如果是內(nèi)部表,只能映射在數(shù)據(jù)庫(kù)目錄下,而如果是外部表,則可以使用location指定映射的位置。這個(gè)文件夾下的所有的數(shù)據(jù)文件,都是這個(gè)表中的數(shù)據(jù)。隨著系統(tǒng)運(yùn)行時(shí)間的累積,文件中的數(shù)據(jù)量也會(huì)越來(lái)越大。hive在進(jìn)行查詢(xún)的時(shí)候,每一次的查詢(xún),都會(huì)從這個(gè)目錄下的所有的數(shù)據(jù)文件中進(jìn)行查詢(xún)。如果數(shù)據(jù)量過(guò)大的時(shí)候,這個(gè)查詢(xún)將會(huì)非常的慢了。

  那么,有沒(méi)有什么辦法可以加速這個(gè)查詢(xún)的過(guò)程呢?其實(shí),最簡(jiǎn)單的加速查詢(xún)就是減少文件的掃描量即可。

  我們以一個(gè)電商的訂單數(shù)據(jù)表為例,表中存放著過(guò)去5年的所有的訂單數(shù)據(jù)。每一次查詢(xún)的時(shí)候,都需要從所有的數(shù)據(jù)文件中進(jìn)行查詢(xún),數(shù)據(jù)量非常龐大,導(dǎo)致查詢(xún)的時(shí)間會(huì)非常的長(zhǎng)。但是,表中的5年的訂單的數(shù)據(jù),我們?cè)诓樵?xún)的時(shí)候,很多的數(shù)據(jù)其實(shí)都是沒(méi)有必要去查詢(xún)的。其中沒(méi)有任何的數(shù)據(jù)價(jià)值,反而要增加查詢(xún)的文件數(shù)量。

  如果我們對(duì)這些訂單的數(shù)據(jù)分個(gè)類(lèi)呢?例如,按照時(shí)間?

  我們可以在表目錄下創(chuàng)建若干個(gè)文件夾,例如: 2022年、2021年、2020年...,然后將不同年份的訂單數(shù)據(jù),存放到對(duì)應(yīng)的文件夾里面即可。這樣我們?cè)谶M(jìn)行數(shù)據(jù)查詢(xún)的時(shí)候,如果要查詢(xún)2022年的數(shù)據(jù),是不是只需要到2022年的文件夾中查詢(xún)即可,不用再查詢(xún)所有的數(shù)據(jù)了,就達(dá)到了加速查詢(xún)的效果了!

  這,就是分區(qū)!

  我們使用分區(qū),就是將表中的數(shù)據(jù),按照不同的維度進(jìn)行歸類(lèi)。在進(jìn)行數(shù)據(jù)查詢(xún)的時(shí)候,就可以按照不同的分區(qū)的號(hào),到指定的文件夾中進(jìn)行查詢(xún)即可。在上述的例子中,表目錄下只創(chuàng)建了一層的文件夾,這就是一級(jí)分區(qū)。而有時(shí)候我們還需要在一個(gè)文件夾中創(chuàng)建二級(jí)文件夾,來(lái)將數(shù)據(jù)進(jìn)行更加細(xì)致的歸類(lèi),例如對(duì)于某一年的數(shù)據(jù),可以按照月份再進(jìn)行歸類(lèi)。這就是二級(jí)分區(qū)。在創(chuàng)建分區(qū)的時(shí)候,還可以創(chuàng)建三級(jí)、四級(jí)等分區(qū),但是實(shí)際使用中,三級(jí)分區(qū)已經(jīng)是比較多的分區(qū)層級(jí)了。常用的就是一級(jí)和二級(jí)分區(qū)。

  分區(qū)表在創(chuàng)建的時(shí)候,需要使用partitioned by 來(lái)指定分區(qū)的字段。例如:

  12345

  create table tableName(

  .......

  .......

  )

  partitioned by (colName colType [comment '...'],...)

  需要注意的是,分區(qū)字段是一個(gè)偽字段,并不會(huì)真實(shí)的存儲(chǔ)數(shù)據(jù),只是一個(gè)分區(qū)的標(biāo)識(shí)而已。例如我們?cè)诮ū淼臅r(shí)候如下:

  -- 一級(jí)分區(qū)

  create table part1(

  id int,

  name string,

  age int

  )

  partitioned by (dt string)

  row format delimited

  fields terminated by ',';

  -- 二級(jí)分區(qū)

  create table part2(

  id int,

  name string,

  age int

  )

  partitioned by (year int, month int)

  row format delimited

  fields terminated by ',';

  在上述的兩個(gè)分區(qū)表中,dt字段、year字段、month字段等,都是分區(qū)字段。如果我們到數(shù)據(jù)文件中進(jìn)行數(shù)據(jù)的查看的話,你會(huì)發(fā)現(xiàn)數(shù)據(jù)文件中其實(shí)并沒(méi)有這個(gè)字段對(duì)應(yīng)的信息。但是我們的確是可以通過(guò)desc查看表結(jié)構(gòu),能夠看到這個(gè)字段。因此這個(gè)字段存在的意義,只是用來(lái)區(qū)分分區(qū)的,而并不是真實(shí)的用來(lái)映射數(shù)據(jù)的。因此我們稱(chēng)這樣的字段為偽字段。

好程序員公眾號(hào)

  • · 剖析行業(yè)發(fā)展趨勢(shì)
  • · 匯聚企業(yè)項(xiàng)目源碼

好程序員開(kāi)班動(dòng)態(tài)

More+
IT培訓(xùn)IT培訓(xùn)
在線咨詢(xún)
IT培訓(xùn)IT培訓(xùn)
試聽(tīng)
IT培訓(xùn)IT培訓(xùn)
入學(xué)教程
IT培訓(xùn)IT培訓(xùn)
立即報(bào)名
IT培訓(xùn)

Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號(hào)-5 京公網(wǎng)安備 11010802035720號(hào)