商业智能BIHadoop系大数据

Hive学习笔记2

2016-01-30  本文已影响197人  wangmin
  • Hive 的数据导入: 可以使用Load命令导入,也可以使用Sqoop组件导入数据。

Hive执行load导入数据。

load data local inpath ‘/root/data/student01.txt’ into table t2;

local 表示数据从本地操作系统中导入。如果不写local表示从hdfs中导入。

local data local inpath ‘/root/data/student02.txt’ into table t3;

将/root/data 下的所有数据导入t3表中,并且覆盖原来的数据 load data local inpath ‘/root/data/’ overwrite into table t3

将HDFS中,/input/student01.txt导入到t3 load data inpath ‘/input/student01.txt’ overwrite into table t3;

load data local inpath ‘/root/data/data1.txt’ into table partition_table partition (gender=’M’);

Sqoop 数据的导入和导出

关于sqoop的导入和导出很简单,直接下载压缩包,然后解压,设置两个环境变量就可以。

设置第一个环境变量:

  • export HADOOP_COMMON_HOME=….(hadoop的安装目录)
  1. 使用Sqoop导入Oracle数据到HDFS中:
    ./sqoop import –connect jdbc:oracle:thin:@192.168.56.101:1521:orcl –username scott –password tiger –table emp –columns ‘empno, ename, job, sal, deptno’ -m 1 –target-dir ‘/sqoop/emp’
    但是这样指向会报错,因为需要jdbc驱动,需要把oracle的jdbc传入到sqoop的lib目录下。
    这样就会成功执行sqoop的数据导入和导出,整个执行过程就是通过MapReduce来完成的,
  2. 使用sqoop导入oracle数据到Hive中
    ./sqoop import –hive-import –connect jdbc:oracle:thin:@192.168.56.101:1521:orcl –username scott –password tiger –table emp -m 1 –columns ‘empno,ename,job,sal,deptno’
  3. 使用sqoop导入oracle数据到Hive中,并且指定表名
    ./sqoop import –hive-import –connect jdbc:oracle:thin:@192.168.56.101:1521:orcl –username scott –password tiger –table emp -m 1 –columns ‘empno,ename,job,sal,deptno’ –hive-table emp1
  4. 使用sqoop导入oracle数据到hive表中,并使用where条件
    ./sqoop import –hive-import –connect jdbc:oracle:thin:@192.168.56.101:1521:orcl –username scott –password tiger –table emp -m 1 –columns ‘empno,ename,job,sal,deptno’ –hive-table emp1 –where ‘DEPTNO=10’
  5. 使用sqoop导入oracle数据到hive中,并使用查询语句
    ./sqoop import –hive-import –connect jdbc:oracle:thin:@192.168.56.101:1521:orcl –username scott –password tiger -m 1 –query ‘SELECT * FROM EMP WHERE SAL<2000 AND $CONDITIONS’ –target-dir ‘/sqoop/emp5’ –hive-table emp5
    这里需要注意的是$CONDITIONS
  6. 使用sqoop将hive中的数据导出到oracle数据库中。
    ./sqoop export –connect jdbc:oracle:thin:@192.18/56.101:1521:orcl –username soctt –password tiger -m 1 –table MYEMP –export-dir …..

Hive的数据查询

在hive中进行数据操作的时候,总是将查询转换成一个MapReduce任务进行执行,但是对于简单的任务是没有必要转成一个MapReduce任务执行的,这个时候就可以配置一个fetch task功能,让fetch task功能支持简单的数据的操作。

配置方式有以下几种:

前两种方式都可以配置这个功能,但是这种配置都是临时的。可以修改hive-site.xml文件使其永久有效。

修改hive-site.xml文件,加一行属性:

<property>
<name>hive.fetch.task.conversion</name>
<value>more</value>
</property>

Hive的函数:

数学函数:

select round(45.926, 2); 45.926保留两位小数,最终结果是45.93

字符函数:

select lower(‘Hello WORLD’), upper(‘hhhh’) select length(‘HelloWorld’) ….
lpad:左填充 rpad:右填充
select lpad(‘abcd’, 10, ‘’), rpad(‘abcd’, 10, ‘’)
收集函数

size(map(<key, value>, <key, value>));

转换函数

select cast(1 as bigint); select cast(‘2015-08-10’ as date);

日期函数

条件函数

聚合函数:

表生成函数


Hive的表连接

等值连接:

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

不等值连接:

外连接:

通过外连接可以将对于连接条件不成立的记录任然包含在最后的结果中:其中分成:

Hive的子查询:

Hive的java客户端操作:

首先需要启动Hive远程服务:hive –service hiveserver

Hive的JDBC客户端操作:

hive-jdbc-…jar 这个就是hive的jdbc文件。

上一篇下一篇

猜你喜欢

热点阅读