hive内部表、外部表、分区

内部表(managed table)
  • 默认创建的是内部表(managed table),存储位置在hive.metastore.warehouse.dir设置,默认位置是/user/hive/warehouse
  • 导入数据的时候是将文件剪切(移动)到指定位置,即原有路径下文件不再存在
  • 删除表的时候,数据和元数据都将被删除
  • 默认创建的就是内部表create table xxx (xx xxx)
外部表(external table)
  • 外部表文件可以在外部系统上,只要有访问权限就可以
  • 外部表导入文件时不移动文件,仅仅是添加一个metadata
  • 删除外部表时原数据不会被删除
  • 分辨外部表内部表可以使用DESCRIBE FORMATTED table_name 命令查看
  • 创建外部表命令添加一个external即可,即create external table xxx (xxx)
  • 外部表指向的数据发生变化的时候会自动更新,不用特殊处理
表分区(Partitioned table)
  • 有些时候数据是有组织的,比方按日期/类型等分类,而查询数据的时候也经常只关心部分数据,比方说我只想查2017年8月8号,此时可以创建分区
  • 使用partioned by (xxx)来创建表的分区,比方说
  1. create table table_name (
  2. id int,
  3. dtDontQuery string,
  4. name string
  5. )
  6. partitioned by (date string)
  • 注意,假如table里有date字段,那么分区的时候不要用date了,不然当查询的时候写where data=xxx时会出错,即下面这种情况:
  1. create table table_name (
  2. id int,
  3. date string,
  4. name string
  5. )
  6. partitioned by (date string)
  • 尽量不用date这个字,根据系统设置不同,可能会触发不同的错误,如FAILED: ParseException line 3:16 Failed to recognize predicate 'date'. Failed rule: 'identifier' in column specification,有的时候又遇不到,换一个词就好了
  • 外部表创建时也可以直接指定路径,但是此时就只能加载一个数据源了,不推荐使用
例子
  • 创建内部表以及分区
  1. create table test(name string);
  2. LOAD DATA INPATH '/hdfs_home/20170808' INTO TABLE test partition(date='20170808');
  3. create table test_3 (name string, age int) partitioned by (date string) row format delimited fields terminated by ',' lines terminated by '\n';
  4. LOAD DATA INPATH '/hdfs_home/20170808' INTO TABLE test partition(date='20170808'); # 指向文件夹即可
  5. # 执行后原hdfs路径下20170808文件夹已经不存在(被移动走了)
  • 外部表及分区创建
  1. hive> create external table test_4 (name string, age int) partitioned by (date string) row format delimited fields terminated by ',' lines terminated by '\n';
  2. OK
  3. Time taken: 0.121 seconds
  4. hive> alter table test_4 add partition (date='20170809') location '/hdfs_home/20170809/';
  5. OK
  6. hive> select * from test_4 where date = '20170809';
  7. OK
  8. zhao 14 20170809
  9. # 此时/hdfs_home/20170809还在原路径下
  10. # 若使用以下命令进行操作,则相当于内部表的操作了,即原路径文件消失
  11. alter table test_4 add partition (date='20170809');
  12. load data inpath ('/hdfs_home/20170809/') into table test_4 partition (date='20170809')
  • 查看表的分区
  1. show partitions table_name;
  • 查看是内部表还是外部表
  1. describe extended tablename;
  2. or
  3. desc formatted tablename;
  • 删除分区
  1. ALTER TABLE table_name DROP PARTITION (day='20140722');
参考

hive内部表、外部表、分区的更多相关文章

  1. 第2节 hive基本操作:9、hive当中创建外部表的语法及外部表的操作&分区表的语法和操作

    外部表: 外部表说明: 外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉 管理表和外部 ...

  2. Hive基础(5)---内部表 外部表 临时表

    1.外部表 关键字:EXTERNAL 外部表创建时需要指定LOCATION 删除外部表时,数据不被删除 CREATE EXTERNAL TABLE page_view(viewTime INT, us ...

  3. Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)

    本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...

  4. hive 四种表,分区表,内部,外部表,桶表

    Hive四大表类型内部表.外部表.分区表和桶表 一.概述 总体上Hive有四种表:外部表,内部表(管理表),分区表,桶表.分别对应不同的需求.下面主要讲解各种表的适用情形.创建和加载数据方法. 二.具 ...

  5. hive内部表&外部表介绍

    未被external修饰的是内部表(managed table),被external修饰的为外部表(external table):区别:内部表数据由Hive自身管理,外部表数据由HDFS管理:内部表 ...

  6. Hive内部表外部表转化分析(装)

    link:http://anyoneking.com/archives/127hive表分为内部表和外部表.外部表在删除的时候并不会删除到hdfs中的文件,比较安全,所以对于重要的需要进行分析的日志建 ...

  7. 分区表,桶表,外部表,以及hive一些命令行小工具

    hive中的表与hdfs中的文件通过metastore关联起来的.Hive的数据模型:内部表,分区表,外部表,桶表受控表(managed table):包括内部表,分区表,桶表 内部表: 我们删除表的 ...

  8. oracle-对象表-外部表

    http://www.blogjava.net/decode360/archive/2008/10/16/286802.html create or replace type person as ob ...

  9. hive 内部表和外部表的区别和理解

    1. 内部表 create table test (name string , age string) location '/input/table_data'; 注:hive默认创建的是内部表 此时 ...

  10. hive内部表、外部表

    hive内部表.外部表区别自不用说,可实际用的时候还是要小心. Hive的数据分为表数据和元数据,表数据是Hive中表格(table)具有的数据:而元数据是用来存储表的名字,表的列和分区及其属性,表的 ...

随机推荐

  1. iOS presentedViewController和presentingViewController的区别

    当我们用present进行界面跳转时,会涉及到一个传向关系. 比如:A -> B    界面A跳转界面B A.presentedViewControlle = B B.presentingVie ...

  2. 系统监控nagios–安装

    安装:环境:CentOS6.0 32bit 1.先相关软件包 yum install httpd php gcc glibc glibc-common gd gd-devel make 2.创建用户信 ...

  3. java.lang.IllegalStateException: No typehandler found for mapping XXX

    前言:今天遇到了这个问题,刚开始觉得很容易解决的,毕竟能定位到出问题的文件和对应的字段,根据以往的经验也可以判断出是字段映射类型不匹配的问题,后来找了半天还是没找到问题的根源,从网上百度,也没看到令人 ...

  4. solr开发从查询结果集中获取对象数据

    solrJ从查询结果集中获取对象数据. 方案一:自定义转换方式 /** * * SolrDocument与实体类转换 [测试通过] * * @author pudongping * * @param ...

  5. SQL中获取排序分组后数据的脚本

    废话不多说了,先上一段代码,如下所示: select distinct   b.OrgID,b.CompanyID,b.AreaID,b.CustChannelID,b.CustID,b.SaleTo ...

  6. vc++加载透明png图片方法-GDI+和CImage两种

    转载自:http://blog.csdn.net/zhongbin104/article/details/8730935 先看看GDI+的方法方法1:   1.GDI+画透明图层(alpha)的png ...

  7. 供CImage类显示的半透明PNG文件处理方法

    原文链接: http://blog.sina.com.cn/s/blog_4070692f010003gy.html   前补:没想到这个帖子好像挺多人看哪……看来大家都被这个png郁闷的够呛.显示p ...

  8. android 中 viewpager 滑动的指示器

    先看下效果图: 这个需要用到1个开源的 库,这个后面也会说下的. 工程目录: 1. MainActivity.java public class MainActivity extends Fragme ...

  9. Java服务端单元测试指南

    https://juejin.im/entry/5acad0806fb9a028cd456236

  10. 纯干货,Spring-data-jpa详解(转)

    本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求.这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring ...