hive 表的常用操作

  • 使用load 方式加载数据到Hive 表中,注意分区表加载数据的特殊性
  • 如何保存HiveQL 查询结果:保存到表中,保存到本地文件(注意指定列分隔符)
  • 常见查询练习,如group by、having、join、sort by、order by 等。

一:hive 表的操作

1.1.1 hive的库的创建与数据库的查看:

  hive(default)> create database yangyang;

 hive(default)> use yangyang;
 hive(yangyang)>desc database yangyang;

1.1.2 hive 表的创建查看与数据导入

创建emp 表:

hive(yangyang)> create table emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
row format delimited fields terminated by ‘\t‘;

1.1.3 hive 创建表的三种方式:

1. 直接在数据库中创建:

hive(yangyang)>create table dept(
               deptno int,
               dname string,
               loc string
               )
row format delimited fields terminated by ‘\t‘;

2.使用已经存在的数据库进行数据抽取从新生成一张表:

   create table emp2 as select * from emp;
    1.此方法抽取的表数据与表结构都会存在
    2.创建表的时候会执行mapreduce 的后端程序

3.创建一张空表带数据结构

 create table emp3 like emp;
select * from emp3;


1.1.4 hive 数据的导入处理:

1. 正常空表导入:

load data local inpath "/home/hadoop/emp.txt" into table emp;
load data local inpath "/home/hadoop/dept.txt" into table dept; 

2. 从hdfs 中导入数据

指定 hdfs 目录进行数据导入:
load data inpath "/user/hive/warehouse/yangyang.db/emp/emp.txt" into table emp3;

3. 加载数据进行数据覆盖:

hdfs dfs -put emp.txt /user
load data inpath "/user/emp.txt" overwrite into table emp;

注释:hive 在导入数据的时候不是空表的时候默认是追加导入append
    一般在导入重复数据的时会增加overwrite 进行数据覆盖。

4.创建表的时候用select完成

create table emp5 as select * from emp;

5.创建数据用insert into 创建表

先创建一个空表:
create table emp4 like emp ;
然后插入数据:
insert into table emp4 select * from emp; 

1.1.5hive库的导出:

1.导出到本地系统:

insert overwrite local directory ‘/home/hadoop/exp‘
row format delimited fields terminated by ‘\t‘ select * from emp ;

2. 导出到hdfs文件系统上面:

insert overwrite directory ‘/emp.txt‘ select * from emp ;

3. 导出文本文件:

  hive -e ‘select * from yangyang.emp‘ >> 1.txt

4.采用sqoop 数据导入导出。

hive 表的查看方式:
select * from dept;
select * from emp;


desc formatted dept;
desc formatted emp;

查询前几个字段:
select emp.ename from emp limit 2;

去重复查询:
select distinct(deptno) from emp limit 2;

输出结果进行排序:
select * from emp order by empno;

统计行数:
select count(empno) from emp; 

除去重复统计:
select count(distinct deptno) from emp;

分组统计:
select deptno,count(ename) from emp group by deptno ;

分组统计求最大值:
select deptno,max(sal) from emp group by deptno ;

分组之后过了统计:
select deptno,count(ename) from emp group by deptno having count(ename)>3;

设置mapreduce的个数。
hive >set mapreduce.job.reduces=3;
hive > insert overwrite local directory ‘/home/hadoop/exp1‘
row format delimited fields terminated by ‘\t‘ select * from emp sort by empno;


1.1.6 关于hive 的排序功能:

 order by
        --全局排序   asc  desc
sort by
    --局部排序,每个reduce进行排序,全局不排序
distribute by
    --类似与分区partition,通常和sort by联合使用
    --通常sort by放在distribute by之后
cluster by
    --相当于distribute by和sort by的结合(分区和排序字段一样)
insert overwrite local directory ‘/home/hadoop/exp2‘
row format delimited fields terminated by ‘\t‘ select * from emp
distribute by deptno sort by empno;

hive 的join 查询

右连接
select dept.dname,emp.ename from dept right join emp on emp.deptno=dept.deptno ;

左连接
select dept.dname,emp.ename from emp left join dept on emp.deptno=dept.deptno ; 

查询是否要走mapreduce 程序:
<property>
  <name>hive.fetch.task.conversion</name>
  <value>more</value>  <!-- minimal 改成more 更多的命令不走map人deuce-->
  <description>
    Some select queries can be converted to single FETCH task minimizing latency.
    Currently the query should be single sourced not having any subquery and should not have
    any aggregations or distincts (which incurs RS), lateral views and joins.
    1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only
    2. more    : SELECT, FILTER, LIMIT only (TABLESAMPLE, virtual columns)
  </description>
</property>
select emp.empno,emp.ename from emp;

select count(empno) from emp;

explain 查看hive命令的更多的解析状态:
explain  select count(empno) from emp;



hive 查询中的四个查询
order by 分组查询 (全局数据的排序/只有一个reduce 输出)
select * from emp order by empno desc;


sort by  对每个reduce 的内部进行排序 对全局结果来说 是没有排序的
         设置hive中的mapreduce 的数目
         set mapreduce.job.reduces=3
         select * from emp sort by empno asc;


distribute by
    分区partition
    类似于MapReduce中分区partition,对数据进行分区,结合sort by进行使用
    insert overwrite local directory ‘/root/emp.txt‘ select * from emp distribute by deptno sort by empno asc ;
    注意事项:
    distribute by 必须要在sort by  前面。


>> cluster by
    当distribute by和sort by 字段相同时,可以使用cluster by ;
    insert overwrite local directory ‘/root/emp.txt‘ select * from emp cluster by empno ;

原文地址:http://blog.51cto.com/flyfish225/2097253

时间: 2024-10-16 20:15:16

hive 表的常用操作的相关文章

Hive数据类型及常用操作总结(一)

一.Hive 数据类型 Hive 提供了基本数据类型和复杂数据类型,复杂数据类型是 Java 语言所不具有的. 基本数据类型 Hive是用java开发的,hive里的基本数据类型和java的基本数据类型也是一一对应的,除了string类型.有符号的整数类型:TINYINT.SMALLINT.INT和BIGINT分别等价于java的byte.short.int和long原子类型,它们分别为1字节.2字节.4字节和8字节有符号整数.Hive的浮点数据类型FLOAT和DOUBLE,对应于java的基本

Hbase 表与Hive 表的映射操作

一.环境准备 需要将HBase的jar包拷贝到Hive中,以便Hive运行时能访问到Hbase 这里演示创建软连接的方式 ln -s $HBASE_HOME/lib/HBase-common-1.3.1.jar $HIVE_HOME/lib/HBase-common-1.3.1.jar ln -s $HBASE_HOME/lib/HBase-server-1.3.1.jar $HIVE_HOME/lib/HBase-server-1.3.1.jar ln -s $HBASE_HOME/lib/H

Hive命令行常用操作(数据库操作,表操作)

数据库操作 查看所有的数据库 hive> show databases ; 使用数据库default hive> use default; 查看数据库信息 hive > describe database default; OK db_name comment location owner_name owner_type parameters default Default Hive database hdfs://hadoop1:8020/user/hive/warehouse pub

Hive基础之Hive表常用操作

本案例使用的数据均来源于Oracle自带的emp和dept表 创建表 语法: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED

Hive Shell常用操作

1.本文命令的两种模式: 交互模式,即hive的shell环境:hive > …. 非交互模式:普通的Linux命令模式:%..... 2.Hive Shell常用操作 1) hive -e:从命令行执行指定的HQL,不需要分号: % hive -e 'select * from dummy' > a.txt 2) hive –f: 执行HQL脚本 % hive -f /home/my/hive-script.sql 3) hive -i:在进入交互模式之前,执行初始化sql文件 % hive

表单的常用操作

知识点: 表单是前后端数据交互的一种重要方式,使用js操作表单也是十分常见的.不过好像每次到表单操作我都要去查API,所以本次想对表单的常用操作做个小结,以备后面随时查看. 首先,我们要知道如下的一些知识: 1. 表单字段在向后台提交数据时,使用的是表单控件的name属性的value,与id无关.(大家可以在百度搜细说表单找到Fish Li大神的这篇文章看看) 2. 表单向服务端传数据时会经过编码.目前基本上只会只使用二种编码规则:application/x-www-form-urlencode

hive表信息查询:查看表结构、表操作等--转

原文地址:http://www.aboutyun.com/forum.PHP?mod=viewthread&tid=8590&highlight=Hive 问题导读:1.如何查看hive表结构?2.如何查看表结构信息?3.如何查看分区信息?4.哪个命令可以模糊搜索表? 1.hive模糊搜索表  show tables like '*name*'; 2.查看表结构信息  desc formatted table_name;  desc table_name; 3.查看分区信息  show p

hive表信息查询:查看表结构、表操作等

转自网友的,主要是自己备份下 有时候不记得! 问题导读:1.如何查看hive表结构?2.如何查看表结构信息?3.如何查看分区信息?4.哪个命令可以模糊搜索表 1.hive模糊搜索表 show tables like '*name*'; 2.查看表结构信息  desc formatted table_name;  desc table_name; 3.查看分区信息  show partitions table_name; 4.根据分区查询数据  select table_coulm from ta

好程序员大数据学习路线之hive表的查询

好程序员大数据学习路线之hive表的查询 1.join 查询 1.永远是小结果集驱动大结果集(小表驱动大表,小表放在左表). 2.尽量不要使用join,但是join是难以避免的. left join . left outer join . left semi join(左半开连接,只显示左表信息) hive在0.8版本以后开始支持left join left join 和 left outer join 效果差不多 hive的join中的on只能跟等值连接 "=",不能跟< &g