码迷,mamicode.com
首页 > 其他好文 > 详细

hive的两种表

时间:2015-08-17 13:59:25      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

1.内部表

  • 内部表在LOAD数据时,如果使用LOCAL关键字,Hive会把本地文件系统中的数据文件复制Hive /warehouse 目录。反之,则是将HDFS上的数据文件剪切到 /warehouse 目录。
  • Hive在LOAD数据时,并不检查目录中的文件是否符合为表所声明的模式。只有通过SELECT查询返回空值NULL,才能确定不匹配。
  • 内部表删除时,表的元数据(mysql)和数据文件(hdfs)都会被删除。
create table book (id bigint, name string) row format delimited fields terminated by \t;

2.外部表

  • 外部表:只需在创建表时显示的指定表中数据的存储位置即可。Hive不会把数据剪切到自己的目录。
  • 实际上,在创建表时,Hive甚至不会检查这一外部位置是否存在。这是一个非常重要的特性,因为这意味着可以先创建表,再上传数据文件。
  • 如果不显示指定外部表的存放路径,这样Hive将在HDFS上的 /user/hive/warehouse/ 文件夹下创建一个以外部表表名的文件夹,并将属于这个表的数据存放在这里
  • 对于以下命令,执行成功后,会在hdfs上自动创建空目录‘/book‘用来存储数据文件。
  • 外部表在删除表时,不会碰数据文件,而只会删除元数据信息,即HDFS上的‘/book‘目录依旧存在
create external table book (id bigint, name string) row format delimited fields terminated by \t location /book;

最后归纳两种表的区别:

  1. 导入数据到外部表,数据并没有移动到 ‘/user/hive/warehouse/T_Name‘目录下,也就是说外部表中的数据并不是由它自己来管理的!而内部表则不一样;
  2. 删除内部表的时候,Hive将会把属于内部表的元数据和数据文件全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据文件是不会删除的!

3.两种表的选择

  • 所有的处理都由Hive完成,应该使用内部表。
  • Hive和其他工具共同处理同一数据集,或者,为同一个数据集关联不同的模式使用外部表。

4.存储格式

  • 如果在创建表时没有用row format或stored as子句,那么Hive使用默认格式来分割的每一行。
  • 默认的行内分隔符不是制表符,而是ASCII控制码集合中的Control-A(它的ASCII码为1)
  • 这是因为它出现在文本中的概率相对于制表符来说概率更小。
CREATE TABLE records ( id string ) Row Format Delimited Fields Terminated By ‘\t’ ;

  英语解释:行内格式的限定符以 ‘ \t ‘结尾终止

hive的两种表

标签:

原文地址:http://www.cnblogs.com/skyl/p/4736230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!