02 Hive学习总结及应用

上传人:飞****9 文档编号:132866320 上传时间:2020-05-21 格式:DOC 页数:16 大小:73KB
返回 下载 相关 举报
02 Hive学习总结及应用_第1页
第1页 / 共16页
02 Hive学习总结及应用_第2页
第2页 / 共16页
02 Hive学习总结及应用_第3页
第3页 / 共16页
02 Hive学习总结及应用_第4页
第4页 / 共16页
02 Hive学习总结及应用_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《02 Hive学习总结及应用》由会员分享,可在线阅读,更多相关《02 Hive学习总结及应用(16页珍藏版)》请在金锄头文库上搜索。

1、一、文档说明熟悉Hive功能,了解基本开发过程,及在项目中的基本应用。注意:本文档中但凡有hive库操作的语句,其后面的“;”是语句后面的,非文档格式需要。每个hive语句都要以“;”来结束,否则将视相邻两个分号“;”之间的所有语句为一条语句。二、Hive(数据提取)概述Hive是构建在HDFS 和Map/Reduce之上的可扩展的数据仓库。是对HADOOP的Map-Reduce进行了封装,类似于sql语句(hive称之为HQL)计算数据从而代替编写代码对mapreduce的操作,数据的来源还是HDFS上面的文件。Hive中的表可以分为托管表和外部表,托管表的数据移动到数据仓库目录下,由Hiv

2、e管理,外部表的数据在指定位置,不在Hive的数据仓库中,只是在Hive元数据库中注册。创建外部表采用“create external tablename”方式创建,并在创建表的同时指定表的位置。Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中(如果数据是在HDFS上;但如果数据是在本地文件系统中,那么是将数据复制到表所在的目录中)。三、Hive的元数据 Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),

3、表的数据所在目录等。 由于Hive的元数据需要不断的更新、修改,而HDFS系统中的文件是多读少改的,这显然不能将Hive的元数据存储在HDFS中。目前Hive将元数据存储在数据库中,如Mysql、Derby中。Hive metastore 三种存储方式:Hive的meta 数据支持以下三种存储方式,其中两种属于本地存储,一种为远端存储。远端存储比较适合生产环境。1、使用derby数据库存储元数据(内嵌的以本地磁盘作为存储),这称为“内嵌配置” 。这种方式是最简单的存储方式,只需要在hive-default.xml或hive-site.xml做如下配置便可。使用derby存储方式时,运行hive

4、会在当前目录生成一个derby文件和一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,否则会提示如下错误(这是一个很常见的错误)。2、使用本机mysql服务器存储元数据,这称为“本地metastore”。这种存储方式需要在本地运行一个mysql服务器, 3、使用远端mysql服务器存储元数据。这称为“远程metastore”。这种存储方式需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务。四、Hive数据导入方式1、从本地文件系统中导入数据到Hive表 hive load data local inpa

5、th wyp.txt into table wyp; 2、HDFS上导入数据到Hive表hive load data inpath /home/wyp/add.txt into table wyp;3、从别的表中查询出相应的数据并导入到Hive表中 hive insert into table test partition (age=25) select id, name, tel from wyp;五、Hive数据导出方式1、导出到本地文件系统hive insert overwrite local directory /home/wyp/wyp select * from wyp;bococ

6、loud216$hive -e select * from wyp local/wyp.txt2、导出到HDFS中hive insert overwrite directory /home/wyp/hdfs select * from wyp;3、导出到Hive的另一个表中hive insert into table test partition (age=25) select id, name, tel from wyp;六、HiveQL的常用操作HiveQL是一种类似SQL的语言,它与大部分的SQL语法兼容,但是并不完全支持SQL标准,如HiveQL不支持更新操作,也不支持索引和事务,它的

7、子查询和join操作也很局限。 #hive 启动1、退出hivehive quit; 2、查看数据库 hive show databases; 3、创建数据库hive create database test; 4、创建数据库,并设置其存放的位置,注意该路径在hdfs下hive CREATE DATABASE financials LOCATION /my/preferred/directory; 5、使用哪个数据库 hive use default; 6、创建表hivecreate table t1 (key string); 7、判断一个表是外部表还是内部表hiveDESCRIBE EXT

8、ENDED tablename;8、查看该数据库中的所有表hiveshow tables;9、显示表结构hive desc tablename; hive desc extended tmr_format;10、查看表有哪些分区 hiveshow partitions t1; 11、删除分区:ALTER TABLE table_name DROP partition_spechiveALTER TABLE day_hour_table DROP PARTITION (dt=2008-08-08, hour=09);12、删除表 hivedrop table t1 ;13、移动hdfs中数据到t

9、1表中hiveload data inpath /root/inner_table.dat into table t1; 14、上传本地数据到hdfs中 hiveload data local inpath /root/inner_table.dat into table t1; 15、查询当前linux文件夹下的文件hive !ls; 16、查询当前hdfs文件系统下 /目录下的文件hive dfs -ls /; 以非交互式模式执行sql文件HIVE_HOME/bin/hive -f /home/my/hive-script.sql在进入交互模式之前,执行初始化sql文件HIVE_HOME/

10、bin/hive -i /home/my/hive-init.sql六、Hive内部表、外部表1. 内部表:create table tt (name string , age string) location /input/table_data; 上传hdfs数据到表中:load data inpath /input/data into table tt; 此时会将hdfs上的/input/data目录下的数据转移到/input/table_data目录下。删除tt表后,会将tt表的数据和元数据信息全部删除,即最后/input/table_data下无数据,当然/input/data下再上一

11、步已经没有了数据!如果创建内部表时没有指定location,就会在/user/hive/warehouse/下新建一个表目录,其余情况同上。注意的地方就是:load data会转移数据!2. 外部表:create external table et (name string , age string); 此时,会在/user/hive/warehouse/新建一个表目录etload data inpath /input/edata into table et; 此时会把hdfs上/input/edata/下的数据转到/user/hive/warehouse/et下,删除这个外部表后,/user

12、/hive/warehouse/et下的数据不会删除,但是/input/edata/下的数据在上一步load后已经没有了!数据的位置发生了变化!本质是load一个hdfs上的数据时会转移数据!3. 其他:(1)加上location用法一样,只不过表目录的位置不同而已。(2)加上partition用法也一样,只不过表目录下会有分区目录而已。(3)load data local inpath直接把本地文件系统的数据上传到hdfs上,有location上传到location指定的位置上,没有的话上传到hive默认配置的数据仓库中。七、Hive日期函数UNIX时间戳转日期函数: from_unixti

13、me语法: from_unixtime(bigint unixtime, string format)返回值: string说明: 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive select from_unixtime(1323308943,yyyyMMdd) from dual;20111208获取当前UNIX时间戳函数: unix_timestamp语法: unix_timestamp()返回值: bigint说明: 获得当前时区的UNIX时间戳举例:hive select unix_timestamp() fro

14、m dual;1323309615日期转UNIX时间戳函数: unix_timestamp语法: unix_timestamp(string date)返回值: bigint说明: 转换格式为“yyyy-MM-dd HH:mm:ss“的日期到UNIX时间戳。如果转化失败,则返回0。举例:hive select unix_timestamp(2011-12-07 13:01:03) from dual;1323234063指定格式日期转UNIX时间戳函数: unix_timestamp语法: unix_timestamp(string date, string pattern)返回值: bigi

15、nt说明: 转换pattern格式的日期到UNIX时间戳。如果转化失败,则返回0。举例:hive select unix_timestamp(20111207 13:01:03,yyyyMMdd HH:mm:ss) from dual;1323234063日期时间转日期函数: to_date语法: to_date(string timestamp)返回值: string说明: 返回日期时间字段中的日期部分。举例:hive select to_date(2011-12-08 10:03:01) from dual;2011-12-08日期转年函数: year语法: year(string date)返回值: int说明: 返回日期中的年。举例:hive select

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号