EXTERNAL关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据
1. LIKE 允许用户复制现有的表结构,但是不复制数据
2. hive中RegexSerDe的使用
RegexSerDe是hive自带的一种序列化/反序列化的方式,主要用来处理正则表达式。
CREATETABLE test_serde(
c0string,
c1string,
c2string)
ROWFORMAT
SERDE‘org.apache.hadoop.hive.contrib.serde2.RegexSerDe‘
WITHSERDEPROPERTIES
(‘input.regex‘ = ‘([^ ]*) ([^ ]*) ([^ ]*)‘,
‘output.format.string‘= ‘%1$s %2$s %3$s‘)
STOREDAS TEXTFILE;
3. 表名和列名不区分大小写
4. 建立外部表指定数据存储路径
Create externaltable exter_trl(
Id int,
Name string,
Age int,
Tel string
Location ‘/user/data/trl/external’;
)
1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!而表则不一样;
2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
那么,应该如何选择使用哪种表呢?在大多数情况没有太多的区别,因此选择只是个人喜好的问题。但是作为一个经验,如果所有处理都需要由Hive完成,那么你应该创建表,否则使用外部表.。
5.按指定的分区加载数据
Loaddata inpath
‘/user/data/clickstat_gp_fatdt0/0‘ OVERWRITEINTO TABLE c02_clickstat_fatdt1
PARTITION(dt=‘20140820‘);
5. 建表的同步指定hdfs的路劲
CREATE EXTERNALTABLE page_view(viewTime INT, userid BIGINT,
page_url STRING,referrer_url STRING,
ip STRINGCOMMENT ‘IP Address of the User‘,
country STRINGCOMMENT ‘country of origination‘)
COMMENT ‘This isthe staging page view table‘
ROW FORMATDELIMITED FIELDS TERMINATED BY ‘\054‘
STORED ASTEXTFILE
LOCATION‘<hdfs_location>‘;
6. HIVE VIEW(视图减少复杂查询 )
CREATE VIEW test_trlAS
SELECT * FROM t1JOIN t2
ON (t1.id=t2.id)WHERE t1.name=‘trl‘;
原文:http://blog.csdn.net/manburen01/article/details/38710241