Hive数据定义

HiveQL是Hive查询语言,作为ANSI SQL的一种方言。但是其还是有和关系数据库支持的SQL中有本质的差异。如:Hive不支持事务,且默认情况下不支持行级别插入,更新,删除操作。
虽然可以在HiveQL中使用关联子句,但HiveQL中并没有主外键概念,也就没有强制的约束控制,这样数据的存储可以宽泛很多。

Hive数据库

Hive中的数据库概念本质上仅仅是目录或者命名空间,然而用户来说,这样可以避免表命名冲突。通常使用数据库将生产表组织成逻辑组。

数据库

在Hive中有一个默认的库 default。
Hive 为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存在。

创建创建库:
CREATE DATABASE IF NOT EXISTS DB_NAME;

获取数据库列表 :
show databases;  
show databases LIKE 'h.*'

查看数据库的详细信息:
DESCRIBE DATABASE DB_NAME;
DESCRIBE DATABASE EXTENDED DB_NAME;

删除数据库:
DROP DATABASE IF EXISTS DB_NAME;

修改数据库,可以用来对数据库的DBPROPERTIES设置键值对属性,数据库的元数据信息不可以修改:
ALTER DATABASE DB_NAME SET DBPROPERTIES('A'='B');

CREATE TABLE语句遵守SQL语法惯例。但Hive中具有扩展性,有更广泛的灵活性。如可以定标数据文件存储在什么位置,使用什么样的存储格式。

创建表的3中方法
    直接创建:
    CREATE TABLE IF NOT EXISTS TABLE_NAME (col_name data_type); 

    查询建表:
    CREATE TABLE IF NOT EXISTS TABLE_NAME 
    SELECT * FROM TABLE_NAME_2 ;

    LIKE建表:(复制了表结构)
    CREATE TABLE TABLE_NAME LIKE TABLE_NAME_2 ;

    LOCATION 子句指定表数据文件的存储路径,默认情况下是默认的数据仓库的路径,也可以指定不同的路径,针对这种情况多是针对外部表的设置。
查看表信息:
    DESCRIBE(DESC) TABLE_NAME ; 
    DESCRIBE(DESC) EXTENDED TABLE_NAME[.col_name] ;   -- 查询更加信息的信息
    DESCRIBE(DESC) FORMATTED  TABLE_NAME[.col_name] ; -- 更多的信息,且信息的可读性更强

内部表(管理表)和外部表:
    内部表: 内部表删除后,表元数据和表数据都被删除。对于内部表不方便与其他工作共享数据,只属于Hive,有完整的权限进行操作。
            创建表使用的常规的创建表的语句。
    外部表: 数据是和Hive进行共享的,当表删除时,仅删除表的元数据,但是数据还是保留的。 
            创建表使用的语句,LOCATION 指明了数据位于哪个位置下。
    CREATE EXTERNAL TABLE IF NOT EXISTS TABLE_NAME (col_name data_type) 
    LOCATION  'path/paht2'  ;

分区表:
    通过使用分区来水平分散压力,将数据从物理上转移到使用最频繁的用户更近的地方,及其他目的。在Hive中分区的概念,其具有性能优势,
    分区表还可以将数据以一种符合逻辑的方式进行组织,比如分层存储。使用关键字PARTITIONED,使用的分区表会改变数据存储组织方式。

    CREATE TABLE IF NOT EXISTS TABLE_NAME (col_name data_type) 
    PARTITIONED BY(col_name date_type , col_name data_type);

删除表:
    DROP TABLE IF EXISTS TABLE_NAME ;


修改表:
    表重命名: ALTER TABLE TABLE_NAME RENAME NEW_NAME ; 

    增加,修改和删除表分区:   
    ALTER TABLE TABLE_NAME ADD IF NOT EXISTS PARTITION (col_name=''...) LOCATION 'PATH'

    修改列信息:可以进行重命名,修改位置,类型或者注释。 
    ALTER TABLE TABLE_NAME CHANGE COLUMN column_name  

    增加列: 添加列到以后字段后
    ALTER TABLE TABLE_NAME ADD COLUMNS(col_name date_type,.....);

    删除或替换列:
    ALTER TABLE TABLE_NAME REPLACE COLUMNS( 
      col_name  col_type COMMENT '',
      ......  
    )

修改存储属性:
    ALTER TABLE TABLE_NAME PARTITION(col_name....) SET FILEFORMAT SEQUENCEFILE ;