HIve中的分割槽表和分桶表

2021-09-24 15:17:11 字數 3990 閱讀 5204

匯入資料的四種方式:

1、將本地的資料匯入到hive中

load data local inpath '/root/tes.txt' into table test.usr;

2、從hdfs集群匯入資料

load data inpath 'hdfs://node01:9000/user/tes.txt' into table test.te;

這裡的test.te指的是test資料庫的te表

load data命令,

可分為load data local inpath和load data inpath。兩者的區別在於local匯入的是本地檔案而不加local的匯入的是hdfs檔案—相當於直接將檔案進行相應的上傳

3、insert into—內外部表,不適應於分割槽

4、將table1的資料新增到table2的表中

from table1

insert into(overwrite) tables2

select id ,name

hive 分割槽partition(分成不同的檔案目錄進行儲存)

==必須在表定義時指定對應的partition欄位-----分割槽字段一定不能與表中字段重複==
a、單分割槽建表語句:

create table day_table (id int, content string) partitioned by (dt int);
上傳資料:

load data local inpath '/root/tes.txt' into table test.usr partition (age=10);
單分割槽表,按天分割槽,在表結構中存在id,content,dt三列。

以dt為資料夾區分

粗細力度分割槽的時候要根據業務需求,提前進行相應的設定 年月日時分秒----為了減少每乙個分割槽中的內容,提高計算效率

b、 雙分割槽建表語句:

雙分割槽表,按天和小時分割槽,在表結構中新增加了dt和hour兩列。

先以dt為資料夾,再以hour子資料夾區分

create table hour(id int, content string) partitioned by (dt int, hour int);

增加分割槽

alter table hour add partition(dt=10,hour=40);

alert table tablename add partiton(dt=20,hour=40)

也就是說新增分割槽的時候不能直接新增,而是需要將原來的分割槽也要包含其中,完成相應的排序

刪除分割槽

alter table tablename drop partition (***='boy')

alert table tablename drop partiton(dt=20,hour=40)

注:刪除分割槽的時候,會將所有存在的分割槽都刪除

修改許可權的方式:

1、conf/hive-site.xml

2、在hive內部使用set進行相應的設定

2.1、修改許可權

set hive.exec.dynamic.partiton=true //開啟動態分割槽

2.2、修改預設狀態

set hive.exec.dynamic.partiton.mode=nostrict //預設strict至少有乙個靜態分割槽

3、hive啟動的時候設定

hive --conf hive.exec.dynamic.partiton=true

create table psn22(

id int,

name string,

likes array,

address map)

partitioned by (age int ,*** string)

row format delimited

fields terminated by 』,』

collection items terminated by 『,』

map keys terminated by 『:』

lines terminated by 『\t』

寫入資料

from psn21 //已經存在的**並且要有資料

insert overwrite table pas22 partiton (age,***)

select * distribute by age,***

開啟分桶

set hive.enforce.bucketing=true
建立桶

create table psnbucket1 (

id int,

name string,

age int)

clustered by(age) into 4 buckets 通過age欄位建立4個桶 注意點by(字段)不空

row format delimited 行格式分割

fields terminated by ',' 鍵值對使用冒號分隔

lines terminated by '\t' 記錄之間使用換行符分隔

載入資料

insert into table 分桶表 select id,name,age from 表名

抽樣

select * from 表 tablesample(bucket 1 out of 4 on colimes)

1指的是第幾個桶

4指的是桶的個數

建立分桶只顯示乙個的原因

1.開啟分桶

set hive.enforce.bucketing=true

2.hadoop開啟時間過久,重新啟動

3.建立的過程

建立臨時表—匯入資料-----臨時表資料匯入分通表

建立失敗

number of reduce tasks is set to 0 since there』s no reduce operator

job running in-process (local hadoop)

2019-06-20 11:38:49,107 stage-1 map = 100%, reduce = 0%

建立成功

in order to limit the maximum number of reducers:

set hive.exec.reducers.max=in order to set a constant number of reducers:

set mapreduce.job.reduces=job running in-process (local hadoop)

2019-06-20 12:01:13,547 stage-1 map = 100%, reduce = 0%

2019-06-20 12:01:14,590 stage-1 map = 100%, reduce = 25%

2019-06-20 12:01:15,616 stage-1 map = 100%, reduce = 100%

這裡可以看出reduce100%成功 就證明你分桶成功了。

HIVE 表 分割槽表 分桶表

hive中表 1.managed table 託管表。刪除表時,資料也刪除了。2.external table 外部表。刪除表時,資料不刪。hive命令 建立表,external 外部表 hive create external table if not exists t2 id int,name ...

Hive分割槽表與分桶

在hive select查詢中,一般會掃瞄整個表內容,會消耗很多時間做沒必要的工作。分割槽表指的是在建立表時,指定partition的分割槽空間。分割槽語法 分割槽表操作增加分割槽 刪除分割槽 alter table employees drop ifexists partition country...

Hive的分割槽表和分桶表的區別

是指按照資料表的某列或某些列分為多個區,區從形式上可以理解為資料夾,比如我們要收集某個大型 的日誌資料,乙個 每天的日誌資料存在同一張表上,由於每天會生成大量的日誌,導致資料表的內容巨大,在查詢時進行全表掃瞄耗費的資源非常多。那其實這個情況下,我們可以按照日期對資料表進行分割槽,不同日期的資料存放在...