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