Hive基本操作-库、表
规则语法
大小写规则:
1. hive的数据库名、表名都不区分大小写
2. 建议关键字大写
复制代码
命名规则:
1. 名字不能使用数字开头
2. 不能使用关键字
3. 尽量不使用特殊符号
复制代码
库操作语法
创建数据库
创建数据库的本质就是在hive的参数${hive.metastore.warehouse.dir}对应的目录下,创建一个新的目录,此目录的名称为: 库名.db。
注意:在创建库或者表时除了创建目录外,还会在mysql中(元数据库),添加元数据(描述信息)
hive> create database zoo;
hive> create database if not exists zoo;
hive> create database if not exists qfdb comment 'this is a database of qianfeng';
复制代码
hive有一个默认的数据库default,如果不明确的说明要使用哪个库,则使用默认数据库。
查看所有数据库:实际就是从元数据库中获取对应的元数据
语法:show databases;
复制代码
切换数据库
语法:use mydb;
复制代码
查看数据库信息
语法1:desc database databaseName;
语法2:desc database extended databaseName;
语法3:describe database extended databaseName;
复制代码
删除数据库
语法1:drop database databasename; # 这个只能删除空库
语法2:drop database databasename cascade; # 如果不是空库,则可以加cascade强制删除
复制代码
表操作语法
数据类型
Hive的数据类型分为基本数据类型和复杂数据类型,下面是基本数据类型(复杂类型到后期再讲)
其中加粗体是重点要掌握的类型
分类 | 类型 | 描述 | 字面量示例 |
---|---|---|---|
基本类型 | BOOLEAN | true/false | TRUE |
TINYINT | 1字节的有符号整数 -128~127 | 1Y | |
SMALLINT | 2个字节的有符号整数,-32768~32767 | 1S | |
INT | 4个字节的带符号整数 | 1 | |
BIGINT | 8字节带符号整数 | 1L | |
FLOAT | 4字节单精度浮点数 | 1.0 | |
DOUBLE | 8字节双精度浮点数 | 1.0 | |
DEICIMAL | 任意精度的带符号小数 | 1.0 | |
STRING | 字符串,可变长度 | “a”,’b’ | |
VARCHAR | 变长字符串,要设置长度 | “a”,’b’ | |
CHAR | 固定长度字符串 | “a”,’b’ | |
BINARY | 字节数组 | 无法表示 | |
TIMESTAMP | 时间戳,纳秒精度 | 122327493795 | |
DATE | 日期 | ‘2016-03-29’ | |
复杂类型 | ARRAY | 有序的的同类型的集合 | array(1,2) |
MAP | key-value,key必须为原始类型,value可以任意类型 | map(‘a’,1,’b’,2) | |
STRUCT | 字段集合,类型可以不同 | struct(‘1’,1,1.0) | |
UNION | 在有限取值范围内的一个值 | create_union(1,’a’,63) |
文末扫码领取大数据礼包!
创建表
创建表的本质其实就是在对应的数据库目录下面创建一个子目录,目录名为表名。数据文件就存在这个目录下。
语法1:
create table t_user(id int,name string);
语法2:使用库.表的形式
create table mydb.t_user(id int,name string);
语法3:指定分隔规则形式
create table if not exists t1(
uname string comment 'this is name',
chinese int,
math int,
english int
)
comment 'this is my table'
row format delimited
fields terminated by '\t'
lines terminated by '\n'
stored as textfile;
通过查新mysql数据库hive数据库
DBS表 --> 存储的是 在hive中创建库是存在元数据信息
TBLS表 ---> 存储的是 在hive中创建表的元数据信息
MANAGED_TABLE --> 内部表 -->表目录会创建在HDFS文件系统中相对应目录下 (user/hive.warehouse)
EXTERNAL_TABLE --> 外部表 --> 外部表会根据创建表时指定Location位置来创建表的位置 --> 如果没有指定Location默认会创建和内部表相同位置
复制代码
PS:在我们访问HDFS文件系统时经常会出现,访问权限的问题
WeChatccfa021cae7b026e239728d472715111
我们只需要先关闭HDFS文件系统,然后修改Hadoop安装目录中配制文件core-site.xml
<!-- 当前用户全设置成root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 不开启权限检查 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
复制代码
然后分发节点,重新启动HDFS即可
create table if not exists emp(
eno int,
ename string,
job string,
mgr int,
hiredate int,
salary int,
comm int,
deptno int
)
row format delimited
fields terminated by ','
lines terminated by '\n'
stored as textfile;
复制代码
查看当前表空间中的所有表名
语法:show tables;
# 查看另外一个数据库中的表
show tables in zoo;
复制代码
查看表结构
desc tableName
desc extended tableName;
describe extended tableName;
复制代码
修改表结构(DML)
- 修改表名
alter table oldTableName rename to newTableName;
- 修改列名:change column 和修改字段类型是同一个语法
alter table tableName change column oldName newName colType;
alter table tableName change column colName colName colType;
- 修改列的位置: 注意,2.x版本后,必须是相同类型进行移动位置。【hive进行修改时是修改映射列,不会修改映射数据文件】
alter table tableName change column colName colName colType after colName1;
alter table tableName change column colName colName colType first;
例如:
create table t_1( id int, name string );
向表插入数据的文件 xiaohong 18 列和数据对应不上
alter table t_1 change column id id int after name;
create table t_1( name string id int, );
- 增加字段:add columns
alter table tableName add columns (sex int,...);
- 删除字段:replace columns #注意,2.x版本后,注意类型的问题,替换操作,其实涉及到位置的移动问题。
alter table tableName replace columns(
id int,
name int,
size int,
pic string
);
注意:实际上是保留小括号内的字段。
复制代码
删除表
drop table tableName;
也可以观看大数据相关视频:
千锋大数据Hadoop全新增强版-先导片