• hive的简单使用


    一、一些说明
    1.支持的操作
    hive 默认不支持updata 和 delete操作 insert也是执行缓慢,主要用于数据的计算
    hive 数据类型---字符串,大部分与java一致。
    
    2.内外表的区别
    内部表:完全交给hive管理,数据会存储在hive所在路径,删除时删掉源文件。
    外部表:增加hive管理的表,创表时记录数据所在路径,不移动数据,删除时不删除源文件,只删除路径链接。
    
    二、简单的命令
    show databases;                                                              显示数据库
    create database dbName;                                                    创建数据库
    drop database [IF EXISTS] dbName [cascade]                             有则强制删除
    use {databaseName};                                                        使用某一数据库
    
    desc tabName                                                                  查看表结构
    show tables;                                                                   查看当前库下的表
    show tables [like '*'] [in dbName]                                         查看某库某些表
    create table tabName{columnName columnType,...}                   建(内部)表(需指定分隔符)
    create external table tabName {同上}                                   建(外部)表
    location 'hdfs.path';                                                       指定外部表源数据路径
    row format delimited fields terminated by '*';                          直接写在创表语句末尾。
    lines terminated by '
    ';                              航分隔符默认"
    ",暂时也只支持这一个
    map keys terminated by
    alter table tabName RENAME TO newName;        重命名表名 alter table tabName ADD COLUMNS (N T);        向已有表中添加列 insert into tabName(columnName)values(data);            向表中添加数据 drop table tbname; 删除表结构及数据

    HIVE的数据导入的两种范式:
    从linux上导入 load data local inpath 'linux根目录下写' into table dbName.tabName;
    从HDFS的某一目录导入 load data inpath 'hdfs根目录下开始写' into table dbName.tabName; --------------------------------- --->此方式上传会删除源文件,相当于将数据剪切
    hadoop job -kill {job_id} 结束失败job的命令

     三、HIVE的JDBC

      

     1      //1.加载驱动
     2         Class.forName("org.apache.hive.jdbc.HiveDriver");
     3         //2.打开连接
     4         Connection conn = DriverManager.getConnection("jdbc:hive2://sz01:10010/test");
     5         //mysql连接仅此处不同,三个参数
     6         //jdbc--->(url  = jdbc:mysql://IP:3306/dbName, u,p)
     7         //3.获得操作会话对象
     8         Statement statement = conn.createStatement();
     9         //4.操作hive
    10         String sql = "select * from test1 ";
    11         //5.接受结果
    12         ResultSet rSet = statement.executeQuery(sql);
    13         while (rSet.next()) {
    14             System.out.println(rSet.getInt(1)+"	"+rSet.getString(2));
    15         }
    16         //6.关闭连接
    17         rSet.close();
    18         statement.close();
    19         conn.close();        

     四、常用的建表语句 

    1. 直接建表法:  create table table_name(col_name data_type);
    2. 查询建表法:       create table table-name as (查询sql)------------------------->有数据,会执行MR过程
    3. like建表:       create table t2 like t1;------------------------------------------------>无数据,不执行MR过程

       创建时一般需指定表的结构等信息  

    1 row format delimited
    2 fields terminated by ','              列分隔符,行分隔符默认为"
    ",一般不配置
    3 collection items terminated by '-'        
    4 map keys terminated by ':'
    5 location '/user/t2'                 数据文件的位置(linux系统上的)----外部表
    6 stored as textfile;                数据格式默认为文本类型
    存储格式存储方式特点
    TextFile 行存储 存储空间消耗比较大,并且压缩的text 无法分割和合并 查询的效率最低,可以直接存储,加载数据的速度最高
    SequenceFile 行存储 存储空间消耗最大,压缩的文件可以分割和合并 查询效率高,需要通过text文件转化来加载                      
    RCFile 数据按行分块 每块按照列存储
    存储空间最小,
    查询的效率最高 ,
    需要通过text文件转化来加载,
    加载的速度最低。
    压缩快 快速列存取。
    读记录尽量涉及到的block最少 
    读取需要的列只需要读取每个row group 的头部定义。 
    读取全量数据的操作 性能可能比sequencefile没有明显的优势
    ORCFile 数据按行分块 每块按照列存储 压缩快,快速列存取 ,效率比rcfile高,是rcfile的改良版本
    Parquet 列存储 相对于PRC,Parquet压缩比较低,查询效率较低,不支持update、insert和ACID.但是Parquet支持Impala查询引擎

    五、保存hive表查询结果的方法
      1.保存到hdfs 在hdfs上运行
        hive -e "sql" >> /output/out.txt 一定要双引号
        hive -f hive.sql > /output/out.txt  
     
      2.保存到hdfs上 hive中执行
        insert overwrite dirctory /output/a.txt sql
        不支持 insert into 导出
      3.保存到linux上
        insert overwrite local directory /tmp/a.txt sql

      4.保存到hive表上    
        insert into table tName SQL                追加导入
        insert overwrite table tName SQL          覆盖导入
        
      5.创表保存数据
        create table tName as sql
      

  • 相关阅读:
    BZOJ3498PA2009 Cakes——三元环
    黑科技之三元环讲解
    BZOJ4317Atm的树&BZOJ2051A Problem For Fun&BZOJ2117[2010国家集训队]Crash的旅游计划——二分答案+动态点分治(点分树套线段树/点分树+vector)
    BZOJ2463[中山市选2009]谁能赢呢?——博弈论
    BZOJ2275[Coci2010]HRPA——斐波那契博弈
    BZOJ2281[Sdoi2011]黑白棋&BZOJ4550小奇的博弈——DP+nimk游戏
    BZOJ3435[Wc2014]紫荆花之恋——动态点分治(替罪羊式点分树套替罪羊树)
    Trie树学习总结
    kmp学习小结
    Hash学习小结
  • 原文地址:https://www.cnblogs.com/OnTheWay-0518/p/9636639.html
Copyright © 2020-2023  润新知