環境相關:
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 表...