Appearance
Hive中的数据库,及对应存储在HDFS什么位置上?
- 查看数据库列表: show databases;
- 选择数据库:use 数据库名称; 默认在default数据库操作
在 hive-site.xml 中有一个参数 hive.metastore.warehouse.dir,表示hive的default默认数据库对应的hdfs存储目录
xml
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
这个默认数据库的信息在Metastore中也有记录,在dbs表中
自行创建数据库
下面我们来自己创建一个数据库,看看是什么样的: create database mydb1;
如果你不希望创建的数据库在这个目录下面,想要手工指定,那也是可以的,在创建数据库的时候通过 location来指定hdfs目录的位置:
sql
create database mydb2 location '/user/hive/mydb2';
Hive中表的基本操作
- 创建表:
create table 表名(字段 类型, 字段 类型);
- 显示当前数据库中所有的表名:
show tables;
- 查询表结构:
desc 表名;
- 修改表名:
alter table 表名 rename to 新表名;
- 新增字段:
alter table 表名 add columns (name string);
TIP
表中的数据是存储在hdfs中的,但是表的名称、字段信息是存储在metastore中的
dbs表中,default对应的DB_ID=1
tbls表存放表的基本信息,根据DB_ID可以找到该数据库下的表,比如我们创建的t1表
colums_v2表存放表的字段信息,比如上图TBL_ID=11的字段信息如下
建表时指定分隔符
我们在进行列分割时,通常使用tab进行分割,但是Hive默认使用\001
。
sql
create table t3_new(
id int comment 'ID',
stu_name string comment 'name',
stu_birthday date comment 'birthday',
online boolean comment 'is online'
) row format delimited -- 关键字,指定表的行格式为分隔符分隔的文本格式
fields terminated by '\t' -- 分割列规则
lines terminated by '\n'; -- 分割行规则
设置表为utfmb4
我们对表的字段添加中文注释会乱码,因此需要更改两张表的字符集
sql
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8mb4;
alter table TABLE_PARAMS modify column COMMENT varchar(256) character set utf8mb4;
向表中添加数据
之前我们使用insert添加数据,实际我们根本不可能使用这种方式,而是使用load命令,语法格式如下:
sql
load data local inpath '文件路径' into table 表名;