hive简单使用语法
Posted zorashuang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive简单使用语法相关的知识,希望对你有一定的参考价值。
刚刚看了一下hive的简单使用,只是一小部分,做下记录。
1. 创建新表
create table t_order(id int, name string, memory string, price double)
row format delimited
fields terminated by ‘\t‘;
建表成功。
其中可以使用mysql客户端连接我们自己的hive库。可以看到自己创建表的详细信息,和所有字段的信息。相应的在hdfs集群上会创建相应的文件夹。
也可以在hive库中创建自己想要的数据库:create database databasename;同时会自动的在hdfs集群上创建出相应的文件夹。
可能表中需要存储的数据是:
001 iPhone7s 128G 6888
002 smartisan 64G 3888
003 xiaomi 32G 2888 备注:hive库是没有主键约束和任何约束的。
将上述想要入到表中的数据写进一个文件中,可以创建在本地,例如文件创建的目录为:/home/hadoop/hivetestdata/xxx.data
接下来就是讲文件中的数据加载到创建的表中了:
load data local inpath ‘/home/hadoop/hivetestdata/xxx.data‘ into table t_order;
数据加载成功。这是相应的集群上目录已经多出了一个xxx.data的文件,内容便是刚才的数据文件的内容。
然后就可以select * from t_order; sql语句会转换成mapreduce任务来执行
结果:
001 iPhone7s 128G 6888
002 smartisan 64G 3888
003 xiaomi 32G 2888
2. 自动put数据到库表中。
例如有一个yyy.data 的文件,里面也是有手机的信息:
004 iPhone7s 128G 6888
005 smartisan 64G 3888
006 xiaomi 32G 2888
将本地的文件yyy.data可以put到集群库上,hadoop fs -put yyy.data 集群上库表t_order的目录,然后 select * from t_order; 同样也会将yyy.data中的数据。
001 iPhone7s 128G 6888
002 smartisan 64G 3888
003 xiaomi 32G 2888
004 iPhone7s 128G 6888
005 smartisan 64G 3888
006 xiaomi 32G 2888
3. hive的表是有两大类的。managed_table和extend_table
例如有一份数据uuu.data:
101 iPhone7s 128G 6888
102 smartisan 64G 3888
103 xiaomi 32G 2888 将文件put到集群上根目录下 Hadoop fs -put uuu.data /
将数据导到
load dta inpath ‘/uuu.data‘ into table t_order;这时集群中根目录下发现uuu.data已经没有了。也就是说
集群中的文件加载到相应的库表中的话,对应的相应集群中数据文件也会消失。
现在就创建一个external表:
create external table t_order_ex(id int, name string, memory string, price double)
row format delimited
fields terminated by ‘\t‘
location ‘/hive_ext‘; 发现对应相应的数据文件并没有发生改变,没有消失。
加载数据文件到库表中的时候,若加载的是集群中的数据文件,内部表:集群中文件会消失,外部表不会消失。
还有内部表与外部表的区别:删除内部表时,集群上相对应的数据文件也会消失。但是删除外部表的时候,集群中相对应的数据文件是不会删除消失的。
4.在创建新表时,可以同时将查询其他表的数据加载到新表中。用于创建一些临时表存储中间结果。
create external table t_order_simple(id int, name string, memory string)
as
select id, name,price from t_order;
查询结果:
select * from t_order_simple;
结果:
001 iPhone7s 128G 6888
002 smartisan 64G 3888
003 xiaomi 32G 2888 这种方式通常使用查询的中间表使用。
5. 用于向临时表中追加结果数据。表必须已经存在。
insert overwrite 会覆盖已经存在的数据;
insert into 只是简单的copy插入,不做重复性校验;
6. 分区
一般集群中的数据量都是特别大的,所以查询数据的时候按分区来查询不会讲集群中所有的数据都查询出来
只是将相应的分区的数据查询出来。
分区的时候可以以任何名称来分区,没有限制。
create table t_order_pt(id int, name string, memory string)
partitioned by (month string)
row format delimited
fields terminated by ‘\t‘;
load data local inpath ‘/home/hadoop/hivetestdata/xxx.data‘ into table t_order_pt partition(month=‘2014‘)
可以看到集群中相应的文件夹中会又创建了新的一层的文件夹:month=2014,里边会有xxx.data的数据文件
以上是关于hive简单使用语法的主要内容,如果未能解决你的问题,请参考以下文章