Hive-day03-DDL语句

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;

上一篇:报错:Error querying database. Cause: java.sql.SQLException: Access denied for user ‘root‘@‘localhost‘


下一篇:wordpress提示“Error establishing a database connection“的解决办法