外部表与partition
在建立普通表的时候,如果数据是有分区的,在ADD DATA的时候需要指明分区,比方下面的例子;
user表,包含 id bigint,name string,然后按照时间(date)来进行分区,路径存储在/user/*/test/下面,partition文件分别在
/user/*/test/dt=20140513
1^Amicheal
2^Abeckham
3^Adavid
和/user/*/test/dt=20130514
4^Ahello
5^Aworld
这个时候建表语句是这样:
DROP TABLE user_test;
CREATE TABLE user_test(
id bigint,
name string
)
PARTITIONED BY (dt string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
加入数据的时候写法如下:
LOAD DATA INPATH '/group/tbsc-dev/yuhan.zt/user/dt=20140514' INTO TABLE user_test partition (dt='20140514');
注意load data 操作dfs的数据时是mv操作,所以/group/tbsc-dev/yuhan.zt/user/dt=20140514目录下的数据就没有了。
查询一下select id,name from user_test
4 hello
5 world
--------------------------------------------------------------------------------------------------------
如果建立的是外部表
DROP TABLE user_test_external;
CREATE EXTERNAL TABLE user_test_external(
id bigint,
name string
)
PARTITIONED BY (dt string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/group/tbsc-dev/yuhan.zt/user';
这个时候如果你select * from user_test_external, 结果是空的。
原因是,你建立外部表的时候,外部表的相关信息与数据是存放在你的metastore里面的,虽然实际的数据地址 /group/tbsc-dev/yuhan.zt/user/ 是有分区的,
但是在metastore中外部表并不知道这一点,必须你要显示的说明一下,或者说告诉外部表一下;
ALTER TABLE user_test_external ADD PARTITION (dt=20140513)
然后在select id,name from user_test_external 就有值了
1 micheal
2 beckham
3 david
其实外部表的写法也可以在建表的时候不写明LOCATION,而在指明PARTITION的时候指明LOCATION
DROP TABLE user_test_external;
CREATE EXTERNAL TABLE user_test_external(
id bigint,
name string
)
PARTITIONED BY (dt string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
ALTER TABLE user_test_external ADD PARTITION (dt=20140513) LOCATION '/group/tbsc-dev/yuhan.zt/user/dt=20140513';
外部表与partition的更多相关文章
- hive 内部表和外部表的区别和理解
1. 内部表 create table test (name string , age string) location '/input/table_data'; 注:hive默认创建的是内部表 此时 ...
- 【转】Hive内部表、外部表
hive内部表.外部表区别自不用说,可实际用的时候还是要小心. 1. 内部表: create table tt (name string , age string) location '/input/ ...
- hive外部表的建立与数据匹配
1.建立hive的外部表匹配hdfs上的数据 出现如下报错: hive (solar)> ; OK Failed with exception java.io.IOException:java. ...
- hive内部表、外部表、分区表、视图
1.Table 内部表 1).与数据库中的Table在概念上是类似的 2).每一个Table在Hive中都有一个相应的目录存储数据 3).所有的Table数据(不包括 External Table) ...
- hive内部表、外部表
hive内部表.外部表区别自不用说,可实际用的时候还是要小心. Hive的数据分为表数据和元数据,表数据是Hive中表格(table)具有的数据:而元数据是用来存储表的名字,表的列和分区及其属性,表的 ...
- 分区表,桶表,外部表,以及hive一些命令行小工具
hive中的表与hdfs中的文件通过metastore关联起来的.Hive的数据模型:内部表,分区表,外部表,桶表受控表(managed table):包括内部表,分区表,桶表 内部表: 我们删除表的 ...
- hadoop笔记之Hive的数据存储(外部表)
Hive的数据存储(外部表) Hive的数据存储(外部表) 外部表 指向已经在HDFS中存在的数据,可以创建Partition 它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异 外部 ...
- Hive管理表,外部表及外部分区表的深入探讨
Hive管理表,也叫内部表.Hive控制着管理表的整个生命周期,默认情况下Hive管理表的数据存放在hive的主目录:/user/hive/warehouse/下,并且当我们删除一张表时,这张表的数据 ...
- 【原创】大叔经验分享(8)创建hive表时用内部表还是外部表
内部表和外部表最主要的一个差别就是删除表或者删除分区时,底层的文件是否自动删除,内部表会自动删除,外部表不会自动删除,所以基础数据表一定要用外部表,即使误删表或分区之后,还可以很容易的恢复回来. 虽然 ...
随机推荐
- MySQL中基本的多表连接查询教程
一.多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT * FROM table1 CROSS JOIN ...
- CMD和AMD探秘
踏上前端这条道路以来,我一直以为自己就是个娴熟的切图工,每天只需要做着重复的劳动,切图,做网站.然而,技术的发展是日新月异的,切图工早就面临淘汰.随着浏览器功能越来越完善,前端项目越来越大,代码越来越 ...
- (15)odoo配置文件详解
openerp-server.conf ---------------- [options]; addons模块的查找路径addons_path = E:\GreenOdoo8.0\source\op ...
- JAVA类与对象作业——动手动脑以及课后实验性问题
一: 1.源代码 //MAO2015.10.6 //foo class Foo { int value; public Foo(int initValue) { value = initValue; ...
- Login 页面
1.jsp <script type="text/javascript"> function doLogin() { if (trim($('#username').v ...
- oracle查锁表SQL
SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#, l.os_user_name,s.mach ...
- 使用SoundPool播放音效
针对应用程序经常需要播放密集.短促的音效,因为MediaPlayer存在如下缺点: 1.资源占用量较高.延迟时间较长. 2.不支持多个音效同时播放. SoundPool使用音效池的概念来管理多个短促的 ...
- Linearizability and Sequential Consistency
Linearizability and Sequential Consistency a) A sequentially consistent data store. b) A data store ...
- linux 执行php文件
/opt/php5/bin/php /home/Xcar/tag/interface/tag_api4hbase.php tag_export2file "/tmp/guo.php" ...
- TCP/IP 某些最常见的错误原因码 (errno)列表
对于在基于 UNIX 的环境中的 TCP/IP 用户,下表列出了某些最常见的错误原因码 (errno).它不是完整的错误列表.可以在文件 /usr/include/sys/errno.h 中找到 Er ...