欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:hadoop hive中的分區(qū)

柚子快報激活碼778899分享:hadoop hive中的分區(qū)

http://yzkb.51969.com/

文章目錄

Hive分區(qū)1.簡介為什么要分區(qū)如何分區(qū)以及細節(jié)

2.Hive分區(qū)的建立創(chuàng)建分區(qū)靜態(tài)分區(qū)動態(tài)分區(qū)啟動動態(tài)分區(qū)功能多分區(qū)單分區(qū)區(qū)別創(chuàng)建多分區(qū)插入分區(qū)查看分區(qū)數(shù)查看表結(jié)構(gòu)

Hive分區(qū)

1.簡介

Hive分區(qū)的概念與傳統(tǒng)關(guān)系型數(shù)據(jù)庫分區(qū)不一樣。

傳統(tǒng)數(shù)據(jù)庫的分區(qū)方式:就oracle而言,分區(qū)獨立存在于段里,里面存儲真實的數(shù)據(jù),在數(shù)據(jù)進行插入的時候自動分配分區(qū)。

Hive的分區(qū)方式:因為Hive實際是存儲在HDFS上的抽象,Hive的一個分區(qū)名對應(yīng)一個目錄名,子分區(qū)名就是子目錄名,并非一個實際字段。

因此能夠這樣理解,當在插入數(shù)據(jù)的時候指定分區(qū),其實就是新建一個目錄或者子目錄,或者在原有的目錄上添加數(shù)據(jù)文件。

為什么要分區(qū)

1、在Hive Select查詢中一般會掃描整個表內(nèi)容,會消耗很多時間做沒必要的工作。有時候只需要掃描表中關(guān)心的一部分數(shù)據(jù),因此建表時引入了partition概念。

2、分區(qū)表指的是在創(chuàng)建表時指定的partition的分區(qū)空間。

3、如果需要創(chuàng)建有分區(qū)的表,需要在create表的時候調(diào)用可選參數(shù)partitioned by。

如何分區(qū)以及細節(jié)

根據(jù)業(yè)務(wù)分區(qū),(完全看業(yè)務(wù)場景)選取id、年、月、日、男女性別、年齡段 或者是能平均將數(shù)據(jù)分到不同文件中最好,分區(qū)不好將直接導(dǎo)致查詢結(jié)果延遲。

分區(qū)細節(jié):

一個表可以擁有一個或者多個分區(qū),每個分區(qū)以文件夾的形式單獨存在表文件夾的目錄下; 表和列名不區(qū)分大小寫; 分區(qū)是以字段的形式在表結(jié)構(gòu)中存在,但是該字段不存放實際的數(shù)據(jù)內(nèi)容,僅僅是分區(qū)的表示; 分區(qū)有一級、二級設(shè)置一般設(shè)置為一級分區(qū); 分區(qū)分為動態(tài)分區(qū)和靜態(tài)分區(qū)。

2.Hive分區(qū)的建立

Hive分區(qū)是在建立表的時候用Partitioned by 關(guān)鍵字定義的,但要注意,Partitioned by子句中定義的列是表中正式的列,可是Hive下的數(shù)據(jù)文件中并不包含這些列,由于它們是目錄名。

創(chuàng)建分區(qū)

CREATE TABLE `udata_partition`(

`user_id` string,

`item_id` string,

`rating` int)

PARTITIONED BY (`dt` string)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

LINES TERMINATED BY '\n'

靜態(tài)分區(qū)

每個分區(qū)要寫一個load data,缺點:load data 效率低下,非常繁瑣,不常用靜態(tài)分區(qū)在業(yè)務(wù)中

建立一張靜態(tài)分區(qū)表par_tab,單個分區(qū)

create table par_tab (name string,nation string) partitioned by (sex string) row format delimited fields terminated by ',';

把數(shù)據(jù)插入到表(其實load操做至關(guān)于把文件移動到HDFS的Hive目錄下)

load data local inpath '/home/hadoop/files/par_tab.txt' into table par_tab partition (sex='man');

能夠看到,在新建分區(qū)表的時候,系統(tǒng)會在hive數(shù)據(jù)倉庫下建立一個目錄,再建立目錄的子目錄sex=man(分區(qū)名),最后在分區(qū)名下存放實際的數(shù)據(jù)文件。

新建表的時候設(shè)置多分區(qū),定義的分區(qū)順序,決定了文件目錄順序(誰是父目錄誰是子目錄)

動態(tài)分區(qū)

若是用上述的靜態(tài)分區(qū),插入的時候必須首先要知道有什么分區(qū)類型,并且每一個分區(qū)寫一個load data,比較麻煩。使用動態(tài)分區(qū)可解決以上問題,其能夠根據(jù)查詢獲得的數(shù)據(jù)動態(tài)分配到分區(qū)里。其實動態(tài)分區(qū)與靜態(tài)分區(qū)區(qū)別就是不指定分區(qū)目錄,由系統(tǒng)本身選擇。

不確定分區(qū)數(shù)量,數(shù)據(jù)量也不是很大,使用動態(tài)分區(qū)

啟動動態(tài)分區(qū)功能

hive> set hive.exec.dynamic.partition=true;

多分區(qū)單分區(qū)區(qū)別

創(chuàng)建多分區(qū)

hive> create table tablename (name string, nation string) partitioned by (p1 string,dt string) row format delimited fields terminated by ',' ;

插入分區(qū)

第一個分區(qū)為主分區(qū),多分區(qū)默認模式為 主靜副動,動態(tài)分區(qū)不容許主分區(qū)采用動態(tài)列而副分區(qū)采用靜態(tài)列,這樣將致使全部的主分區(qū)都要建立副分區(qū)靜態(tài)列所定義的分區(qū)。

hive> insert overwrite table par_dnm partition(分區(qū)字段1='設(shè)置值',dt)

> select name, nation, dt from par_tab;

select 的的name,nation 對應(yīng) 要插入表的第1,2個字段,分區(qū)字段1 為靜態(tài)分區(qū)直接設(shè)置的默認值的,查詢的dt 對應(yīng)分區(qū)字段dt完成動態(tài)分區(qū)(根據(jù)查詢出來的dt自行分區(qū))。

動態(tài)分區(qū)能夠容許全部的分區(qū)列都是動態(tài)分區(qū)列,可是要首先設(shè)置一個參數(shù)

查看分區(qū)設(shè)置模式

hive> set hive.exec.dynamic.partition.mode;

hive.exec.dynamic.partition.mode=strict

它的默認值是strict,即不容許分區(qū)列所有是動態(tài)的,這是為了防止用戶有可能原意是只在子分區(qū)內(nèi)進行動態(tài)建分區(qū),可是因為疏忽忘記為主分區(qū)列指定值了,這將致使一個dml語句在短期內(nèi)建立大量的新的分區(qū)(對應(yīng)大量新的文件夾),對系統(tǒng)性能帶來影響。 因此要設(shè)置

hive> set hive.exec.dynamic.partition.mode=nostrict;

查看分區(qū)數(shù)

hive> show partitions tablename;

查看表結(jié)構(gòu)

show create table tablename ;

設(shè)置分區(qū)數(shù)量

set hive.exec.max.dynamic.partitions.pernode=1000;

柚子快報激活碼778899分享:hadoop hive中的分區(qū)

http://yzkb.51969.com/

參考閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19520516.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄