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 ;