1:创建数据库
CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_ [LOCATION hdfs_ [WITH DBPROPERTIES (property_name=property_value, ...)];
1.1:创建一个数据库,在hdfs默认存储路径/user/hive/warehouse/*.db
hive (default)> create database db_hive;
1.2:避免数据库已存在
hive (default)> create database db_ FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database db_hive already exists hive (default)> create database if not exists db_hive;
1.3:创建一个库,指定hdfs存储路径
hive (default)> create database db_hive2 location '/db_hive2.db';
2:查询数据库
2.1:显示数据库
hive> show databases;
2.2:过滤显示查询的数据库
hive> show databases like 'db_hive*'; OK db_hive db_hive_1
2.3:显示数据库信息
hive> desc database db_hive; OK db_hive hdfs://hadoop102: 9820 /user/hive/warehouse/db_hive.db atguiguUSER
2.4:显示数据库详细信息,extended
hive> desc database extended db_hive; OK db_hive hdfs://hadoop102: 9820 /user/hive/warehouse/db_hive.db atguiguUSER
2.5:切换当前数据库
hive (default)> use db_hive;
3:修改数据库
hive (default)> alter database db_hive set dbproperties('createtime'='20170830');
hive> desc database extended db_hive; db_name comment location owner_name owner_type parameters db_hive hdfs://hadoop102: 9820 /user/hive/warehouse/db_hive.db atguigu USER {createtime=20170830}
4:删除数据库
4.1:删除空数据库
hive>drop database db_hive2;
4.2:删除的数据库不存在,使用if exists判断是否存在
hive> drop database db_hive; FAILED: SemanticException [Error 10072]: Database does not exist: db_hive hive> drop database if exists db_hive2;
4.3:如果数据库不为空,可以采用cascade命令,强制删除
hive> drop database db_hive; FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database db_hive is not empty. One or more tables exist.) hive> drop database db_hive cascade;
5:创建表
5.1:建表
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment],...)] [COMMENT ta ble_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], [CLUSTERED BY (col_name, col_name, [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path] [TBL PROPERTIES (property_name=property_value, ...)] [AS select_statement]
5.2:介绍
1:EXTRNAL 关键字可以让用户创建一个外部表
2:PARTITIONED BY 创建分区表
3:CLUSTERED BY 创建分桶表
4:SORTED BY 对桶中的一个或多个列另外排序
5:ROW FORMAT:定义行的格式
eg:create table test(id int,name string) row format delimited fields terminated by ',';
这样的话,使用insert语句插入数据的时候,在hdfs上面对应的文件内容就是以逗号分隔的,否则会使用默认的分隔符,使用逗号这样的,对于后续通过是哟个hdfs -put 命令,将文件上传到hdfs上,也有好处,需要注意的时,文件的内容需要也是以逗号分隔,不然会生成null
6:FILE_FORMAT:指定文件格式
7:hdfs_path:指定表的位置信息
8:TBL PROPERTIES:额外属性
9:AS :后跟查询语句,根据查询结果创建表
6: 管理表(内部表)和外部表
1:当我们删除一个管理表时,Hive也会删除这个表中的数据,管理表不适合和其他工具共享数据。但是删除外部表的时候,只会删除元数据信息,不会删除表中的数据,即mysql里面信息会被删除,但是数据仍然在hdfs上面有保存。
2:如果是外部表,就算是手误删除了,如果能找到建表语句,然后执行之后,通过select语句还是能找到之前表中的数据。安全性更高一些。但是内部表就不会这样,不能找到数据。
3:内部表和外部表的转换
1:查询表的类型
hive (default)> desc formatted student2 Table Type: MANAGED_TABLE
2:修改内部表student2为外部表
alter table student2 set tblproperties('EXTERNAL'='TRUE');
3:查询表的类型
hive (default)> desc formatted student2 Table Type: EXTERNAL _TABLE
4:修改外部表student2为内部表
alter table student2 set tblproperties('EXTERNAL'='FALSE');
5:查询表的类型
hive (default)> desc formatted student2; Table Type: MANAGED_TABLE
7:修改表
1:重命名表
hive (default)> alter table dept_partition2 rename to dept_partition3;
2:更新列
ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]
3:增加和替换列
ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) ADD 是代表新增一字段,字段位置在所有列后,(partition列前) REPLACE 则是表示替换表中所有字段,REPLACE 是整张表的角度,CHANGE 是单个列的角度
4:查询表结构
hive> desc dept;
5:添加列
hive (default)> alter table dept add columns(deptdesc string);
6:查询表结构
hive> desc dept;
7:更新列
hive (default)> alter table dept change column deptdesc desc string 就算是不想改类型,也要把原来的类型加上去
8:查询表结构
hive> desc dept;
9:替换列
hive (default)> alter table dept replace columns(deptno string, dname string, loc string);
10:查询表结构
hive> desc dept;
11:删除表
hive (default)> drop table dept;