【前言:】我们都知道hive创建的表其实是HDFS上文件的映射,我们写的HiveSQL基本都会执行MapReduce操作,除了一些“select * from 表名”;HiveSQL和MySQL语句基本一样
一、Hive和MySQL主要区别
不同之处 | Hive | MySQL |
---|---|---|
查询语言 | HQL | SQL |
数据存储位置 | HDFS | Raw Device或者Local FS |
数据格式 | 用户定义 | 系统决定 |
数据更新 | 不支持 | 支持 |
索引 | 无 | 有 |
执行 | Mapreduce | Executor |
执行延迟 | 高 | 低 |
可扩展性 | 高 | 低 |
数据规模 | 大 | 小 |
二、Hive中的数据类型
基本数据类型
复杂数据类型
元数据结构
三、内部表和外部表的区别
Hive 分为内部表和外部表
四、Hive命令
一、创建表
创建表时,结构要想好,不推荐修改表结构,其实,在讲MySQL时候也提到
1、内部表
create table 表名(字段1 属性1,字段2 属性2...)
row format delimited
fields terminated by '\t' //这是 列 按什么进行分割
lines terminated by '\n'; //这里 行 按什么进行分割
例子
create table grade(gid int,gname string)
row format delimited
fields terminated by '|'
lines terminated by '\n';
2、外部表
create external table aa(uid int,uname string)
row format delimited
fields terminated by '\t'
lines terminated by '\n'
location 'hdfs://IP(或者主机名):9000/文件路径'; //HDFS上指定文件或目录的地址
二、插入
insert into (字段名...) 表名 values (值...);
例如
insert into aaa vlaues (1,"zhang");
【注意】
Hive不适合插入,因为它的插入要涉及到 mapreduce 操作,速度会非常慢,而且hive的数据本来就是在 HDFS上,有那工夫,不如直接 put 到HDFS上效率高
三、查询
select * from 表名;
和MySQL上的查询几乎一样
四、修改和删除
切记,hive中没有update和删除指定记录
但是
要删除只能删除表、库
drop table 表名
drop database 数据库名
删除有表的数据库
drop database 数据库名 cascade
再但是
可以使用序列函数和窗口函数来解决update问题
详细命令:请点这里