【趙強老師】在Hive中使用Load語句加載數據

1、Hive中load語句的語法說明

Hive Load語句不會在加載數據的時候作任何轉換工做,而是純粹的把數據文件複製/移動到Hive表對應的地址。語法格式以下:測試

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename \
[PARTITION (partcol1=val1, partcol2=val2 ...)]

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename \
[PARTITION (partcol1=val1, partcol2=val2 ...)] \
[INPUTFORMAT 'inputformat' SERDE 'serde'] (3.0 or later)

 

幾點說明:spa

  • 若是命令中帶有LOCAL,說明從本地文件系統加載數據,文件路徑能夠是相對路徑,也能夠是絕對路徑。在這種狀況下,首先將文件從本地複製到hdfs相應的位置,而後移動到hive表格中,這個時候原始數據文件是存在於Hive表之下的路徑下。
  • 若是不包含LOCAL關鍵字,則移動HDFS文件到目標表中。
  • filepath 能夠是一個相對路徑,也能夠是一個絕對路徑。能夠是一個文件,也能夠是一個文件夾目錄。若是是一個目錄,這個時候文件夾下的全部文件都會被加載。
  • 命令中若是帶有overwirte,表明加載數據以前會清空目標表格,不然就是追加的方式。
  • 若是表是分區表則必須指定PARTITION從句,不然會報以下錯誤:
    FAILED:SemanticException [Error 10062]: Need to specify partition columns because the destination table is partitioned

2、load語句示例

  • 建立以下的表結構(員工表)
create table emp
(empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int,
deptno int)
row format delimited fields terminated by ',';
  • 測試數據以下:(emp.csv)
7369,SMITH,CLERK,7902,1980/12/17,800,0,20
7499,ALLEN,SALESMAN,7698,1981/2/20,1600,300,30
7521,WARD,SALESMAN,7698,1981/2/22,1250,500,30
7566,JONES,MANAGER,7839,1981/4/2,2975,0,20
7654,MARTIN,SALESMAN,7698,1981/9/28,1250,1400,30
7698,BLAKE,MANAGER,7839,1981/5/1,2850,0,30
7782,CLARK,MANAGER,7839,1981/6/9,2450,0,10
7788,SCOTT,ANALYST,7566,1987/4/19,3000,0,20
7839,KING,PRESIDENT,-1,1981/11/17,5000,0,10
7844,TURNER,SALESMAN,7698,1981/9/8,1500,0,30
7876,ADAMS,CLERK,7788,1987/5/23,1100,0,20
7900,JAMES,CLERK,7698,1981/12/3,950,0,30
7902,FORD,ANALYST,7566,1981/12/3,3000,0,20
7934,MILLER,CLERK,7782,1982/1/23,1300,0,10
  • 加載HDFS的數據到Hive的表
load data inpath '/scott/emp.csv' into table emp;
  • 加載本地的數據到Hive的表
load data local inpath '/root/temp/emp.csv' into table emp;

固然咱們也能夠使用insert語句加載數據。例如,咱們建立以下的分區表:code

create table emp_part_1
(empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int)
partitioned by (deptno int)
row format delimited fields terminated by ',';

使用insert語句將數據插入到對應的分區上。orm

插入10號部門的員工數據
insert into table emp_part_1 partition(deptno=10) 
select empno,ename,job,mgr,hiredate,sal,comm from emp where deptno=10;

插入20號部門的員工數據
insert into table emp_part_1 partition(deptno=20) 
select empno,ename,job,mgr,hiredate,sal,comm from emp where deptno=20;

插入30號部門的員工數據
insert into table emp_part_1 partition(deptno=30) 
select empno,ename,job,mgr,hiredate,sal,comm from emp where deptno=30;

這裏咱們使用了一個子查詢查詢出了對應部門的員工數據,再使用insert語句插入到對應的分區上。blog

相關文章
相關標籤/搜索