hive管理表和外部表及一些基础补充

本文介绍了Hive中的内部表和外部表的概念及其区别。内部表由Hive完全管理,而外部表仅管理表结构不控制数据。文章还讨论了如何创建这两种类型的表以及它们的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、管理表(内部表)

 我们目前所创建的表都是所谓的管理表也叫内部表,不过好像大部分人都叫内部表,因为这种表,hive会控制hive数据的周期,而且他会把内部表默认配置项hive.metastore.warehouse.dir(默认存储在hdfs的/user/hive/warehose/)目录下。但我们删除一个内部表时,hive也会删除这个表中的数据。但是管理表不方便和其他工作共享数据,同时我们还想使用hive这份数据上执行一些查询,可是并没有给予hive对数据的所有权,我们可以创建一个外部表指向这份数据,并不需要对其具有所有权,所以我们下面介绍hive的外部表,我们默认创建的就是内部表,我们上一个博客已经写得很清楚了

 二、外部表

如果我们正在分析来自股票市场的数据,我们会定期从某个的数据源接入数据,我们假设数据在分布式系统的/user/had/data/下数据已冒号分隔我们应该这要创建

create external table datas(               //关键字告诉我们自身应该外部表                   
exchange      string,
symbol        string, 
ymd           string, 
price_open    float, 
price_high    float,
price_low     float,
pirce_close    float, 
volume int, 
price_adj_close  float)
row  format  delimited

fields terminated by ","

location "/user/had/data";    //location代表表的数据存储位置           

我们一般判断一个表是不是外部表的方式: 
1,查看我们hive的元数据的tabs表的元数据可以看到
2,在hive命令行输入 show external  表名;                 

    

 三、管理表和外部表的区别

1,有些hiveQL语法结构并不适用于外部表

2,对于管理表别的用户也知道在哪个路径下,因此用户也可以使用其他工具(列如:hadoop的hdfs命令)等来修改管理表所在的路径目录下的数据的,而外部表则是可以指定存放的数据

3,hive的管理表实际上对于所存储的文件的完整性以及数据内容是否和表模式一样并没有支配能力,甚至管理表都没给用户提供这些管理能力,这样他共享数据的能力极差,所有这时候我们就可以使用外部表

4,还有一个最大的区别,内部表一旦删除数据也会跟着删除,而外部表则不同,用户不能改变数据,只能改变表结构

 四、基础补充

1,文本文件数据编码

  分隔符                     描述

 \n                             对于文本文件来说,每行都是记录,因此换行符可以分隔记录

^A                             用于分隔字段(列) create table 语句中可以使用八进制\001表示

^B                             用于分隔array或者struct中的元素 create table 语句可以使用八进制\002表示

^C                             用于分隔map中的键和值,在create table中可以使用八进制\003表示

2,导出数据

  1)如果数据文件恰好是用户需要的格式,那么只需要简单的拷贝文件夹或者文件就可以了

     hadoop fs -cp source_path   target_path

  2)否则用户可以使用insert ....  directory ...

   insert overwrite local directory   "/user/had/data"

   select name,age,sex from students where age not in(16);

  overwrite :覆盖当前路径下的全部数据

  local:   数据指定在本机上的某个路径

在hive的0.13版本以后有一个新的特性:
skip.header.line.count 和 skip.footer.line.count
这样就可以跳过页眉和页脚的指定行数
 
使用示例:
CREATE EXTERNAL TABLE table(columna string)
ROW FORMAT
DELIMITED FIELDS TERMINATED BY ‘\n’
LINES TERMINATED BY ‘\n’
location ‘/user/data/test/’
tblproperties (″skip.header.line.count″=″1″, ″skip.footer.line.count″=″1″);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值