您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何在Hive中使用Load語句加載數據”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何在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)
幾點說明:
如果命令中帶有LOCAL,說明從本地文件系統加載數據,文件路徑可以是相對路徑,也可以是絕對路徑。在這種情況下,首先將文件從本地復制到hdfs相應的位置,然后移動到hive表格中,這個時候原始數據文件是存在于Hive表之下的路徑下。
如果不包含LOCAL關鍵字,則移動HDFS文件到目標表中。
filepath 可以是一個相對路徑,也可以是一個絕對路徑。可以是一個文件,也可以是一個文件夾目錄。如果是一個目錄,這個時候文件夾下的所有文件都會被加載。
命令中如果帶有overwirte,代表加載數據之前會清空目標表格,否則就是追加的方式。
如果表是分區表則必須指定PARTITION從句,否則會報如下錯誤:
FAILED:SemanticException [Error 10062]: Need to specify partition columns because the destination table is partitioned
創建如下的表結構(員工表)
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語句加載數據。例如,我們創建如下的分區表:
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語句將數據插入到對應的分區上。
插入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語句插入到對應的分區上。
以上是“如何在Hive中使用Load語句加載數據”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。