# Hive中的数据库,及对应存储在HDFS什么位置上?

  • 查看数据库列表: show databases;
  • 选择数据库:use 数据库名称; 默认在default数据库操作

在 hive-site.xml 中有一个参数 hive.metastore.warehouse.dir,表示hive的default默认数据库对应的hdfs存储目录

<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
</property>

image-20231015095409067

这个默认数据库的信息在Metastore中也有记录,在dbs表中

image-20231015095727668

# 自行创建数据库

下面我们来自己创建一个数据库,看看是什么样的: create database mydb1;

image-20231015095941946

如果你不希望创建的数据库在这个目录下面,想要手工指定,那也是可以的,在创建数据库的时候通过 location来指定hdfs目录的位置:

create database mydb2 location '/user/hive/mydb2';

# Hive中表的基本操作

  • 创建表:create table 表名(字段 类型, 字段 类型);
  • 显示当前数据库中所有的表名:show tables;
  • 查询表结构:desc 表名;
  • 修改表名:alter table 表名 rename to 新表名;
  • 新增字段:alter table 表名 add columns (name string);

表中的数据是存储在hdfs中的,但是表的名称、字段信息是存储在metastore中的

  • dbs表中,default对应的DB_ID=1

    image-20231015101104198

  • tbls表存放表的基本信息,根据DB_ID可以找到该数据库下的表,比如我们创建的t1表

    image-20231015101254546

  • colums_v2表存放表的字段信息,比如上图TBL_ID=11的字段信息如下

    image-20231015101356707

# 建表时指定分隔符

我们在进行列分割时,通常使用tab进行分割,但是Hive默认使用\001

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

我们对表的字段添加中文注释会乱码,因此需要更改两张表的字符集

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命令,语法格式如下:

load data local inpath '文件路径' into table 表名;