Hive(二) -- ddl

        Hive支持标准SQL,同时又有自己的特点,属于方言版SQL。Hive的ddl主要包含对于数据库和表的查询、创建和删除。dml包含数据查询和插入,其中插入有load和insert两种方式,针对于4种表的特点有不同的插入方式。

一、ddl : data define language

库:

        创建库:create database dname;

        切换库:use dname;

        查询库列表:show database;        show database like 'dname*';

        查询正在使用的库:select current_database();

        查询库的详细信息:desc database dname;

        删除库:drop database dname [cascade];  # 若库中有表存在,需要添加cascade

表:

        1. 创建

        Hive表的创建共有三种方式:create、CTAS、like

1)create

        create [external] table [if not exists] tname(col_name data_type)

                [partitioned by (col_name data_type)]   

                [(clustered by (col_name, col_name, ...))

                [sorted by (col_name [ASC | DESC], ...)] into num_buckets buckets]

                [row format row_format]

                [location hdfs_path] 

        [解析]:

        1)[external]:外部表关键字。不加默认创建内部表(又名管理表)

                若数据已经存储在HDFS上,需要使用Hive去做数据分析,并且该数据还可能使用其它

        数据引擎做计算,此时应该选择外部表。

        2)[partitioned by (col_name data_type)]:

              partitioned by 创建分区表关键字。后边的分区字段可以是一个或多个。

              [注意]  分区字段不可以出现在建表字段中。Hive中每个分区以文件夹的形式单独存放在表

                        文件夹的目录下,分区以字段的形式存放在表结构中,但该字段不存放实际内容,

                        仅仅是分区的表示。

        3)[(clustered by (col_name, col_name, ...))

             clustered by 创建分桶表关键字。分桶字段可以一个或多个。

             [注意]  分桶字段必须是建表字段中的某个字段。

             [sorted by (col_name [ASC | DESC], ...)]  指定桶中排序规则

             into num_buckets buckets]  分桶个数。Hive采用对列值Hash,然后对桶的个数求余的方

                                                                            式确定该条记录存放在哪个桶中。

        4)[row format row_format]:指定分隔符

                列分隔符:fields terminated by ','

                行分隔符:lines terminated by '\n'    # 一般不需要指定

                元素分隔符:items terminated by '\t'    # 通常字段中存在map、array等复杂结构时使用

        5)[location hdfs_path]:指定Hive当前所建表的数据存储路径(HDFS上的路径)

                若指定location,则相当于将该数据与Hive表做了关联。若不指定location,则会将该数

        据移动至Hive表的创建目录中。通常情况下,若需要指定location,则创建外部表。内部表最

        好不要指定存储路径。

2)CTAS

        将另一个表中查询的数据保存到新建的表中。

        Create Table tname As Select ... from ...

3)like

        复制表。只复制表结构,不复制表中的数据。

        create table tname like old_tname;

2. 查看

        查看表列表:show tables;    show tables in db;    show table like '*';

        查看建表语句:show create table tname;

        查看表详细信息:desc [extended / formatted] tname;

        查看表的分区信息:show partitions tname;

3. 修改

        修改表名称:alter table tname rename to new_tname;

        修改表字段:alter table tname add columns (col_name, col_type)  # 添加列

                              alter table tname change col_name new_col_name col_type;  # 修改列

        修改分区:p代表分区字段

                          alter table tname add partition(p='aa') partition(p='bb')... [location '/user/hive/ptn']                                 # 添加分区 [可以指定分区路径]

                          alter table tname drop partition(p='aa')  # 删除分区

4. 删除

        清空表:truncate table tname;

        删除表:drop table tname [cascade];

视图:

        1. Hive中只有逻辑视图,没有物化视图

        2. Hive中的视图仅仅相当于一条查询语句的快捷方式

        3. Hive中的视图只支持查询,在执行查询时才开始执行视图对应的那些子查询

        4. 视图会将自己代表的SQL语句存储在元数据库中

1. 创建视图:create virw view_name as select ...;

2. 查看视图:show tables;        desc view_name;

3. 删除视图:drop view view_name;

        

你可能感兴趣的:(Hive,hive,sql,hadoop)