168大数据

标题: Hive的数据模型 [打印本页]

作者: 168主编    时间: 2019-1-22 21:22
标题: Hive的数据模型
内部表(Table)
内部表与数据库中的Table在概念上是类似的
每一个Table在Hive上都有一个对应的目录存储数据
所有的Table数据(不包括External Table)都保存在这个目录中
删除表时,元数据和数据都会删除
创建内部表
--创建t1表
CREATE TABLE t1(    tid int,    tname string,    age int);指定存储数据的位置CREATE TABLE t2(    tid int,    tname string,    age int)LOCATION '/mytable/hive/t2';指定列分隔符CREATE TABLE t3(    tid int,    tname string,    age int)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';从已有的表创建并指定分隔符为逗号CREATE TABLE t4 ROW FORMAT DELIMITED FIELDS TERMINATED BY ','AS SELECT * FROM tablename;分区表(Partition)
使用分区可以提高查询的效率
partition 对应数据库中的Partition列的密集索引
在Hive中,表中的一个Partition对应表下的一个目录,所有的Partition的数据都存储在对应的目录中
创建分区表CREATE TABLE partition_table(    sid int,    sname string)PARTITIONED BY (gender string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';插入数据INSERT INTO TABLE partition_table partition(gender='M')SELECT sid,sname FROM table_name WHERE gender='M';查看对比分区表与没有分区表的执行计划,执行计划由从上往下,从右往左的顺序。explain SELECT * FROM partition_table WHERE gender='M';explain SELECT * FROM student1;外部表
指向已经在HDFS中存在的数据,可以创建Partition
它和内部表在元数据的组织是相同的,而实际数据的存储则有较大的差异
外部表只有一个过程,加载数据和创建表同时完成,并不会移动数据到数据仓库的目录中,只是与外部数据建立一个链接。当删除一个外部表时,仅删除该链接。
创建外部表CREATE EXTERNAL TABLE external_student(    sid int,    sname string,    age int)ROW FORMAT DELIMITED FIELDS TERMINATED BY ','LOCATION 'hdfs_location';桶表(Bucket Table)
降低系统的热块,提高查询的速度
桶表是对数据进行哈希取值,然后放到不同的文件中
创建桶表CREATE TABLE bucket_table(    sid int,    sname string,    age int)CLUSTERED BY(sname) INTO 5 BUCKETS;视图(View)
视图是一种虚表,是一个逻辑概念;可以跨越多张表
视图建立在已有表的基础之上,视图赖以建立的这些表称为基表
视图可以简化复杂的查询
创建视图CREATE VIEW onion_referrers(url COMMENT 'URL of Referring page')  COMMENT 'Referrers to The Onion website'  AS  SELECT DISTINCT referrer_url  FROM page_view  WHERE page_url='http://www.theonion.com';删除视图DROP VIEW onion_referrers;





欢迎光临 168大数据 (http://www.bi168.cn/) Powered by Discuz! X3.2