zoukankan      html  css  js  c++  java
  • Hive入门学习随笔(二)

    ====使用Load语句执行数据的导入

    --将操作系统上的文件student01.txt数据导入到t2表中

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

    --将操作系统上/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;

    --将操作系统上的data1.txt导入到分区t3表中

    load data local inpath 'root/data/data1.txt' into table t3 partition (gender='M')

    ===使用Sqoop实现数据的导入

    Sqoop是一个工具,用来进行Hadoop与关系型数据之间的批量数据的导入和导出。

    Sqoop的安装非常简单,只需要从网站上下载Sqoop的安装包,并配置环境变量即可。

    官网:http://sqoop.apache.org

    环境变量:

    由于Sqoop是基于Hadoop的,所以需要通过环境变量HADOOP_COMMON_HOME来指明Hadoop的安装目录。

    由于Sqoop是把作业最终转换成MapReduce的作业进行提交执行,所以,需要通过环境变量HADOOP_MAPRED_HOME来指明MapReduce的Jar目录。

    --使用Sqoop导入Oracle数据到HDFS中。

    ./sqoop import --connect jdbc:oracle:thin:@192.168.1.36:1521:orcl --username xxx --password xxx --table emp --columns 'empno,ename,job,sal' -m 1 --target-dir '/sqoop/emp'

    --使用Sqoop导入Oracle数据到Hive中。

    ./sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.1.36:1521:orcl --username xxx --password xxx --table emp --columns 'empno,ename,job,sal' -m 1 

    --使用Sqoop导入Oracle数据到Hive中,并且指定表名

    ./sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.1.36:1521:orcl --username xxx --password xxx --table emp --columns 'empno,ename,job,sal' -m 1  --hive-table emp1

    --使用Sqoop导入Oracle数据到Hive中,并且制定Where条件

    ./sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.1.36:1521:orcl --username xxx --password xxx --table emp --columns 'empno,ename,job,sal' -m 1  --hive-table emp1 --where 'DEPTNO=10'

    --使用Sqoop导入Oracle数据到Hive中,并且使用查询语句

    ./sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.1.36:1521:orcl --username xxx --password xxx --table emp --columns 'empno,ename,job,sal' -m 1  --hive-table emp1 --query 'SELECT * FROM EMP WHERE SAL<2000 $CONDITIONS' --target-dir '/sqoop/emp5' --hive-table emp5

    --使用Sqoop将Hive中的数据导出到Oracle中。

    ./sqoop export --connect jdbc:oracle:thin:@192.168.1.36:1521:orcl --username xxx --password xxx -m 1 --table MYEMP --export-dir HDFS路径

    Sqoop在业务系统中有着非常重要的作用,一般的应用场景是下面这个样子。

    ====Hive的数据查询

    --查询所有员工的所有信息

    select * from emp;

    --查询员工信息:员工号 姓名 月薪

    select empno, ename, sal 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 from rmp;

    ====Hive简单查询的FetchTask功能

    Hive0.10.0版本开始支持。开始了这个功能以后,我们执行一条简单的语句(没有函数、排序等)不会生成一个MapReduce作业。

    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 desc;

    ※order by后面可以使用:列名、表达式、别名、序号。

    另外,如果想使用需要进行排序的时候,需要设置下面的环境变量。

    set hive.groupby.orderby.position.alias=true;

    ※null排序:升序时null排最前面,降序时null排最后面,一般用法都是将null转换成0之后进行排序。

    ====Hive的函数

    内置函数可以直接调用。也可以通过编写java程序来自定义函数

    --内置函数

    --自定义函数

    ①、自定义UDF需要继承org.apache.hadoop.hive.ql.UDF

    需要实现evaluate函数,evaluate函数支持重载。

    ②、将程序打包放到目标机器上去,进入Hive客户端添加jar包

    命令例:hive>add jar /root/udfjar/udf_text.jar 

    ③、创建临时函数:CREATE TEMPORARY FUNCTION <函数名> AS 'java类名'

    命令例:hive>CREATE TEMPORARY FUNCTION myconcat AS 'demo.udf.ConcatString';

    ④、自动以函数使用。select <函数名> from table;

    ⑤、销毁临时函数:DROP TEMPORARY FUNCTION <函数名>

    ====Hive表连接

    Hive的表连接分为:等值连接、不等值连接、外链接、自连接

    --等值连接

    select e.empno, e.ename, e.sal, d.name 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.local 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;

    --自连接

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

    ====Hive中的子查询

    hive只支持from和where子句中的子查询

    例:select e.ename from emp e where e.deptno in (select d.deptno from dept d where d.dname='SALES' or d.dname='KING');

    注意:子查询中的空值:如果子查询返回的结果集中含有空值得话,我们不能使用not in,但是可以使用in

    ====Hive的JDBC客户端操作

    ①、启动Hive远程服务。命令:#hive --service hiveserver

    ②、JDBC客户端操作

    ====Hive的Thrift Java客户端操作

    --END--

  • 相关阅读:
    搭建 mariadb 数据库主从同步
    MySQL--MVCC
    剑指 Offer 07. 重建二叉树
    剑指 Offer 06. 从尾到头打印链表
    MySQL--数据库范式
    剑指 Offer 05. 替换空格
    剑指 Offer 04. 二维数组中的查找
    剑指offer_03_数组中重复的数字(Java)
    Redis
    MySQL--SQL执行过程
  • 原文地址:https://www.cnblogs.com/quchunhui/p/5459249.html
Copyright © 2011-2022 走看看