0. 说明

已经安装好Hadoop和hive环境,hive把元数据存储在mysql数据库。这里仅讨论外部表和HDFS的关联,并且删掉外部表之后,对HDFS上的文件没有影响。


1. 在HDFS创建分区,并存有文件

手工创建或者由程序在HDFS上生成了分区目录,每个分区目录下有相应的文件。本例中根据day分了两个分区,如下所示:

/test/in/day=20/20.txt
/test/in/day=21/21.txt

文件里面的内容格式如下:

2;Lily;1991;Shanghai
3;Jack;1992;Guangxi
4;Jenny;1999;Xinjiang
5;Jay;1995;Xizang
6;Tom;1990;Beijing
7;Lily;1991;Shanghai
8;Jack;1992;Guangxi
9;Jenny;1999;Xinjiang
10;Jay;1995;Xizang

2. 创建hive外部表(建表语句没有用location直接关联HDFS文件)

根据HDFS上的源文件里面的数据格式,创建hive外部表。

hive> create external table t3 (seq int,name string,year int, city string)
> partitioned by (day int)
> row format delimited
> fields terminated by '\073'
> stored as textfile;
OK
Time taken: 0.207 seconds

源文件里面列之间的分隔符是分号,hive里面分号是特殊符号(命令执行结束符),如果建表语句里面用分号则会出错,使用分号的ascii码'\073'(这里用了八进制码)则正常。

查看t3的表结构:

hive> desc t3;
OK
seq int
name string
year int
city string
day int # Partition Information
# col_name data_type comment
day int
Time taken: 0.079 seconds, Fetched: 10 row(s)

表格已经成功创建。


3.关联HDFS文件

hive并不会自动关联hdfs中指定目录的partitions目录,需要手工操作。

通过给已经创建的表增加分区数据的方式,与HDFS上的文件相互关联起来。

语法格式:

alter table 表名称 add partition (分区名1=分区值1,...) location 'HDFS上的文件的路径';

关联day=20的分区:

hive> alter table t3 add partition (day=20) location '/test/in/day=20/20.txt';
OK

关联day=21的分区:

hive> alter table t3 add partition (day=21) location '/test/in/day=21/21.txt';
OK

执行下面命令,查看表格可以发现数据已经导入。

hive> select * from t3;

4.之后HDFS分区添加新文件,hive会自动关联

如果这个时候往HDFS上面的分区增加一个文件(符合t3表格式),hive表也可以自动读取到并添加数据。

如新建一个文件b.txt,内容是:1101;JayFEF;2095;BBBB

上传到HDFS的day=21分区:

hadoop fs -put /jaydisk/b.txt /test/in/day=21

直接查看表格,可以看到新的数据也已经添加进去。

hive> select * from t3;
OK
2 Lily 1991 Shanghai 20
3 Jack 1992 Guangxi 20
4 Jenny 1999 Xinjiang 20
5 Jay 1995 Xizang 20
6 Tom 1990 Beijing 20
7 Lily 1991 Shanghai 20
8 Jack 1992 Guangxi 20
9 Jenny 1999 Xinjiang 20
10 Jay 1995 Xizang 20
1101 JayFEF 2095 BBBB 21
Time taken: 1.549 seconds, Fetched: 19 row(s)

5. 内部表和外部表相互转化

可以通过如下语句转换外部表和内部表

alter table tablePartition set TBLPROPERTIES ('EXTERNAL'='TRUE');  //内部表转外部表

alter table tablePartition set TBLPROPERTIES ('EXTERNAL'='FALSE');  //外部表转内部表

6. 建外部表时指定HDFS路径(建表语句没有用location直接关联HDFS文件)

6.1 建表

create external table t1 (seq int,name string,year int, city string)
partitioned by (day int)
row format delimited
fields terminated by '\073'
stored as textfile
location '/test/in';

6.2 添加分区day=20

alter table t1 add partition (day=20);

6.3 查看成功

hive> select * from t1;
OK
2 Lily 1991 Shanghai 20
3 Jack 1992 Guangxi 20
4 Jenny 1999 Xinjiang 20
5 Jay 1995 Xizang 20
6 Tom 1990 Beijing 20
7 Lily 1991 Shanghai 20
8 Jack 1992 Guangxi 20
9 Jenny 1999 Xinjiang 20
10 Jay 1995 Xizang 20
Time taken: 0.108 seconds, Fetched: 9 row(s)

hive1.1.0建立外部表关联HDFS文件的更多相关文章

  1. ORM对象关系映射之GreenDAO建立多表关联

    利用GreenDAO可以非常方便的建立多张表之间的关联 一对一关联 通常我们在操作数据库的时候,我们往往不是单独的对一张表进行操作,而是对这张表的操作会联动的影响另外一张表或者多张表,比如:现在有两张 ...

  2. Android ORM对象关系映射之GreenDAO建立多表关联

    https://blog.csdn.net/u010687392/article/details/48496299 利用GreenDAO可以非常方便的建立多张表之间的关联 一对一关联 通常我们在操作数 ...

  3. 20.Yii2.0框架多表关联一对多查询之hasMany

    目录 新手模式 hasMany关联模式查询 新建mode层Article.php 新建mode层Category.php 新建控制器HomeController.php 新手模式 用上次的查询结果,作 ...

  4. 22.Yii2.0框架多表关联一对一查询之hasOne

    思路: 通过文章查它对应的分类信息 一对一的关系 控制器里 //一对一关联查询 public function actionRelatesone() { //方法一,hasOne() 用查一条文章的结 ...

  5. 21.Yii2.0框架多表关联一对多查询之性能优化--模型的使用

    控制器里 功能: 通过分类,查分类下的所有文章 //关联查询 public function actionRelatesearch(){ //关联查询 //查询方法一(查一行) 一维数组下的值是obj ...

  6. hive外部表的建立与数据匹配

    1.建立hive的外部表匹配hdfs上的数据 出现如下报错: hive (solar)> ; OK Failed with exception java.io.IOException:java. ...

  7. PLSQL_Oracle外部表的概念和使用(案例)

    2014-08-25 Created By BaoXinjian

  8. ORACLE外部表总结

    外部表介绍 ORACLE外部表用来存取数据库以外的文本文件(Text File)或ORACLE专属格式文件.因此,建立外部表时不会产生段.区.数据块等存储结构,只有与表相关的定义放在数据字典中.外部表 ...

  9. PostgreSQL中使用外部表

    1. 安装file_fdw 需要先安装file_fdw,一般是进到PostgreSQL的源码包中的contrib/file_fdw目录下,执行: make make install 然后进入数据库中, ...

随机推荐

  1. linux ——使用find如何快速替换所有相同参数

    在生成环境上有时候需要大规模修改某一配置里的参数,但是该参数存在多个地方,比如IP地址 端口 项目名等,特别是项目名称混乱想统一 find  /项目地址 -type f |xargs grep &qu ...

  2. 如何通俗理解贝叶斯推断与beta分布?

    有一枚硬币(不知道它是否公平),假如抛了三次,三次都是“花”: 能够说明它两面都是“花”吗? 1 贝叶斯推断 按照传统的算法,抛了三次得到三次“花”,那么“花”的概率应该是: 但是抛三次实在太少了,完 ...

  3. JavaScript 之 ajax

    1. AJAX 的概念 AJAX,即 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML) 同步:前面的代码不执行完毕,后面的代码无法执行 异步: ...

  4. wepy中如何使用stylus等样式预处理器

    wepy中如何使用stylus等样式预处理器 一.如何在wepy中使用stylus 1.安装wepy-compiler-stylus(以及stylus, stylus-loader) npm inst ...

  5. LeetCode 289. Game of Life (C++)

    题目: According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a ce ...

  6. hdu1010--Tempter of the Bone(迷宫)

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1010 Tempter of the Bone Time Limit: 2000/1000 MS (Jav ...

  7. HDU 2012 FZU 1756关于素数的一些水题

    HDU 2012 素数判定 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  8. lintcode-427-生成括号

    427-生成括号 给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果. 样例 给定 n = 3, 可生成的组合如下: "((()))", "(()( ...

  9. MySQL 基于lvm2的备份实战演练 (快照备份)

    前言: lvm2实现热备的原理是基于lvm2的快照功能,lvm2可以实现数据集不大的情况下的热备. 实战过程如下:这里的演示是在一台Mariadb服务器上进行创建快照,将快照中的文件scp到备份服务器 ...

  10. spring重定向与转发

    1.重定向 A,通过ModelAndView以及RedirectView @RequestMapping("/login1.do") public ModelAndView log ...