码迷,mamicode.com
首页 > 其他好文 > 详细

hive学习笔记-表操作

时间:2015-08-17 19:30:51      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:hive

Hive数据类型
基本数据类型
tinyint,smallint,int,biging,float,double,decimal,char,varchar,string,binary,boolean,timestamp,date,
引用数据类型
Array:相同数据类型组合的数组,使用array[1]访问
MAP:Key-value键值对,通过键进行访问,使用map[‘key‘]访问
STRUCT:结构体类型,用来存储不同数据类型的数据,是用struct.key访问
类型不区分大小写

Hive使用的文件
textfile:文本格式
SequenceFile:序列化文件(存储的是二进制)
RcFile:列是文件存储格式

Hive基本使用表
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment],...)] [PARTITIONED BY(col_name data_type [COMMENT col_comment],...)] [CLUSTERED BY (col_name,col_name2,...) SORTED BY(col_name [ASC|DESC],...)] INTO num_buckets BUCKETS]
[
 [ROW FORMAT row_format][STORED AS file_format] | STORED BY ‘storage.handler.class.name‘ [WITH SERDEPROPERTIES(...)]
]
[LOCATION hdfs_path]
           
[AS select_statement]

EXTERNAL:是内部还是外部表
PARTITIONER BY :根据指定列进行分区
CLUSTERED BY:按照某一个字段将相同数据聚到同一个reduce中
BUCKETS:分桶,根据哈希值进行分桶
LOCATION:创建表,其文件在在集群的位置
AS:查询值同时添加到表中

例子:
CREATE TABLE IF NOT EXISTS employees(
name string,
salary float,
subordinates array<string>,
deductions map<string,float>,
address struct<street:string,city:string,state:string,zip:int>
)row format delimited fields terminated by ‘\t‘ collection items terminated by ‘,‘ map keys terminated by ‘:‘ lines terminated by ‘\n‘ stored as textfile location ‘/data/‘;

查看表结构:
desc table_name;
详细信息
desc extended table_name;
格式化后的详细信息
desc formatted table_name;

删除表
drop table table_name;

外部表与内部表的区别:
如果内部表,在删除表之后会将表数据从HDFS中删除,而外部表只删除表的元数据信息,并不会删除表中的数据。

查询字段,如果是array类型可以通过下标
select subordinates[1] from employees;
查询如果是map,使用col_name[‘key‘]
查询如果是struct,使用col_name.steet

show tables    显示当前数据库中的表
desc [extended | formatted] table_name    显示表的结构
show create table tablename    显示创建表的语句
drop table tablename    删除表
create table test1 like test2    复制表结构,但是表中数据并没有加载过来
create table test4 as select name,addr from test5    根据test5的name和addr创建test4表,并且将test5中name和addr数据内容加载到test4中(select中不能查*)

hive不同文件读取:
stored as testfile
直接查看HDFS
通过hdfs dfs -test查看

stored as sequencefile
通过hdfs dfs -test查看

stored as rcfile
hive -service rcfilecat path

stored as inputformat ‘class‘ outputformat ‘class‘

四种主要的区别是inputformat 和 outputformat不同

hive中加载jar包(当次会话有用,如果多次需要加到lib目录下)
add jar path/..jar

Hive使用SerDe
SerDe是Serializer和Deserializer的缩写即序列化与反序列化
Hive读写数据的顺序
HDFS->inputfileformat-> <key,vlaue> -> deserializer -> row对象
row对象 -> serializer -> <key,value> ->outputFileFormat -> HDFS文件

Hive分区
为了避免查询过程中消耗很长时间进行查找整个表,可以使用分区,查找特定分区中的内容,从而节省时间。
分区语句
create table tablename(
name string
....
)
partitioned by(col_name type,...)    这个分区字段和上面定义的字段不同,定义分区字段可以有多个用于分区后在对内容进行分区,相当于一级分区二级分区,注意和顺序有关的
其实分区就是在HDFS下对应表中创建目录,这样以后查询的时候直接去对应目录下进行查找
添加分区语法:
alter table table_name add [if not exists] partition(col_name=par_con)
注意这种添加分区方法前提是在创建表的时候已经创建了col_name分区
删除分区
alter table table_name drop [if exists] partition(col_name=par_com)
查看分区
show partitions table_name
数据加载到分区:
LOAD DATA [LOCAL] INPATH ‘filepath‘ [OVERWRITE] INTO TABLE table_name [partition(dt=..,hour=..)]

Hive分桶
对于某个表或者某个分区,hive进一步的组织成桶,也就是说桶是更细粒度范围的划分
hive针对某一列进行分桶
hive采用对列进行hash取值,然后使用该值对桶的个数取余的方式决定该条记录放在哪个桶中
与分区一样都是为了提高查询的效率

查找
select [ALL|DISTINCT] col_name frwom table_name [where col_name=..]

版权声明:本文为博主原创文章,未经博主允许不得转载。

hive学习笔记-表操作

标签:hive

原文地址:http://blog.csdn.net/colin_yjz/article/details/47729777

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!