Hive DML ,分割槽表

2021-08-31 18:12:41 字數 4404 閱讀 5415

1.hive構建在hadoop之上的資料倉儲

sql ==> hive ==> mapreduce

但是有些簡單基本的hive不呼叫mapreduce,就是不帶分組

2.分組函式:出現在select中的字段,要麼出現在group by子句中,要麼出現在聚合函式中。

3.count(1) and count(字段)

兩者的主要區別是

(1) count(1) 會統計表中的所有的記錄數,包含欄位為null 的記錄。

(2) count(字段) 會統計該字段在表中出現的次數,忽略欄位為null 的情況。即不統計欄位為null 的記錄。

4.(case when then else end ) 類似if-else,返回一列then

的結果.

union all 堆疊

5.看hive裡有哪些函式

hive (default)> show functions;

desc function extended *** 檢視函式功能

轉換某個欄位的型別,如果轉換失敗,返回值就是null

cast(value as type)
擷取一段字串,開始位置,擷取長度

substr(str,pos,len)
返回以.分割的連線

concat_ws('.','www','asd') 返回www.asd
返回長度,字串數字都可以

length()
把陣列分隔為多行

explode()
拆分,以a,d兩種分割符

split('asd.sdf','[a,d]')
用.分割的話要

hive (default)> select split('asd.asd','\\.');

ok["asd","asd" ]

6.用hive函式完成乙個wordcount

資料asd,dsa,asd

asd,das

create table ruoze_wc(

sentence string

);select word, count(1) as c

from

(select explode(split(sentence,",")) as word from ruoze_wc

) t group by word

order by c desc;

split之後成了

[『asd』,『dsa』,『asd』]

[『asd』,『das』]

explode後變成5行1列的形式

7.建立和陣列相關的表

1,doudou,化學:物理:數學:語文

2,dasheng,化學:數學:生物:生理:衛生

3,rachel,化學:語文:英語:體育:生物

create table ruoze_student(

id int,

name string,

subjects array陣列裡裝string

)row format delimited fields terminated by ','

collection items terminated by ':'; 陣列集合用:分割

load data local inpath '/home/hadoop/data/student.txt' into table ruoze_student;

hive (default)> select * from ruoze_student;

ok1 doudou ["化學","物理","數學","語文"]

2 dasheng ["化學","數學","生物","生理","衛生"]

3 rachel ["化學","語文","英語","體育","生物"]

分割槽表:乙個表按照某些字段進行分割槽

解決問題:全盤掃瞄慢,分割槽定位掃瞄快

create table order_partition(

ordernumber string,

event_time string

)partitioned by(event_month string) 按照event_month分割槽

row format delimited fields terminated by '\t';

指定分割槽載入,資料表會多個分割槽列

load data local inpath '/home/hadoop/data/order.txt' into table order_partition partition (event_month='2014-05');
如果報錯,key太長,需要修改字符集,在mysql裡改

use ruoze_d5;

alter table partitions convert to character set latin1;

alter table partition_keys convert to character set latin1;

手動hdfs dfs 建立partitions分割槽,會找不到元資料,需要

msck repair 分割槽表 ,這要刷所有分割槽,效能低,不用。

增加分割槽的辦法:

alter table order_partition add partition(event_month='2014-07');
檢視乙個表的分割槽:

show partitions order_partition;
檢視如何建立的表

show create table ***;
9.多級分割槽表

create table order_mulit_partition(

ordernumber string,

event_time string

)partitioned by(event_month string, step string)

row format delimited fields terminated by '\t';

load data local inpath '/home/hadoop/data/order.txt' into table order_mulit_partition partition (event_month='2014-05',step='1');

需求,按照deptno欄位寫進分割槽表裡

create table `ruoze_emp_partition`(

`empno` int,

`ename` string,

`job` string,

`mgr` int,

`hiredate` string,

`sal` double,

`comm` double)

partitioned by(`deptno` int)

row format delimited

fields terminated by '\t';

靜態匯入

insert into table ruoze_emp_partition partition(deptno=10)

select empno,ename,job,mgr,hiredate,sal,comm from ruoze_emp where deptno=10;

假如有1000個deptno,豈不是要寫1000個匯入

動態匯入

分割槽欄位deptno要寫在最後,1句解決。

insert overwrite table ruoze_emp_partition partition(deptno)

select empno,ename,job,mgr,hiredate,sal,comm,deptno from ruoze_emp;

啟動動態分割槽功能

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

把非分割槽表改為分割槽表

把非分割槽表改為分割槽表 說明 把非分割槽表改為分割槽表適用於歷史表 1 建立分割槽表 結構和非分割槽表tbl stock balance log相同 createtabletbl stock balance log part1 account id varchar2 20 byte occur d...

sqlserver 分割槽表

1 建分割槽函式,用於自動劃分物理表資料的流向 建好後可以在databases dbname storage中看到 下面分成四個區域 bigscreen且 computer且 pooltable 若是right,則x1 bigscreen x2 computer x3 pooltable x4 若是...

GPT 分割槽表

guid 分割槽表 gpt 一種由基於 itanium 計算機中的可擴充套件韌體介面 efi 使用的磁碟分割槽架構。與主啟動記錄 mbr 分割槽方法相比,gpt 具有更多的優點,因為它允許每個 磁碟有多達 128 個分割槽,支援高達 18 千兆兆位元組的卷大小,允許將主磁碟分割槽表和備份磁碟分割槽表...