zoukankan      html  css  js  c++  java
  • 从零自学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

  • 相关阅读:
    VXDIAG VX Manager V1.8.0.0814更新指南
    Java Stream 源码分析
    RESTful接口实战
    Java面经
    开发中遇到的问题:push to origin/master was rejected错误解决方案
    开发遇到的问题:springboot问题:Unable to find main class
    java封神之路-stream流-进阶
    Java封神之路-stream流-入门
    Java封神之路-设计模式-工厂模式
    JAVA封神之路-设计模式-单例模式
  • 原文地址:https://www.cnblogs.com/mephisto/p/7733035.html
Copyright © 2011-2022 走看看