從零自學Hadoop(25):Impala相關操作下


  閱讀目錄

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。

文章是哥(mephisto)寫的,SourceLink

 

     上一篇,我們介紹Impala的相關操作。

   下面我們開始繼續進一步的了解Impala的相關操作。

導入數據

一:INSERT VALUES

  該方式不適合載入大量的數據到基於 HDFS (HDFS-based)的表,因為插入操作無法並行,並且每一個語句會產生單獨的數據文件,形成很多小文件。
  不要運行每次只插入單行數據的 很多條的 INSERT ... VALUES 語句的腳本,會產生很多小文件。將數據都放在VALUES中會好很多,就沒有那多的小文件。

insert into student values ('1','張三','','2017-10-23 10:10:20'), ('2','李四','','2017-10-23 10:10:20'), ('3','王五','','2017-10-23 10:10:20');
insert into student values ('4','張三1','','2017-10-23 10:10:20'), ('5','李四1','','2017-10-23 10:10:20'), ('6','王五1','','2017-10-23 10:10:20');

  使用insert into table 語法,每一組新插入的數據,都會追加到原來的數據后。 

 

 

  我們可以看到hdfs中有兩個文件。也就是說insert一次就生成一個文件,所以會產生很多小文件。

  使用insert overwrite table 語法,每一組新插入的數據,都會覆蓋表中原有的數據。

insert overwrite student values ('7','張三2','','2017-10-23 10:10:20'), ('8','李四2','','2017-10-23 10:10:20'), ('9','王五2','','2017-10-23 10:10:20');

二:LOAD DATA語句

  LOAD DATA 語句簡化了 Impala 內部表從 HDFS 位置移動一個或目錄下所有數據文件到該表對應的 Impala 數據目錄中的 ETL 過程。

  新建待導入文件數據 student.txt

  從本地上傳到hdfs

sudo -u impala hdfs dfs -put student.txt /tmp/student.txt

  查看

hadoop fs -ls /tmp/

  導入

load data inpath '/tmp/student.txt' into table student ;

  可以看到文件的內容導入到了表中,
  並且對應的hdfs目錄的文件已經不再了。

  重新將文件上傳到對應目錄
  然后重新導入
  這次我們使用overwrite

load data inpath '/tmp/student.txt' overwrite into table student ;

  可以看到數據已經加載進去,並且原有的數據都被替換掉了。

三:分區表的load data

  新增分區

alter table student_p  add partition (year='2017',month='01',day='01');
alter table student_p  add partition (year='2017',month='01',day='02');

load data inpath '/tmp/student.txt' overwrite into table student_p  partition(year='2017',month='01',day='01') ;
load data inpath '/tmp/student.txt' overwrite into table student_p  partition(year='2017',month='01',day='02') ;

  這之間還需要再將文件上傳到hdfs

select * from student_p;

  可見指定了分區后,不會影響到其他分區的數據。

 

查詢

  查詢這里就只舉幾個可能需要注意到的,其他的語法可以詳見官網。

一:limit

  設置select查詢中結果集的最大行數

select * from student limit 1;

二:offset

  offset可以和limit一起使用,可以用於模擬“分頁”結果集,實際中最好不要這樣用,盡量的將結果集緩存到應用端,在應用端分頁。

select * from student order by id  limit 1 offset 0;
select * from student order by id  limit 1 offset 1;

 

  

--------------------------------------------------------------------

  到此,本章節的內容講述完畢。

系列索引

  【源】從零自學Hadoop系列索引

 

 

 

 

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。

文章是哥(mephisto)寫的,SourceLink

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM