基本数据类型

image.png

集合数据类型

image.png

创建数据库

  1. CREATE DATABASE [IF NOT EXISTS] database_name
  2. [COMMENT database_comment]
  3. [LOCATION hdfs_path]
  4. [WITH DBPROPERTIES (property_name=property_value, ...)];

1)创建一个数据库,数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/.db。
create database 库名;
2)避免要创建的数据库已经存在错误,增加 if not exists 判断。(标准写法)
create database if not exists 库名;
3)创建一个数据库,指定数据库在 HDFS 上存放的位置
* create database 库名 location ‘路径’;

查询数据库

1)显示数据库
show databases;
2)过滤显示查询的数据库
例: show databases like ‘db_hive*’;
3)显示数据库信息
desc database 库名;
4)显示数据库详细信息,extended
desc database extended 库名;
5)切换当前数据库
use 库名;

修改数据库

用户可以使用 alter database 命令为某个数据库的 dbproperties 设置键-值对属性值,
来描述这个数据库的属性信息
例: alter database db_hive set dbproperties(‘createtime’=’20170830’);

删除数据库

1)删除数据库
drop database 库名;
2)如果删除的数据库不存在,最好采用 if exists 判断数据库是否存在
drop database if exists 库名;
3)如果数据库不为空,可以采用 cascade 命令,强制删除
drop database 库名 cascade;


创建表

1)建表语句

  1. CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
  2. 1CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;
  3. 用户可以用 IF NOT EXISTS 选项来忽略这个异常。
  4. 2)[EXTERNAL] 创建一个外部表,在建表的同时可以指定一个指向实
  5. 际数据的路径(LOCATION),在删除表的时候,内部表的元数据和数据会被一起删除,而外
  6. 部表只删除元数据,不删除数据。加了就是外部,不加就是内部
  7. [(col_name data_type [COMMENT col_comment], ...)]
  8. col_name:字段
  9. data_type:字段类型
  10. [COMMENT table_comment]
  11. COMMENT:为表和列添加注释。
  12. [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
  13. PARTITIONED BY 创建分区表
  14. [CLUSTERED BY (col_name, col_name, ...)
  15. CLUSTERED BY 创建分桶表
  16. [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
  17. SORTED BY 不常用,对桶中的一个或多个列另外排序
  18. [ROW FORMAT row_format]:定义行的格式
  19. [STORED AS file_format]:指定文件格式
  20. [LOCATION hdfs_path]:指定表的位置信息
  21. [TBLPROPERTIES (property_name=property_value, ...)]:额外属性
  22. [AS select_statement]:

管理表

默认创建的表都是所谓的管理表,有时也被称为内部表
当我们删除一个管理表时,Hive 也会删除这个表中数据。管理表不适合和其他工具共享数据。

外部表

因为表是外部表,所以 Hive 并非认为其完全拥有这份数据。删除该表并不会删除掉这
份数据,不过描述表的元数据信息会被删除掉。

管理表与外部表的互相转换

(1)查询表的类型
desc formatted 表名;
(2)修改内部表 为外部表
alter table 表名 set tblproperties(‘EXTERNAL’=’TRUE’);
(3)修改外部表 为内部表
alter table 表名 set tblproperties(‘EXTERNAL’=’FALSE’);
注意:(‘EXTERNAL’=’TRUE’)和(‘EXTERNAL’=’FALSE’)为固定写法,区分大小写!

修改表

重命名表

alter table 旧表名rename to 新表名;

增加、修改和删除表分区

增加/修改/替换列信息

语法
更新列

  1. ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name
  2. column_type [COMMENT col_comment] [FIRST|AFTER column_name]
  3. 例:.alter table 表名 change 旧列名 新列名 数据类型;

增加列和替换列

  1. ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT
  2. col_comment], ...)
  3. 例:alter table 表名 add columns(列名 数据类型);增加列
  4. 例:alter table 表名 replace columns(列名 数据类型);替换列

注:ADD 是代表新增一字段,字段位置在所有列后面(partition 列前),
REPLACE 则是表示替换表中所有字段
(1)查询表结构
desc 表名;
(2)添加列
alter table 表名 add columns(列名 数据类型);
(3)更新列
alter table dept change column deptdesc desc string;
alter table 表名 change 旧列名 新列名 数据类型;
(4)替换列
alter table dept replace columns(deptno string, dname string, loc string);
alter table 表名 replace columns(列名 数据类型,。。。,。。。);
(5)定义行的格式
row format delimited fields terminated by “\t”;

删除表

drop table 表名;