从零自学Hadoop(25):Impala相关操做下

  阅读目录

本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文连接,谢谢合做。html

文章是哥(mephisto)写的,SourceLink缓存

 

     上一篇,咱们介绍Impala的相关操做。oop

   下面咱们开始继续进一步的了解Impala的相关操做。spa

导入数据

一:INSERT VALUES

  该方式不适合载入大量的数据到基于 HDFS (HDFS-based)的表,由于插入操做没法并行,而且每个语句会产生单独的数据文件,造成不少小文件。
  不要运行每次只插入单行数据的 不少条的 INSERT ... VALUES 语句的脚本,会产生不少小文件。将数据都放在VALUES中会好不少,就没有那多的小文件。3d

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 语法,每一组新插入的数据,都会追加到原来的数据后。 code

 

 

  咱们能够看到hdfs中有两个文件。也就是说insert一次就生成一个文件,因此会产生不少小文件。htm

  使用insert overwrite table 语法,每一组新插入的数据,都会覆盖表中原有的数据。blog

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.txthadoop

  从本地上传到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

相关文章
相关标签/搜索