设为首页 加入收藏

TOP

HIVE学习,安装,命令
2019-03-19 12:48:33 】 浏览:60
Tags:HIVE 学习 安装 命令

HIVE安装:

各版本下载地址:http://archive.apache.org/dist/hive/

1.mysql中创建一个hive数据库

2.解压tartar -zxvf xxxx.tar.gz

3.mysql数据库驱动jar包上传到hive/lib

4.进入hive/conf目录,创建hive-site.xml文件,内容如下:

<xml version="1.0">

<xml-stylesheet type="text/xsl" href="configuration.xsl">

<configuration>

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://192.168.123.219:3307/hive</value>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>root</value>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>123.</value>

</property>

</configuration>

5.进入bin目录,pwd查看当前目录,将当前目录加入~/.bash_profile文件

HIVE_HOME=/root/hive

export PATH=$HIVE_HOME/bin:$PATH

HIVE命令行命令:

清屏:ctrl+L或者!clear

查看数据仓库中的表:show tables

查看数据仓库中的内置函数:show functions

-- 表示注释

查看表结构:desc 表名

查看HDFS上的文件:dfs -ls 目录

执行操作系统的命令:! 命令

执行hql语句:

Select * from test1;

Select tname from test1;

执行sql脚本:source /home/my.sql

hive -S进入静默模式,不打印调试信息

HIVE远程服务启动:

端口号:10000

启动方式:hive --service hiveserver

HIVE基本数据类型:

tinyint/smallint/int/bigint:整数类型

float/double:浮点数类型

boolean:布尔类型

string:字符串类型

HIVE复杂数据类型:

Array:数组类型,由一系列相同数据类型的元素组成

Map:集合类型,包含key->value键值对,可以通过key来访问元素

Struct:结构类型,,可以包含不同数据类型的元素。这些元素可以通过“点语法”的方式来得到所需要的元素。

HIVE时间类型

Date:Hive0.12.0开始支持

Timestamp:Hive0.8.0开始支持

内部表(table):

与数据库中的table在概念上是类似

每一个TableHive中都有一个相应的目录存在这个目录中

删除表时,元数据与数据都会被删除

create table t1(tid int,tname string,age int);

location ‘/mytable/hive/t2’指明存储位置

row format delimited fields terminated by ‘,’;指明用逗号分隔列

分区表(partition

partition对应于数据库的Partition列的密集索引

Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中

create table partiton_table(sid int,sname string) partitioned by (gender string) row format delimited fields terminated by ’,’;

外部表(External Table

指向已经在HDFS中存在的数据,可以创建Partition

它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异

外部表只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接,当删除一个外部表时,仅删除该链接

桶表(Bucket Table

桶表时对数据进行哈希取值,然后放到不同文件中存储。

视图(View:

视图是一种续表,是一个逻辑概念,可以跨越多张表

视图建立在已有表的基础上,视图赖以建立的这些表称为基表

视图可以简化复杂的查询

HIVE数据导入:

1.使用Load语句,语法:

LOAD DATA [LOCAL] INPATH ‘filepath’[OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1,partcol2=val2 ...)]

Eg: load data local inpath ‘/root/data/student1.txt’into table t2;

导入目录所有文件并覆盖已有:load data local inpath ‘/root/data/’overwrite into table t3

hdfs下文件导入:load data inpath ‘/input/student01.txt’overwrite into table t3

导入分区表:loac data local inpath ‘/root/data/data1.txt’into table partition_table partition (gender=’M’);

2.使用sqoop进行数据的导入

sqoop下载地址:sqoop.apache.org

sqoop安装:

1.解压:tar -zxvf sqoop-1.x.x.tar.gz

2.设置环境变量:export HADOOP_COMMON_HOME=~/training/hadoop-2.x/

export HADOOP_MAPRED_HOME=~/training/hadoop-2.x/

3.jdbc驱动导入sqooplib目录下

sqoop导入导出数据:

使用sqoop导入oracle数据到HDFS中:./sqoop import --connect jdbc:oracle:thin:@192.168.10.247:1521:orcl --username root --password 123456 --table emp --columns ‘empno,ename,job,sal,deptno’-m 1 --target-dir ‘/sqoop/emp’

使用sqoop导入oracle数据到HIVE中:./sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.10.247:1521:orcl --username root --password 123456 --table emp --columns ‘empno,ename,job,sal,deptno’-m 1

使用sqoop导入oracle数据到HIVE中,并制定表名:./sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.10.247:1521:orcl --username root --password 123456 --table emp --columns ‘empno,ename,job,sal,deptno’-m 1 --hive-table emp1

使用sqoop导入oracle数据到HIVE中,并使用where条件:./sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.10.247:1521:orcl --username root --password 123456 --table emp --columns ‘empno,ename,job,sal,deptno’-m 1 --hive-table emp2 --where ‘DEPTNO=10’

使用sqoop导入oracle数据到HIVE中,并使用查询语句:./sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.10.247:1521:orcl --username root --password 123456 --table emp -m 1 --query ‘SELECT * FROM EMP WHERE SAL<2000 AND $CONDITIONS’--target-dir ‘/sqoop/emp5’--hive-table emp5

使用sqoopHIVE中的数据导出到oracle中:./sqoop export --connect jdbc:oracle:thin:@192.168.10.247:1521:orcl --username root --password 123456 -m 1 --table MYEMP --export-dir ****

HIVE-简单查询和fetch task

查询的语法SELECT [ALL|DISTINCT] select_expr,select_expr,... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list] | [ORDER BY col_list] ] [LIMIT number]

查询所有员工的所有信息:select * from emp;

查询员工信息:员工号 姓名 月薪:select empno,ename,sal from emp;

查询员工信息:员工号 姓名 月薪 年薪:select empno,ename,sal,sal*12 from emp;

查询员工信息:员工号 姓名 月薪 年薪 奖金 年收入:select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0) from emp;

查询奖金为null的员工:select * from emp where comm is null;

使用distinct来去掉重复记录:select distinct deptno,job from emp;

fetch task 简单查询不需要转换成mapreduce左右,配置方式如下:

set hive.fetch.task.conversion=more;

hive --hiveconf hive.fetch.task.conversion=more

修改hive-site.xml文件

查询10号部门的员工:select * from emp where deptno=10;

查询名叫KING的员工:select * from emp where ename=’KING’;

查询部门号是10,薪水小于2000的员工:select * from emp where deptno=10 and sal<2000;

模糊查询:查询名字以S打头的员工:select empno,ename,sal from emp where ename like ‘s%’;

模糊查询:查询名字含有下划线的员工:select empno,ename,sal from emp where ename like ‘%\\_%’;

查询中使用排序:

查询员工信息:员工号 姓名 月薪 按照月薪排序:select empno,ename,sal from emp order by sal;

order by 后面可以跟: 列,表达式,别名,序号

查询员工信息,按照奖金排序:select empno,ename,sal,comm from emp order by comm;

null升序排在最前,降序排在最后

数学函数:

四舍五入:round(数字,保留位数)

select round(45.926,2);

向上取整:ceil

select ceil(45.9); 结果为46

向下取整:floor

select floor(45.9);结果为45

字符函数:

lower:把字符串转成小写

upper:把字符串转成大写select upper(‘Hello World’)

length:字符串长度 select length(‘你好’)

concat:拼加一个字符串 select concat(‘Hello’,’World’)

substr:取字符串子串

trim:去掉字符串前后空格

lpad:左填充 select lpad(‘abcd’,10,’*’),rpad(‘abcd’,10,’*’);

rpad:右填充

收集函数和转换函数:

收集函数size:size(map(<key,value>,<key,value>))

select size(map(1.’TOM’,2,’Marry’));结果为2

转换函数:select cast(1 as bigint); select cast(1 as float);select cast(‘2015-09-08’as date);

日期函数:

to_date:返回日期 select to_date(‘2015-03-14 11:23:11’);返回2015-03-14

year,month,day:返回年月日

weekofyear:返回时间是一年中的第几个星期 select weekofyear(‘2015-03-14 11:23:11’)

datediff:返回两个日期相差天数

date_add,date_sub:日期加上或减去多少天

条件函数:

coalesce:从左到右返回第一个不为null的值

select comm,sal,coalesce(comm,sal) from emp;

case...when...:条件表达式:给员工涨工资,总裁1000 经理800 其他400

select ename,job.sal.

case job when ‘PRESIDENT’then sal+1000

when ‘MANAGER’then sal+800

else sal+400

end

from emp;

聚合函数:

count,sum,min,max,avg

表生成函数:explode

HIVE的表连接:

等值连接:有一个等号

select e.empno,e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno;

不等值连接:

select e.empno,e.ename,e.sal,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;

外连接:按部门统计员工人数:部门号,部门名称,人数

select d.deptno,d.dname,count(e.empno) from emp e right outer join dept d on (e.deptno=d.deptno) group by d.deptno,d.dname;

自连接:查询员工的姓名和员工老板的姓名

select e.ename,b.ename frome emp e,emp b where e.mgr=b.empno;

自连接的核心:通过表的别名将同一张表视为多张表

HIVE的子查询:

Hive只支持:fromwhere子句中的子查询

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hive On Spark搭建(cdh) 下一篇Hue管理用户对于hive数据表的操作..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目