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. 学习HTML 第五节.简单交互 加个按钮

    学习HTML 第五节.简单交互 也许你和我一样,对页面排版的兴趣小于网页交互,那么我们就先略过一些章节,直接先学一下简单交互. 前面点击图片打开链接的网址,已经是最简单的交互方式了,复杂的方式则需要用 ...

  2. Vue学习计划基础笔记(六) - 组件基础

    组件基础 目标: 掌握组件的构建方式 掌握如何复用组件.父子组件如何传值.如何向父组件发送消息 掌握如何通过插槽分发内容 了解解析dom模板时的注意事项 了解动态组件 组件 组件理解起来大概上就和ph ...

  3. python-创建进程的三种方式

    目录 1,os.fork() 方法 2,Process方法 3,Pool方法 1,os.fork() 方法 import os ret = os.fork() if ret == 0: #子进程 pr ...

  4. k8s zookeeper、kafka部署

    安装zookeeper apiVersion: v1 kind: ConfigMap metadata: name: zookeeper-config namespace: kube-system a ...

  5. JAVA学习笔记--正则表达式

    正则表达式是一种强大而灵活的文本处理工具.使用正则表达式,可以让我们以编程的方式构造复杂的文本,并对输入的字符串进行搜索. 一.基础正则表达式语法(表格来自J2SE6_API) 字符 x 字符 x \ ...

  6. git中的重要指令

    git命令 任何操作都需要以 git 命令为开头 本地操作: git init 初始化一个本地仓库 新建为 master主分支 git status 查看当前分支状态 git add <文件名& ...

  7. 基于spec评论作品 - 探路者 贪吃蛇

    基于spec评论作品,试用(并截图)所有其他小组的Alpha作品,与软件功能说明书对比,评论Alpha作品对软件功能说明书的实现. 首先通过命令行进入到游戏主页面中. 因为软件没有编译为exe程序,所 ...

  8. 敏捷开发 Scrum 综述

    敏捷开发 Scrum 综述 这一星期学习了敏捷开发,然后阅读了相关的书籍,从网上查找了很多相关的资料,对敏捷开发scrum有了更加深刻了理解,对敏捷开发做了如下总结: 一.什么是敏捷开发? 敏捷开发提 ...

  9. Java中switch可以接收的数据类型

    Java支持的数据类型有五种 他们分别是: byte.char.short.int.enum: 以上是JDK1.6以前的版本. JDK1.7时,又增加了String, public class Tes ...

  10. JQuery EasyUI 引用加载分析

    easyui是什么,就不介绍了,接触到前端的就算没用过,肯定也应该听说过.其次,本文不是介绍它提供如calendar.tree等这些功能如何使用的,这些官网上介绍都很详细,中文的网上也不少.本文是从e ...