Hive 中内部表与外部表的区别与创建方法

先来说下Hive中内部表与外部表的区别: 
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 
不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除, 
而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。 

需要注意的是传统数据库对表数据验证是 schema on write(写时模式),而 Hive 在load时是不检查数据是否 
符合schema的,hive 遵循的是 schema on read(读时模式),只有在读的时候hive才检查、解析具体的 
数据字段、schema。 
读时模式的优势是load data 非常迅速,因为它不需要读取数据进行解析,仅仅进行文件的复制或者移动。 
写时模式的优势是提升了查询性能,因为预先解析之后可以对列建立索引,并压缩,但这样也会花费要多的加载时间。 

下面来看下 Hive 如何创建内部表: 

1 create table test(userid string);
2 LOAD DATA INPATH '/tmp/result/20121213' INTO TABLE test partition(ptDate='20121213');

这个很简单,不多说了,下面看下外部表: 

01hadoop fs -ls /tmp/result/20121214
02Found 2 items
03 -rw-r--r--   3 june supergroup       1240 2012-12-26 17:15 /tmp/result/20121214/part-00000
04 -rw-r--r--   1 june supergroup       1240 2012-12-26 17:58 /tmp/result/20121214/part-00001
05-- 建表
06 create EXTERNAL table IF NOT EXISTS test (userid string) partitioned by (ptDate string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
07-- 建立分区表,利用分区表的特性加载多个目录下的文件,并且分区字段可以作为where条件,更为重要的是
08-- 这种加载数据的方式是不会移动数据文件的,这点和 load data 不同,后者会移动数据文件至数据仓库目录。
09 alter table test add partition (ptDate='20121214') location '/tmp/result/20121214';
10-- 注意目录20121214最后不要画蛇添足加 /*,我就是linux shell用多了,加了这玩意,调试了一下午。。。

注意:location后面跟的是目录,不是文件,hive会把整个目录下的文件都加载到表中:

1 create EXTERNAL table IF NOT EXISTS userInfo (id int,sex string, age int, name string, email string,sd string, ed string)  ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' location '/hive/dw';

否则,会报错误:

FAILED: Error in metadata: MetaException(message:Got exception: org.apache.hadoop.ipc.RemoteException java.io.FileNotFoundException: Parent path is not a directory: /hive/dw/record_2013-04-04.txt

最后提下还有一种方式是建表的时候就指定外部表的数据源路径,

但这样的坏处是只能加载一个数据源了:

CREATE EXTERNAL TABLE sunwg_test09(id INT, name string) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ‘\t’ 
LOCATION ‘/sunwg/test08′; 
上面的语句创建了一张名字为sunwg_test09的外表,该表有id和name两个字段, 
字段的分割符为tab,文件的数据文件夹为/sunwg/test08 
select * from sunwg_test09; 
可以查询到sunwg_test09中的数据。 
在当前用户hive的根目录下找不到sunwg_test09文件夹。 
此时hive将该表的数据文件信息保存到metadata数据库中。 
mysql> select * from TBLS where TBL_NAME=’sunwg_test09′; 
可以看到该表的类型为EXTERNAL_TABLE。 
mysql> select * from SDS where SD_ID=TBL_ID; 
在表SDS中记录了表sunwg_test09的数据文件路径为hdfs://hadoop00:9000/hjl/test08。 
# hjl为hive的数据库名 

实际上外表不光可以指定hdfs的目录,本地的目录也是可以的。 
比如: 
CREATE EXTERNAL TABLE test10(id INT, name string) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ‘\t’ 

LOCATION ‘file:////home/hjl/sunwg/’;

推荐阅读:

hive中partition如何使用
http://p-x1984.iteye.com/blog/1156408
用正则表达式匹配w3c日志,导入hive
http://essen.iteye.com/blog/1720491
hive中的外表EXTERNAL TABLE

http://www.oratea.net/?p=489

HIVE 数据定义 DDL

http://www.kaixinwenda.com/article-iquicksandi-8522691.html

转载

http://my.oschina.net/leejun2005/blog/98490

大数据学习笔记35:Hive - 内部表与外部表 文章目录一、内部表1、什么是内部表2、创建与操作内部表任务1、创建park数据库 一、内部表 1、什么是内部表 在hive里用“create table命令”创建一张表,然后向这个表插入数据(通过insert命令插入数据,也可以通过加载外部文件的方式来插入数据),这样的表叫做内部表。 2、创建与操作内部表 任务1、创建park数据库 hive> create database park; ... 阅读详情

相关推荐

使用STM32F103C8T6控制舵机丝滑运转附代码

使用STM32F103C8T6控制舵机丝滑运转原理和案例,附代码。

m0_63566592的博客 4238

Hive内部表和外部表的区别

主要体现在load与drop(是否同时删除元数据与数据)的操作上: 创建表: Hive创建内部表时,会将数据移动到数据仓库指向的路径,hive管理数据的生命周期; Hive创建外部表时,仅记录数据所在的路径,不对数据的位置做任何改变。 删除表: Hive删除内部表时,内部表的元数据和数据会一起被删除,同时对于一些hive操作不适应于外部表,比如单个查询语句创建表并向表中插入数据。 Hive删除外部表时,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。创建外部表时,甚至不

airyv的博客 1万+

PyTorch实战:从零构建CNN图像分类模型

卷积神经网络(CNN)作为计算机视觉的核心架构,通过局部连接和权值共享机制高效处理图像数据。其核心组件包括卷积层、池化层和全连接层,其中PyTorch的动态计算图特性为CNN实现提供了灵活的开发环境。在工程实践中,使用CIFAR-10这类标准数据集可以快速验证模型性能,而数据增强和批归一化等技术能有效提升模型泛化能力。通过PyTorch实现CNN不仅能够掌握图像分类的基本原理,还能为后续迁移学习和复杂视觉任务打下基础,特别是在结合Adam优化器和学习率调度策略后,模型收敛速度和准确率都能得到显著提升。

weixin_42405592的博客 318

hive创建表(内部表和外部表)

一、理论 1)建表语法 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_nam

now 1万+

QSPI Flash的原理与QSPI时序的Verilog实现

本节主要是讨论QSPI(Quad SPI,四线SPI总线)的相关内容。我的开发板上有一片型号是W25Q128BV的Quad SPI Flash存储器,本文将以它为例子来说明QSPI操作的一些内容。

Go Forward Forever! 4166

ONNC Open Neural Network Compiler 开源神经网络编译器 一个 开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)部署导入ONNX模型

ONNC是一个集合了开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)。ONNC从底层开始构建,旨在将ONNX中间表示(IR)翻译成专有DLA代码。其软件架构设计强调可移植性和可重用性,从而简化了开发新后端的工作。上图展示了ONNC软件栈的顶层框图。软件栈从导入ONNX计算图模型到输出相应的硬件二进制文件,展示了各个功能块。

万有文的博客 1997

Hive创建内部表

启动Hive hive 内部表 建表 create table test1(id int,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; 创建完成后使用 show tables; 查看是否创建成功. show tables; hive> show tables; OK s...

weixin_43865893的博客 6112

微信电脑版本不会自动下载图片吗?——没有找到解决方法。——只会默认下载doc等文件,图片不行,需要自己另存为——有什么办法解决吗?

微信电脑版本不会自动下载图片吗?——没有找到解决方法。——只会默认下载doc等文件,图片不行,需要自己另存为——有什么办法解决吗?此外,用户还可以选择将接收到的图片、视频和文件保存到指定的文件夹中。‌用户可以在微信设置中调整这一设置。

qq_15963745的博客 5092

HIVE内表与外表的区别

hive内外表的区别,主要总结六点区别

m0_70949976的博客 2572

今日头条面试——iOS开发面试题

layoutIfNeeded和setNeedsLayout的区别。* Pod update和pod install的区别。* 10、autoreleasepool的使用场景。* 如何hook一个对象的方法,而不影响其它对象。* 数组cop后里面的元素会复制一份新的吗。* 介绍项目,主要介绍自己强项一点的地方。* assing可以使用在对象中吗。* isEquel和hash的关系。* 4、谈谈runtime的理解。* 8、谈谈runloop的理解。* copy和strong的区别。

FPGA/MATLAB学习教程/源码/项目合作开发 594

算法 | A*算法实现最优路径规划

启发式探索是利用问题拥有的启发信息来引导搜索,达到减少探索范围、降低问题复杂度的目的。A*寻路算法是启发式探索的一个典型实践,在寻路搜索的过程中,给每个节点绑定了一个估计值(即启发式),在对节点的遍历过程中采取估计值优先原则,估计值更优的节点会被优先遍历。...

不断学习,不断进步,提高自己 6635

Hive表---内部表、外部表、数据导入和导出

内部表、外部表、数据导入和导出的学习

Yan_bigdata的博客 2694

SAP 未清PO数量 = 采购订单数量 - 已收货数量

本文介绍了SAP系统中查询未清PO数量的6种方法:1.标准采购报表(ME2L/ME2M/ME2N)适合业务用户快速查询;2.物料需求报表(MD04)可查看单个物料的供需情况;3.SQVI快速查询器提供自定义字段的灵活性;4.ABAP报表适合开发人员处理复杂逻辑;5.SAPQuery经配置后可供业务用户使用;6.BI/HANA方案适合大数据量分析。每种方法各有优缺点,用户可根据自身技术水平和具体需求选择,日常查询推荐使用标准采购报表ME2L/ME2M。

金牌架构师 1865

hive外部表改为内部表_Hive中内部表与外部表的区别与创建方法

先来说下Hive中内部表与外部表的区别:Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。需要注意的是传统数据库对表数据验证是 schema on write(写时模式),而 Hi...

weixin_39997400的博客 514

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Hive内部表和外部表的区别及如何创建

目前所创建的表都是所谓的管理表,有时也被称为内部表,因为这种表,Hive会(或多或少地)控制着数据的生命周期。 当删除一个管理表时,Hive也会删除这个表中的数据,管理表不方便和其他工作共享数据。 内部表(internal table/managed table): 没有external修饰,表数据保存在Hive默认的路径下,数据完全由Hive管理,删除表时元数据和表数据都会一起删除。 外部表...

qq_39783601的博客 1745

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: Hive 常见问题与技巧
下一篇: java编译
weixir123
博客等级 码龄16年 1粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值