Hive学习总结及应用0001_第1页
Hive学习总结及应用0001_第2页
Hive学习总结及应用0001_第3页
Hive学习总结及应用0001_第4页
Hive学习总结及应用0001_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

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

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

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

6、ect * from wyp;bococloud216$hive -e select * from wyp local/wyp.txt2、导出到HDF汕精品文档hive insert overwrite directory /home/wyp/hdfsselect * from wyp;3、导出到Hive的另一个表中hive insert into table testpartition (age=25)select id, name, tel from wyp;六、HiveQL的常用操作HiveQL是一种类似SQL勺语言,它与大部分的SQLLS法兼容,但 是并不完全支持SQL标准,如Hive

7、QL不支持更新操作,也不支持索 引和事务,它的子查询和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、判断一个表是外部表还是内

8、部表hiveDESCRIBE EXTENDED tablenam e8、查看该数据库中的所有表hiveshow tables;9、显示表结构hive desc tablename;hive desc extended tmr_format;10、查看表有哪些分区hiveshow partitions t1;11、删除分区:ALTER TABLE table_name DROP partition_spec hiveALTER TABLE day_hour_table DROP PARTITION(dt=2008-08-08, hour=09);12、删除表hivedrop table t1 ;

9、into table13、移动hdfs中数据到t1表中hiveload data inpath7root/inner_table.dat 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?在进入交互模式之前,执行初始化 s

10、ql文件?HIVE_HOME/bin/hive -i /home/my/hive-init.sql六、Hive内部表、外部表.内部表: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下无

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

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

13、e日期函数UNIX时间戳转日期函数:from_unixtime语法: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 se

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

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

16、:year语法:year(string date)返回值:int说明:返回日期中的年。举例:hive select ye ar( 201-112- 08 10:03:01 ) from dual;2011hive select year( 200-2 08 ) from dual;2012日期转月函数:month精品文档语法:month (string date)返回值:int说明:返回日期中的月份。举例:hive select month( 200 08 10:03:01 ) from dual;12hive select month( 20D81- 08 ) from dual;8日期转天

17、函数:day语法:day (string date)返回值:int说明:返回日期中的天。举例:hive select day( 2021 08 10:03:01 ) from dual;8hive select day( 2021 24 ) from dual;24日期转小时函数:hour语法:hour (string date)返回值:int说明:返回日期中的小时。举例:hive select hour( 202-0810:03:01 ) from dual;10日期转分钟函数:minute精品文档语法:minute (string date)返回值:int说明:返回日期中的分钟。举例:hi

18、ve select minute( 2021 08 10:03:01 ) from dual;3日期转秒函数:second语法:second (string date)返回值:int说明:返回日期中的秒。举例:hive select second( 202108 10:03:01 ) from dual;1日期转周函数:weekofyear语法:weekofyear (string date)返回值:int说明:返回日期在当前的周数。举例:hive select weekofyear( 2K21-1 08 10:03:01 ) from dual;49日期比较函数:datediff语法:dat

19、ediff(string enddate, string startdate)返回值:int说明:返回结束日期减去开始日期的天数。精品文档日期增加函数:date_add语法:date_add(string startdate, int days)返回值:string说明:返回开始日期startdate 增加days天后的日期。举例:hive select date_add( 绝2 08 ,10) from dual;2012-12-18日期减少函数:date_sub语法:date_sub (string startdate, int days)返回值:string说明:返回开始日期startd

20、ate 减少days天后的日期。举例:hive select date_sub( 202-2 08 ,10) from dual;2012-11-28select from_unixtime(unix_timestamp() from enodeb limit 1;2014-04-25 08:47:31select to_date(from_unixtime(unix_timestamp() from enodeb limit 1;2014-04-25select hour(from_unixtime(unix_timestamp() from enodeb limit 1;8select f

21、rom_unixtime(unix_timestamp(),yyyyMMddHH) from enodeb limit 1;2014042508精品文档select from_unixtime(unix_timestamp(),yyyy-MM-dd HH:mm:ss) from enodeb limit 1; 2014-04-25 09:15:58七、Hive开发配置(java)在 Hive 的 jar 包 中,“org.apache.hadoop.hive.jdbc.HiveDriver” 负责提供 JDBCK口,客户端展示程序有了这个包,就可以把Hive当成一个数据库来使用。Class.f

22、orName(org.apache.hadoop.hive.jdbc.HiveDriver);Connection con= DriverManager.getConnection(jdbc:hive:/ip:50000/default,hive,hadoop);建立与Hive的连接:默认只能连接到default ,通过上面的两行代码建立连接后,其他的操作与传统数据库无太大差别。详细配置参见细细品味 Hadoop_Hadoo鹿群(第14期)_Hive应用开发第三章节。八、数据类型原子数据类型类型描述示例TINYINT1个字节(8位)有符号整数1SMALLINT2字节(16位)有符号整数1INT

23、4字节(32位)有符号整数1BIGINT8字节(64位)有符号整数1FLOAT4字节(32位)单精度浮点数1.0DOUBLE8字节(64位)双精度浮点数1.0BOOLEANtrue/falseTRUE精品文档STRING |字符串|,xia,” | xia ”复杂数据类型类型描述示例ARRAY一组有序字段。字段的类型必须相同Array(1,2)MAP一组无序的键/值对。键的类型必须是原子的,值可以是任何类型,同一个映射的键的类型必须相同,值得类型也必须相同Map( a ,1,STRUCT一组命名的字段。字段类型可以不同Struct(a ,1,1),2),0)八、Hive表分区a、单分区建表语句

24、: create table day_table (id int, content string) partitioned by (dt string);单分区表,按天分区,在表结构中存在id , content , dt三列。以dt为文件夹区分b、双分区建表语句:create table day_hour_table (id int,content string) partitioned by (dt string, hour string);双分区表,按天和小时分区,在表结构中新增加了dt和hour两列。先以dt为文件夹,再以hour子文件夹区分添加分区表语法(表已创建,在此基础上添加分区

25、):ALTER TABLE table_name ADDpartition_spec LOCATION location1partition_spec LOCATION location2.ALTER TABLE day_table ADDPARTITION (dt=2008-08-08, hour=08)精品文档location /path/pvl.txt删除分区语法:ALTER TABLE table_name DROPpartition_spec, partition_spec,.用户可以用 ALTER TABLE DROP PARTITION删除分区。分区的元数据和数据将被一并删除。例:ALTERTABLEday_hour_table DROADARTITIONdt=2008-08-08, hour=09);数据加载进分区表中语法:LOADDATALOCAL INPAT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论