Hive 一些操作記錄

2021-09-12 10:53:54 字數 4667 閱讀 3096

1.建立

//建立資料庫

create database database_name

//建立表 列按『,』分割

create table table_name

(id int,name string) row format delimited fields terminated by ','

//建立分割槽表 列按『,』分割 按bt和country分割槽

//create external table if not exists 判斷表是否存在

create external table if not exists table_name

(id int,name string)

partitioned by

(dt string,country string)

row format delimited fields terminated by ','

//新增分割槽

alter table table_name add if not exists partition

(dt=

'***'

,country

='***'

)

2.檢視

//查詢所有資料庫

show databases

//查詢所有表

show tables

//檢視表結構

desc formatted table_name

hbase對映表

3.載入資料

//local關鍵字 沒有local關鍵字,則載入hdfs上的檔案 有local關鍵字,則載入本地檔案 

//overwrite關鍵字 覆蓋資料(清空原資料)

//分割槽表,則加上partition分割槽

load data [local] inpath 'filepath'

[overwrite] into table table_name [

partition

(part=val,part2=val2)

]//載入hdfs資料

load data inpath '/hdfspath' into table table_name

//載入本地資料

load data load inpath '/path' into table table_name

4.查詢

select *

from table_name

//查詢分割槽表 where 後面加分割槽條件,這樣做是不會掃瞄全表 只會查詢該分割槽

select *

from table_name where dt=

'***'

5.刪除,清空

//刪除資料庫

drop

database

ifexists table_name

//刪除表

drop

table

ifexists table_name

//清空分割槽表 表結構還在,只清空資料

alter

table table_name drop

ifexists

partition

(dt=

'2018-08'

,country=

'ch'

)

6.重新命名

//重新命名表名

alter

table table_name_old rename

to table_name_new

//重新命名列名

alter

table table_name change col_old_name col_new_name string

;

7.匯出檔案

//匯出檔案到hdfs上 按照『,』分割 

//overwrite關鍵字 會覆蓋目錄下的原資料

insert

overwrite directory '/hdfspath' row format delimited fields terminated by ','

select

*from table_name

8.無效id在關聯時的資料傾斜問題

把空值的id變成乙個字串加上隨機數,就能把傾斜的資料分到不同的reduce上,從而解決資料傾斜問題。因為空值不參與關聯,即使分到不同 的 reduce 上,也不會影響最終的結果。

select

*from tablename1 a left

outer

join tablename2 b on

case

when a.id is

null

then

concat

('hive_temp_id'

,rand()

)else a.id end

=b.user_id;

9.hive不允許直接訪問非group by欄位

select a,b from tablename group

by a //expression not in group by key 'b'

select a,

collect_set

(b)from tablename group

by a //正確的使用方式

使用數字下標,可以直接訪問陣列中的元素

10.控制map和reduce數量

set mapred.max.split.size=

256000000

;//每個map處理的最大輸入檔案大小(256mb)

set mapred.min.split.size.per.node=1;

//節點上split檔案的最小值

set mapred.min.split.size.per.rack=1;

//機架上split檔案的最小值

//方法一

set mapred.reduce.tasks=10;

//設定reduce的數量

//方法二

set hive.exec.reducers.bytes.per.reducer=

1073741824

//每個reduce處理的資料量,預設1gb

10.hive join 優化的方式

set hive.auto.convert.join=

true

//自動mapjoin轉換操作(common join轉換為map join

12.合併小檔案

hive.merge.mapfiles =

true

//和並 map 輸出檔案,預設為 true

hive.merge.mapredfiles =

false

//合併 reduce 輸出檔案,預設為 false

hive.merge.size.per.task =

256*

1000

*1000

//合併檔案的大小。

13.並行執行優化

set hive.exec.parallel=

true

;//開啟任務並行執行

set hive.exec.parallel.thread.number=8;

//同乙個sql允許並行任務的最大執行緒數

set hive.groupby.skewindata=

true

;//設定資料負載均衡,防止資料傾斜

set hive.ignore.mapjoin.hint=

false

;//不忽略mapjoin標記

set mapred.reduce.tasks=15;

//設定reduce的數量

set hive.exec.reducers.max=

200;

//reduce最大數量(預設999)

set hive.auto.convert.join=

false

;//自動mapjoin轉換操作(common join轉換為map join)

set hive.exec.compress.intermediate=

true

;//hive的壓縮設定,中間結果壓縮

set hive.map.aggr =

true

;//map中做部分聚集操作(預設true)

set hive.execution.engine=tez;

//更改hive底層執行的計算框架

填坑中

es導hive以及hive一些基本操作

hive基本操作 hive show databases use xesoa show tables show create table api relation student live desc api relation student live drop table if exists api...

linux一些基本操作記錄

編緝檔案 nano 查詢檔案 find iname 檔名 rpm的檔案用 rpm ivh rpm命令安裝,用man rpm可以得到幫助 tar.gz的檔案用 tar zxvf tar.gz命令解壓縮,這是乙個壓縮包,解壓到當前目錄下.force tar的檔案用 tar xvf tar命令解壓縮,這是...

git一些常用操作記錄

1 配置全域性使用者 git config global user.name your name git config global user.email email example.com global引數,用了這個引數,表示你這台機器上所有的git倉庫都會使用這個配置 2 專案倉庫建立 git ...