`
乡里伢崽
  • 浏览: 108164 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

    博客分类:
  • hive
 
阅读更多

分类: Hive 2013-12-07 11:56 1806人阅读 评论(0) 收藏 举报
先来说下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');这个很简单,不多说了,下面看下外部表:
01
hadoop fs -ls /tmp/result/20121214
02
Found 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内部表和外部表

    一:内部表和外部表的区别 创建表时使用关键字external创建的表就是外部表,没有使用该关键字创建的表就是内部表。 删除表时(drop table)内部表会删除hdfs对应路径,而外部表不会删除hdfs对应的路径, 删除表无论是...

    HIVE创建库创建表.docx

    在数据集目录中选取2个数据文件内部表创建表,选取2个数据文件创建外部表。 使用美国疫情数据创建分区表 疫情数据实现静态和动态加载数据到分区表 自己构建疫情数据实现多重分区表 使用美国疫情数据实现桶表 修改...

    hive搭建及使用入门简介(内含PPT、各种表创建sql及hive搭建使用笔记)

    适用人群:hive学习童鞋,hive方面从业人员 从hive的搭建 到 hive的分区表/内部表/外部表/分桶等sql讲解

    kingcall#all-kinds-book#4 Hive—基础—内部表和外部表1

    创建内部表CREATE TABLE ods.u_data (FIELDS TERMINATED BY '\t'当你建表成功并且把数据load 进去之后,你发现数

    Hadoop原理与技术Hive操作实验

    1:创建内部表 (1):start-all.sh,启动Hadoop所有进程 (2):初始化元数据库生成metastore (3):启动hive (4):把linus上面的rg.txt放到hdfs下 (5):show databases;显示所有数据库 (6):新建数据库...

    HIVE 自建落地表

    自建落地表为什么要自建落地表HIVE SQL创建内/外部表、分区表insert overwrite 向分区表插入数据 为什么要自建落地表 1、公司的大数据资源非常紧张, 2、导数逻辑很复杂; 3、日常导数要求时效性高; 4、部门数仓的...

    hive操作命令大全.txt

    # 内部表转外部表 alter table table_name set TBLPROPROTIES ('EXTERNAL'='FALSE');# 外部表转内部表 # 表结构修改 # 重命名表 use xxxdb; alter table table_name rename to new_table_name; # 增加字段 ...

    BigData-Interview:

    发一条内推消息,社招、实习生欢迎投递 字节跳动校招内推码: 3UWFMRS 投递链接: 社招: 大数据面试题汇总与答案...hive 内部表和外部表的区别 hive中 sort by / order by / cluster by / distribute by 的区别 hive的me

    大数据与人工智能-fy.docx

    Hive针对内部表和外部表的区别是 [单选题] A.创建内部表的同时,会将数据挪到数据仓库指定的位置(正确答案) B.删除内部表时只删除源数据 C.创建内部表时,只记录数据指定的路径 D.删除外部表时删除表中数据和源数据...

    云数据库方案设计(1).doc

    与大数据存储平台的数据集成 数据库提供外部表技术,可以将交易型和分析型数据库与其他存储平台对接,在数 据库内部,通过外部表访问大数据存储平台中的数据,包括: a)与HDFS对接:外部表访问引擎(读写模块),...

    云数据库方案设计.doc

    与大数据存储平台的数据集成 数据库提供外部表技术,可以将交易型和分析型数据库与其他存储平台对接,在数 据库内部,通过外部表访问大数据存储平台中的数据,包括: a)与HDFS对接:外部表访问引擎(读写模块),...

    大数据应用测试经验总结.pdf

    ⼤数据应⽤测试经验总结 ⼤数据应⽤测试经验总结 ⼤数据应⽤测试... show tables like 'h*' 创建表 内部表:CREATE TABLE page_view if not exists(viewTime INT, userid BIGINT, page_url STRING, referrer_url STRIN

    云数据库方案设计.docx

    云数据库方案设计 云数据库的云化改造 面向云化环境,数据库在多个方面需要进行改造,... 云数据集成 3.1 与RDS的数据集成 数据库使用外部表技术,可以访问RDS中的其他数据。 支持多种格式的数据; 支持访问和更新数据

    OozieWorkflow

    Oozie管道可自动将数据下载和提取到配置单元表 动作1-执行脚本bash,该脚本将下载和存储昨天的数据。 安排作业每天运行。 行动2-将数据存储在HDFS的... 动作4-将数据从covid_ext复制到先前创建的Hive分区内部表covid中

    2017最新大数据架构师精英课程

    106_hive beeline-外部表-内部标 107_hive 分区表-桶表 108_hive word count 109_hive连接查询-union查询-load数据 110_hbase概述 111_zk架构-集群搭建-容灾演练avi 112_zk API-观察者-临时节点-序列节点-leader选举...

Global site tag (gtag.js) - Google Analytics