- 浏览: 108164 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
土豆蛋儿:
我想读取一个外部文件,以什么方式好了? 文件内容经常编辑
flume 自定义source -
土豆蛋儿:
大神,您好。
flume 自定义source
分类: 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 + hbase
2015-01-04 10:42 726环境配置: hadoop-2.0.0-cdh4.3.0 (4 ... -
hive 数据倾斜
2014-08-27 09:03 639链接:http://www.alidata.org/archi ... -
hive 分通总结
2014-08-27 08:42 534总结分析: 1. 定义了桶,但要生成桶的数据,只能是由其他表 ... -
深入了解Hive Index具体实现
2014-08-25 08:51 694索引是标准的数据库技术,hive 0.7版本之后支持索引。hi ... -
explain hive index
2014-08-24 16:44 1112设置索引: 使用聚合索引优化groupby操作 hive> ... -
hive map和reduce的控制
2014-08-15 16:14 589一、 控制hive任务中的map数: 1. 通 ... -
hive 压缩策略
2014-08-15 15:16 1721Hive使用的是Hadoop的文件 ... -
hive 在mysql中创建备用数据库
2014-08-15 09:21 833修改hive-site.xml <property> ... -
HIVE 窗口及分析函数
2014-08-11 16:21 1145HIVE 窗口及分析函数 使 ... -
hive 内置函数
2014-08-11 09:06 30191.sort_array(): sort_array(arra ... -
hive lateral view
2014-08-09 14:59 1982通过Lateral view可以方便的将UDTF得到的行转列的 ... -
hive数据的导出
2014-07-28 21:53 412在本博客的《Hive几种数据导入方式》文章中,谈到了Hive中 ... -
hive udaf
2014-07-25 16:11 709package com.lwz.udaf; import o ... -
hive自定义InputFormat
2014-07-25 09:13 812自定义分隔符 package com.lwz.inputf; ... -
HiveServer2连接ZooKeeper出现Too many connections问题的解决
2014-07-24 08:49 1679HiveServer2连接ZooKeeper出现Too man ... -
hive 常用命令
2014-07-17 22:22 6321.hive通过外部设置参数传入脚本中: hiv ... -
CouderaHadoop中hive的Hook扩展
2014-07-16 21:18 3247最近在做关于CDH4.3.0的hive封装,其中遇到了很多问题 ... -
利用SemanticAnalyzerHook回过滤不加分区条件的Hive查询
2014-07-16 16:43 1413我们Hadoop集群中将近百分之80的作业是通过Hive来提交 ... -
hive 的常用命令
2014-07-16 10:07 0设置、查看hive当前的角色: set sys ... -
hive 授权
2014-07-15 10:51 891Hive授权(Security配置) 博客分类: Hive分 ...
相关推荐
一:内部表和外部表的区别 创建表时使用关键字external创建的表就是外部表,没有使用该关键字创建的表就是内部表。 删除表时(drop table)内部表会删除hdfs对应路径,而外部表不会删除hdfs对应的路径, 删除表无论是...
在数据集目录中选取2个数据文件内部表创建表,选取2个数据文件创建外部表。 使用美国疫情数据创建分区表 疫情数据实现静态和动态加载数据到分区表 自己构建疫情数据实现多重分区表 使用美国疫情数据实现桶表 修改...
适用人群:hive学习童鞋,hive方面从业人员 从hive的搭建 到 hive的分区表/内部表/外部表/分桶等sql讲解
创建内部表CREATE TABLE ods.u_data (FIELDS TERMINATED BY '\t'当你建表成功并且把数据load 进去之后,你发现数
1:创建内部表 (1):start-all.sh,启动Hadoop所有进程 (2):初始化元数据库生成metastore (3):启动hive (4):把linus上面的rg.txt放到hdfs下 (5):show databases;显示所有数据库 (6):新建数据库...
自建落地表为什么要自建落地表HIVE SQL创建内/外部表、分区表insert overwrite 向分区表插入数据 为什么要自建落地表 1、公司的大数据资源非常紧张, 2、导数逻辑很复杂; 3、日常导数要求时效性高; 4、部门数仓的...
# 内部表转外部表 alter table table_name set TBLPROPROTIES ('EXTERNAL'='FALSE');# 外部表转内部表 # 表结构修改 # 重命名表 use xxxdb; alter table table_name rename to new_table_name; # 增加字段 ...
发一条内推消息,社招、实习生欢迎投递 字节跳动校招内推码: 3UWFMRS 投递链接: 社招: 大数据面试题汇总与答案...hive 内部表和外部表的区别 hive中 sort by / order by / cluster by / distribute by 的区别 hive的me
Hive针对内部表和外部表的区别是 [单选题] A.创建内部表的同时,会将数据挪到数据仓库指定的位置(正确答案) B.删除内部表时只删除源数据 C.创建内部表时,只记录数据指定的路径 D.删除外部表时删除表中数据和源数据...
与大数据存储平台的数据集成 数据库提供外部表技术,可以将交易型和分析型数据库与其他存储平台对接,在数 据库内部,通过外部表访问大数据存储平台中的数据,包括: a)与HDFS对接:外部表访问引擎(读写模块),...
与大数据存储平台的数据集成 数据库提供外部表技术,可以将交易型和分析型数据库与其他存储平台对接,在数 据库内部,通过外部表访问大数据存储平台中的数据,包括: a)与HDFS对接:外部表访问引擎(读写模块),...
⼤数据应⽤测试经验总结 ⼤数据应⽤测试经验总结 ⼤数据应⽤测试... show tables like 'h*' 创建表 内部表:CREATE TABLE page_view if not exists(viewTime INT, userid BIGINT, page_url STRING, referrer_url STRIN
云数据库方案设计 云数据库的云化改造 面向云化环境,数据库在多个方面需要进行改造,... 云数据集成 3.1 与RDS的数据集成 数据库使用外部表技术,可以访问RDS中的其他数据。 支持多种格式的数据; 支持访问和更新数据
Oozie管道可自动将数据下载和提取到配置单元表 动作1-执行脚本bash,该脚本将下载和存储昨天的数据。 安排作业每天运行。 行动2-将数据存储在HDFS的... 动作4-将数据从covid_ext复制到先前创建的Hive分区内部表covid中
106_hive beeline-外部表-内部标 107_hive 分区表-桶表 108_hive word count 109_hive连接查询-union查询-load数据 110_hbase概述 111_zk架构-集群搭建-容灾演练avi 112_zk API-观察者-临时节点-序列节点-leader选举...