hive内部表、外部表、分区
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)
来创建表的分区,比方说
create table table_name (
id int,
dtDontQuery string,
name string
)
partitioned by (date string)
- 注意,假如table里有date字段,那么分区的时候不要用date了,不然当查询的时候写
where data=xxx
时会出错,即下面这种情况:
create table table_name (
id int,
date string,
name string
)
partitioned by (date string)
- 尽量不用date这个字,根据系统设置不同,可能会触发不同的错误,如
FAILED: ParseException line 3:16 Failed to recognize predicate 'date'. Failed rule: 'identifier' in column specification
,有的时候又遇不到,换一个词就好了 - 外部表创建时也可以直接指定路径,但是此时就只能加载一个数据源了,不推荐使用
例子
- 创建内部表以及分区
create table test(name string);
LOAD DATA INPATH '/hdfs_home/20170808' INTO TABLE test partition(date='20170808');
或
create table test_3 (name string, age int) partitioned by (date string) row format delimited fields terminated by ',' lines terminated by '\n';
LOAD DATA INPATH '/hdfs_home/20170808' INTO TABLE test partition(date='20170808'); # 指向文件夹即可
# 执行后原hdfs路径下20170808文件夹已经不存在(被移动走了)
- 外部表及分区创建
hive> create external table test_4 (name string, age int) partitioned by (date string) row format delimited fields terminated by ',' lines terminated by '\n';
OK
Time taken: 0.121 seconds
hive> alter table test_4 add partition (date='20170809') location '/hdfs_home/20170809/';
OK
hive> select * from test_4 where date = '20170809';
OK
zhao 14 20170809
# 此时/hdfs_home/20170809还在原路径下
# 若使用以下命令进行操作,则相当于内部表的操作了,即原路径文件消失
alter table test_4 add partition (date='20170809');
load data inpath ('/hdfs_home/20170809/') into table test_4 partition (date='20170809')
- 查看表的分区
show partitions table_name;
- 查看是内部表还是外部表
describe extended tablename;
or
desc formatted tablename;
- 删除分区
ALTER TABLE table_name DROP PARTITION (day='20140722');
参考
- https://my.oschina.net/leejun2005/blog/98490
- https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-ManagedandExternalTables
hive内部表、外部表、分区的更多相关文章
- 第2节 hive基本操作:9、hive当中创建外部表的语法及外部表的操作&分区表的语法和操作
外部表: 外部表说明: 外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉 管理表和外部 ...
- Hive基础(5)---内部表 外部表 临时表
1.外部表 关键字:EXTERNAL 外部表创建时需要指定LOCATION 删除外部表时,数据不被删除 CREATE EXTERNAL TABLE page_view(viewTime INT, us ...
- Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)
本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...
- hive 四种表,分区表,内部,外部表,桶表
Hive四大表类型内部表.外部表.分区表和桶表 一.概述 总体上Hive有四种表:外部表,内部表(管理表),分区表,桶表.分别对应不同的需求.下面主要讲解各种表的适用情形.创建和加载数据方法. 二.具 ...
- hive内部表&外部表介绍
未被external修饰的是内部表(managed table),被external修饰的为外部表(external table):区别:内部表数据由Hive自身管理,外部表数据由HDFS管理:内部表 ...
- Hive内部表外部表转化分析(装)
link:http://anyoneking.com/archives/127hive表分为内部表和外部表.外部表在删除的时候并不会删除到hdfs中的文件,比较安全,所以对于重要的需要进行分析的日志建 ...
- 分区表,桶表,外部表,以及hive一些命令行小工具
hive中的表与hdfs中的文件通过metastore关联起来的.Hive的数据模型:内部表,分区表,外部表,桶表受控表(managed table):包括内部表,分区表,桶表 内部表: 我们删除表的 ...
- oracle-对象表-外部表
http://www.blogjava.net/decode360/archive/2008/10/16/286802.html create or replace type person as ob ...
- hive 内部表和外部表的区别和理解
1. 内部表 create table test (name string , age string) location '/input/table_data'; 注:hive默认创建的是内部表 此时 ...
- hive内部表、外部表
hive内部表.外部表区别自不用说,可实际用的时候还是要小心. Hive的数据分为表数据和元数据,表数据是Hive中表格(table)具有的数据:而元数据是用来存储表的名字,表的列和分区及其属性,表的 ...
随机推荐
- Ubuntu远程桌面,如何退出全屏
首先安装Linux 下远程桌面客户端软件-rdesktop 打开终端 执行sudo apt-get install rdesktop 远程连接XP 系统(前提是windows xp 必须打开并且允许远 ...
- 理解metrics.classification_report
混淆矩阵是一个矩阵,类别个数可以有多个,a[i][j]表示将类别i的样本误判为类别j的个数. classification_report用来分析不同类别的准确率,召回率,F1值等,从而便于按照类别查看 ...
- Android开发环境内容汇总
Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...
- HDU 1850 Being a Good Boy in Spring Festival (Nim博弈)
Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32 ...
- Centos6.5使用yum安装mysql——快速上手必备(转)
第1步.yum安装mysql[root@stonex ~]# yum -y install mysql-server安装结果:Installed: mysql-server.x86_64 0: ...
- 如何设置IIS程序池的回收时间,才能最大程度的减少对用户的影响?
作为.Net开发人员,其实对IIS的应用程序池知之甚少,在工作中我也有几次遇到过网站无故打不开的情况,找了半天原因也找不到是怎么造成的,有一次我给网站找了一个程序程序池后发现就能正常访问了,这也让我对 ...
- 【java】详解集合
目录结构: contents structure [-] 集合概述 什么是集合 Collection和Map的区别 List和Set的区别 ArrayList和LinkedList的区别 HashSe ...
- Xcode dSYM 文件
1.什么是 dSYM 文件 Xcode 编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且 ...
- EasyUI datagird 排序 按数字类型的问题
easyui datagird 默认显示的数据都是字符, 对要数字列进行排序规则,需要自定义排序规则如果按字符排序 27竟然小于4 这不是我们想要的.解决方案 <table id='grid'c ...
- [转]What are mode and status columns under gp_segment_configuration table
February 16, 2017 10:39 Goal In this article we will try to understand and answer to the below two q ...