Hive使用入门
来源:互联网 发布:linux原生游戏 编辑:程序博客网 时间:2024/06/06 04:42
Hive提供了一个被称为Hive查询语言(简称HiveQL或者HQL)的SQL语言,用来查询和存储在Hadoop集群中的数据。Hive不是一个完整的数据库,不支持记录级别的更新、插入或者删除操作,Hive将查询语句转换成MapReduce任务,因此Hive查询延时比较大。Hive不支持OLTP(联机事务处理)所需的关键功能,更接近一个OLAP(联机分析技术)工具;适合用于数据仓库应用程序,使用该应用程序进行相关的静态数据分析,不需要快速响应给出结果,而且数据本身不会频繁变化。本文作为Hive的入门篇,主要介绍Hive表的创建,数据的装载等。
- 创建/删除数据库
声明:Hive对关键字的大小写不敏感
Hive中数据库的概念本质上是一个目录或者命名空间。Hive会为每个数据库(默认的default除外)创建一个目录,数据库中的表将会以这个数据库目录的子目录形式存在。
hive> create database peopleinfo; //创建数据库peopleinfo,如果已经存在将会抛出异常hive> create database if not exists peopleinfo; //创建之前判断peopleinfo是否已经存在hive> show databases; //查看当前所包含的数据库hive> describe database peopleinfo; //显示peopleinfo数据库的详细信息hive> drop database peopleinfo; //删除数据库hive> drop database peopleinfo if exists peopleinfo;hive> use peopleinfo; //切换数据库
- 创建表
在建表时,如果没有显式的指定数据库,将会使用默认的数据库default。例如:
hive> create table people ( > name string, > city string, > age int > ) row format delimited fields terminated by '\t';
上述创建了people表,字段及其类型如上,并且指定了待装载数据的格式是以tab键分隔(即在装载数据时,会将tab键分隔的行数据映射到数据仓库)。可以通过下面的语句显示创建表的详情:
hive> describe formatted people; //通过formatted以更友好的格式展示描述数据OK# col_name data_type comment name string city string age int # Detailed Table Information Database: default ...Location: hdfs://localhost/hive/people Table Type: MANAGED_TABLE Table Parameters: COLUMN_STATS_ACCURATE true numFiles 1 totalSize 93 transient_lastDdlTime 1505994401 # Storage Information SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe InputFormat: org.apache.hadoop.mapred.TextInputFormat OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat ...Storage Desc Params: field.delim \t serialization.format \t
创建表时还有许多可选关键字用于描述其他的选项,如下:
CREATE EXTERNAL TABLE IF NOT EXISTS peopleinfo.people(name string COMMENT 'name field', //用于向每个字段追加一个注释...)COMMENT 'detail info of people' //COMMENT:表的注释row format delimited fields terminated by '\t' //行数据中每个字段的分隔符LINES TERMINATED BY ‘\n’ //数据行间的分隔符,默认为'\n'TBLPROPERTIES ('creator'='xx','created_at'='2017**') //按键值对的格式为表增加额外的文档说明location 'xxx' //指明数据的存储位置STORED AS file_format; //文件的存储格式,默认为'\n'EXTERNAL:声明创建的表为外部表IF NOT EXISTS:如果创建时表已经存在,hive将会忽略掉后面的执行语句peopleinfo.:指明表所属的database
关于”fields terminated”的默认分隔符:基本数据类型默认为’\001’,ARRAY或者STRUCT类型默认为’\002’,map中默认为’\003’;
关于Hive支持的数据类型参见文献[1];
关于外部表:Hive表可以用LOCATION告诉Hive数据位于哪个路径下,Hive不会完全的用于这份数据,事实上Hive中只保存相关的元素信息,不会像内部表一样将数据移动到自己管理的目录,因此,删除外部表时,只会删除描述表的元数据信息,而不会删除表中数据。这和内部表时不同的,内部表会将数据放到自己的数据仓库中,删除表时,元数据和表中数据将会被一起删除。
还可以通过select语句创建表,例如以下从people中筛选city为nanjing的信息,创建njpeople表,该表数据default数据库。
hive> create table njpeople as > select name,age from people where city='nanjing';
- 向表中装载数据
例如向之前的people表中载入数据:
load data [local] inpath 'xxx' [overwrite] into table people;
LOCAL:指定从本地文件系统装载数据,该数据会被拷贝到目标位置;如果不指定LOCAL关键字的话,表示数据会从HDFS(或其他分布式文件系统)中装载数据,且数据会被移动到目标位置。
OVERWRITE:目标文件夹中之前存在的数据会被删除。
hive> load data local inpath '/home/test/people.bcp' into table people;...hive> select * from people;OKZHAO beijing 30QIAN nanjing 26SUN nanjing 28LI shanghai NULL //!!!注意NULL!!!ZHOU shanghai 29
people表在HDFS上存储的数据:
hive> dfs -cat /hive/people/people.bcp;ZHAO beijing 30QIAN nanjing 26SUN nanjing 28LI shanghai ageZHOU shanghai 29
hive的读时模式,也就是在查询时对数据进行校验,如果模式和文件内容并不匹配,Hive会极力尝试尽可能的将各种错误恢复过来,例如数据”LI shanghai age”中的age与表定义的int类型并不匹配,查询时,将返回NULL。
通过查询语句向表中插入数据
hive> insert into table njpeople > select * from people where city='nanjing';
- 数据导出
hive> insert overwrite local directory '/home/test/people' row format delimited fields terminated by '\t' select * from people;LOCAL[可选]:local表示数据导出到本地磁盘,否则数据导出到HDFSOVERWRITE[可选]:目标文件夹中之前存在的数据会被删除。
- 删除表
hive> drop table tablename; //直接丢弃hive> drop table if exists tablename; //带有if的判断语句
- 修改表
表重命名:
alter table tablename01 rename to tablename02;
增加列:
alter table tablename01 add columns(field1 string comment 'add field string',field2 int comment 'add field int');
删除/替换列:
alter table people replace columns(firstname string,location string,nianling int);
因为新的字段和原来的字段数相同,因此上述操作实际上只是重定义了字段的名称。如果是”alter table people replace columns(firstname string);”,那么会重命名name字段的元数据信息,并且删除city和age属性。
- 数据抽取
在Hive中提供了数据取样(SAMPLING)的功能,用来从Hive表中根据一定的规则进行数据取样,Hive中的数据取样支持分桶表取样和数据块取样。例如,分桶表取样:
hive> select * from people TABLESAMPLE(bucket 2 out of 5 on rand()) s;
更详见的介绍可以参考:从Hive表中进行数据抽样-Sampling
- Edward Capriolo,Dean Wampler,Jason Rutherglen 著;曹坤 译. Hive编程指南. 人民邮电出版社,2013.
- Hive使用入门
- Hive使用入门
- Hive使用入门
- Hive入门--3.UDF编写与使用
- Hive入门操作使用及常用配置
- Hive 入门
- Hive 入门
- hive入门
- hive入门
- hive入门
- hive入门
- Hive入门
- hive入门
- HIVE入门
- hive 入门
- hive入门
- Hive入门
- Hive入门
- android studio 将oncreat()中的初始化的变量转化为全局变量的快捷键
- 网络编程
- 系统恢复技术
- 2.机器学习基础
- HTML5 nav导航标签使用
- Hive使用入门
- Android Framework学习笔记 -- Audio的播放流程
- 学OpenGL编3D游戏_1 框架
- C++实验21
- 代码片段----虚函数的4条原则(其实没有代码)
- sublime text3破解
- 负载均衡
- 万字总结:学习MySQL优化原理,这一篇就够了!
- 独家 | 大数据人工智能领域从菜鸟到高手晋级指南