hive DML 簡單梳理

2021-08-14 11:36:40 字數 4645 閱讀 6839

環境相關:

os:centos release 6.9

ip:192.168.77.10

hadoop-2.6.0-cdh5.7.1

hive-1.1.0-cdh5.7.1

mysql5.1

hive的dml中,update和delete一般不會用,生產資料是不會刪除的,常用overwrite和load做資料的轉換。insert into values 也一般不會用,離線批處理,一些實時的資料insert場景並不多,這個命令只是從關係型資料庫相容過來的。

hive的dml,從os或者hdfs中load資料到表相關:

use test1;

create

table emp(

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int)

row format delimited fields terminated by

'\t';

-- 建立一張emp表

show

create

table emp;

-- 檢視emp表的建立語句

create

table dept(

deptno int,

dname string,

loc string)

row format delimited fields terminated by

'\t';

-- 建立一張dept表

load data local inpath '/tmp/dept' overwrite into

table dept;

-- 從os檔案裝載資料到表

load data local inpath '/tmp/emp' overwrite into

table emp;

-- 將os上的對應目錄下的對應檔案上傳關聯到emp表

-- 該檔案是oracle的scott.emp表的資料匯出,列分隔符為tab

-- 使用overwrite 引數覆蓋原表

load data local inpath '/tmp/emp'

into

table emp;

-- 再次上傳,不使用關鍵字overwrite,追加資料到表中

-- 手動上傳/tmp/emp為hdfs的乙個目錄下的test檔案

-- 注意該目錄不能和當前表乙個目錄

-- hdfs dfs -put /tmp/emp /user/hive/warehouse/test1.db/test

load data inpath '/user/hive/warehouse/test1.db/test' overwrite into

table emp;

-- 將hdfs中的乙個檔案overwrite到emp表中

-- 該操作實際上是將hdfs的對應檔案移動到了emp表對應的目錄中

-- 因此該檔案不能是emp目錄中的檔案

-- hdfs dfs -put /tmp/emp /user/hive/warehouse/test1.db/test

load data inpath '/user/hive/warehouse/test1.db/test'

into

table emp;

-- 再次關聯,不使用關鍵字overwrite,追加資料到表中

hive的dml,insert表資料到另外一張表:

insert overwrite table tablename1

[partition (partcol1=val1, partcol2=val2 ...)

[ifnotexists]]

select_statement1 from from_statement;

insert

into

table tablename1

[partition (partcol1=val1, partcol2=val2 ...)]

select_statement1 from from_statement;

insert overwrite table emp2 select * from emp;

-- 表emp2結構和select子句查出來的列數量和型別要一致,否則報錯

-- 如果列數量和型別一致,但是列順序相反,則會造成業務上的問題

-- 比如將ename和job插入成了job和ename,或者倆job

-- 不會報錯,但是表的資料就是混亂的了

insert

into

table emp2 select * from emp;

-- 注意點和上方一樣,該操作是追加資料

hive的dml,insert表資料到os目錄或hdfs目錄相關:

insert overwrite [local] directory directory1

[row format row_format] [stored as file_format]

select ... from ...;

use test1;

insert overwrite local directory '/tmp/test_emp'

row format delimited fields terminated by

"\t"

select * from emp;

-- 會查詢test1.emp表,寫入作業系統的/tmp/test_emp目錄中的000000_0檔案

-- 目錄和檔案會自動建立,當然執行hive的使用者要有相應的os許可權才可以

insert overwrite directory '/user/hive/warehouse/insert_test_emp'

row format delimited fields terminated by

"\t"

select * from emp;

-- 查詢test1.emp表,寫入hdfs的/user/hive/warehouse/insert_test_emp目錄的000000_0檔案

-- 目錄和檔案會自動建立,當然執行hive的使用者要有相應的hdfs許可權才可以

from from_statement

insert overwrite [local] directory directory1 select_statement1

[insert overwrite [local] directory directory2 select_statement2] ...;

from (select * from emp) tmp

insert overwrite local directory '/tmp/hivetmp1'

row format delimited fields terminated by

"\t"

select empno, ename

insert overwrite directory '/user/hive/warehouse/hivetmp2'

row format delimited fields terminated by

"\t"

select ename;

-- 從乙個from子句,插入資料到多個目錄

-- 如果資料來自乙個from子句,那麼這個子句必須起乙個別名

from emp

insert overwrite local directory '/tmp/hivetmp2'

row format delimited fields terminated by

"\t"

select empno, ename

insert overwrite directory '/user/hive/warehouse/hivet***'

row format delimited fields terminated by

"\t"

select ename;

-- 從乙個表,插入資料到多個目錄

hive的dml,select相關:跟通用的sql是一樣的,略。

分組聚合會產生資料傾斜,而 union all 常用於處理資料傾斜問題。

case語句和通用的sql語法中的case一樣的:

select ename, salary, 

case

when salary > 1

and salary <= 1000

then

'lower'

when salary > 1000

and salary <= 2000

then

'middle'

when salary > 2000

and salary <= 4000

then

'high'

else

'highest'

endfrom emp;

-- 就是標準的case語句格式

[toc]

crontab 簡單梳理

基本格式 command 分 時 日 月 周 命令 第1列表示分鐘1 59每分鐘用 或者 1表示 第2列表示小時1 23 0表示0點 第3列表示日期1 31 第4列表示月份1 12 第5列標識號星期0 6 0表示星期天 第6列要執行的命令 延遲一秒,需要用到 sleep 1 這個引數,注意是分號 比...

rabbitmq 簡單梳理

概念 生產者 producer,簡寫p 負責發布訊息。交換機 exchange,簡寫x 負責中轉訊息。路由 route,簡寫r 即 x q的路線名。訊息佇列 queue,簡寫q 負責臨時儲存訊息。消費者 customer,簡寫c 負責處理訊息。完整關係 p 負責發布訊息,可繫結到乙個exchange...

Hive DML 資料操作

1 資料匯入 1 向表中裝載資料 load 1 語法 hive load data local inpath opt module datas student.txt overwrite into table student partition partcol1 val1,1 load data 表...