1. hive创建内部表

hive> CREATE TABLE hT1(id INT,name STRING,hobby ARRAY<STRING>,address MAP<STRING,STRING>)

> ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

> COLLECTION ITEMS TERMINATED BY '-'

> MAP KEYS TERMINATED BY ':';

OK

Time taken: 0.22 seconds

hive> show tables;

OK

ht1

Time taken: 0.066 seconds, Fetched: 1 row(s)

说明:每一行的数据定义为’,’来分割,Collection的条目以’-’来分割,Map的条目以’:’来分割。

可以看到表已经创建成功了。

去WEB UI中查看

加载数据:

  1. 准备数据

id,name,hobby,address

1,张三,篮球-足球-音乐,北京:上海

2,李四,看书-旅游-爬山,西安:成都

3,王五,钢琴-小提琴-古筝,重庆:杭州

4,赵六,抽烟-喝酒-烫头发,哈尔滨:沈阳

  1. 加载数据

hive> LOAD DATA LOCAL INPATH '/root/data/hdata1' INTO TABLE ht1;

Loading data to table default.ht1

Table default.ht1 stats: [numFiles=1, totalSize=207]

OK

Time taken: 2.362 seconds

说明: local代表数据来自与本地磁盘,如果是来自hdfs的话,则去掉local。

查看ht1表中的数据:

hive> select * from ht1;

OK

NULL name ["hobby"] {"address":null}

1 张三 ["篮球","足球","音乐"] {"北京":"上海"}

2 李四 ["看书","旅游","爬山"] {"西安":"成都"}

3 王五 ["钢琴","小提琴","古筝"] {"重庆":"杭州"}

4 赵六 ["抽烟","喝酒","烫头发"] {"哈尔滨":"沈阳"}

Time taken: 0.752 seconds, Fetched: 5 row(s)

同样可以用hadoop命令查看hdfs上的这些数据:

[root@unisk01 ~]# hadoop fs -cat /user/hive/warehouse/htest.db/ht1/*

id,name,hobby,address

1,张三,篮球-足球-音乐,北京:上海

2,李四,看书-旅游-爬山,西安:成都

3,王五,钢琴-小提琴-古筝,重庆:杭州

4,赵六,抽烟-喝酒-烫头发,哈尔滨:沈阳

  1. 创建外部表

hive> CREATE EXTERNAL TABLE hET1(id INT,name STRING,hobby ARRAY<STRING>,address MAP<STRING,STRING>)

> ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

> COLLECTION ITEMS TERMINATED BY '-'

> MAP KEYS TERMINATED BY ':'

> LOCATION '/hive/external/hET1';

OK

Time taken: 0.299 seconds

hive> desc formatted hET1;

OK

# col_name             data_type            comment

id                   int

name                 string

hobby                array<string>

address              map<string,string>

# Detailed Table Information

Database:            default

Owner:               root

CreateTime:          Sat Aug 04 09:56:19 CST 2018

LastAccessTime:      UNKNOWN

Protect Mode:        None

Retention:           0

Location:            hdfs://mycluster/hive/external/hET1

Table Type:          EXTERNAL_TABLE

Table Parameters:

EXTERNAL             TRUE

transient_lastDdlTime 1533347779

# Storage Information

SerDe Library:       org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

InputFormat:         org.apache.hadoop.mapred.TextInputFormat

OutputFormat:        org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

Compressed:          No

Num Buckets:         -1

Bucket Columns:      []

Sort Columns:        []

Storage Desc Params:

colelction.delim     -

field.delim          ,

mapkey.delim         :

serialization.format ,

Time taken: 0.156 seconds, Fetched: 33 row(s)

说明:创建表时加上一个External字段,意思是外部表,并且最后加上Location用来指定外部表存放目录。通过查看表格式的命令,可以查看详细的内容。

查看WEB UI发现外部表的数据并没有在hive自己仓库的目录下

外部表和内部表的区别:

它两主要区别在于LOAD和DROP这两个命令语义上:

内表使用load命令会把数据移到自己仓库目录下

外表使用load命令会把数据移到自己仓库以外的位置

内表使用drop命令会把元数据和数据一起删除(这也就是为什么内表也叫托管表)

外表使用load命令只会删除元数据

到底该选择哪一种方式呢?

有一个经验法则:

如果所有处理都由hive完成,应使用内表

如果要用hive和其他工具来处理同一个数据集应该使用外表

经常的使用场景:

把存在HDFS上的初始数据集用作外部表进行使用,然后用hive的变换功能把数据迁移到托管hive的表。

所以我们试着删除外部表:

hive> drop table hET1;

OK

Time taken: 0.206 seconds

hive> show tables;

OK

ht1

Time taken: 0.063 seconds, Fetched: 1 row(s)

hive>

然后去HDFS目录中查看

[root@unisk01 ~]# hadoop fs -cat /hive/external/tET1/*

id,name,hobby,address

1,张三,篮球-足球-音乐,北京:上海

2,李四,看书-旅游-爬山,西安:成都

3,王五,钢琴-小提琴-古筝,重庆:杭州

4,赵六,抽烟-喝酒-烫头发,哈尔滨:沈阳

[root@unisk01 ~]#

的确数据依然存在,那么再看一下删除内部表:

去WEB UI查看,也的确看到这个数据文件依然存在

hive> drop table ht1;

OK

Time taken: 2.05 seconds

hive> show tables;

OK

Time taken: 0.05 seconds

hive>

然后去HDFS目录中查看:

发现htest.db库下已经没有ht1表了。

Hive内部表和外部表相关推荐

  1. hive内部表与外部表区别

    1.创建内部表与外部表的区别是什么? 2.external关键字的作用是什么? 3.外部表与内部表的区别是什么? 4.删除表的时候,内部表与外部表有什么区别? 5.load data local in ...

  2. 六、Hive中的内部表、外部表、分区表和分桶表

    文章目录 内部表 外部表 分区表 分桶表 在Hive数据仓库中,重要点就是Hive中的四个表.Hive 中的表分为内部表.外部表.分区表和分桶表. 内部表 默认创建的表都是所谓的内部表,有时也被称为管 ...

  3. Hive 内部表与外部表

    首先查看当前的表: 内部表 查看emp表: 查看这个emp表的详细信息: 可以看到Table Type是一个MANAGED_TABLE,就是所谓的内部表 内部表跟外部表有什么区别 首先看一下mysql ...

  4. hive 创建表_2min快速了解,Hive内部表和外部表

    在了解内部表和外部表区别前, 我们需要先了解一下Hive架构 : 大家可以简单看一下这个架构图,我介绍其中要点: Hive的数据分为两种,一种为普通数据,一种为元数据. 元数据存储着表的基本信息,增删 ...

  5. Hive关于数据表的增删改(内部表、外部表、分区表、分桶表 数据类型、分隔符类型)

    建表 基本语句格式 CREATE [external] TABLE if not exists student #默认建立内部表,加上external则是建立外部表(id int COMMENT'学号 ...

  6. Hive内部表与外部表区别详细介绍

    文章转载自:http://www.aboutyun.com/thread-7458-1-1.html 1.创建内部表与外部表的区别是什么? 2.external关键字的作用是什么? 3.外部表与内部表 ...

  7. hive内部表与外部表入门

    表分类 在Hive中,表类型主要分为两种, 第一种:内部表 也叫管理表 表目录会创建在集群上的{hive.metastore.warehouse.dir}下的相应的库对应的目录中. 默认创建的表就是内 ...

  8. Hive 与 Hbase表映射(内部表与外部表),Hbase常用命令

    应用场景 1.将ETL操作的数据存入HBase 2.Hbase作为Hive的数据源 构建低延迟的数据仓库 Hive表映射至Hbase Hbase上有表 -> 外部表 创建Hive表映射HBase ...

  9. Hive内部表与外部表

    文章目录 0. 查看表元数据信息 1. 内部表 2. 外部表 3. 内外部表差异 0. 查看表元数据信息 使用DESCRIBE FORMATTED tablename,来获取表的元数据描述信息,可以从 ...

  10. hive中内部表和外部表有什么区别?一般什么时候使用内部表什么时候使用外部表?

    hive中内部表和外部表有什么区别? 在使用hive搭建数据仓库的时候,可以建立两种表格.一种是内部表(managed table),一种是外部表(external table). 内部表建表是不加修 ...

最新文章

  1. TensorRT PoolingLayer
  2. 二叉树的高度-递归-JS实现
  3. STM32 IO口输入输出模式的简洁见解
  4. 大数据WEB阶段(六)MySql详解(二)
  5. jQuery 五角星评分
  6. Dora.Interception,为.NET Core度身打造的AOP框架:全新的版本
  7. python读取dicom文件的包_python 读取DICOM头文件的实例
  8. 光纤终端服务器,[原创]简单介绍光缆终端盒知识
  9. ImportError: cannot import name *
  10. 喜欢网络文学的人有多少?当代年轻人是这样阅读的
  11. C++ vector 容器的使用
  12. vmware下linux的vmware tools安装
  13. 一分钟教你学会配置eslint,还在为风格单双引号,对象末位逗号要不要,引用各种报错而烦恼?(建议收藏!详细中文注释)...
  14. lisp 吴永进_AutoCAD 完全应用指南
  15. 计算机二级考试c语言 上机,计算机等级考试二级C语言上机题[2]
  16. Spring 菜鸟教程 异常 集锦
  17. Vue动态渲染本地图片
  18. 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false
  19. 真无线蓝牙耳机哪个牌子好?最适合打游戏的无线耳机
  20. RPA拾取界面元素方式

热门文章

  1. 基于MODBUS-RTU协议的串口编程
  2. ORA-02049: 超时: 分布式事务处理等待锁
  3. cocos+kbe问题记录
  4. BZOJ1027 [JSOI2007]合金 【计算几何 + floyd】
  5. scrollIntoView()窗口滚动
  6. django基础知识之验证码:
  7. linux下mysql 启动命令
  8. 【转载】C++ function、bind和lambda表达式
  9. zoj 1450 Minimal Circle 最小覆盖圆
  10. Page_Load基类,重写OnLoad