Hive 学习笔记


持续更新…

托管表(Managed Tables) 与 外部表(External Tables)的区别

这里主要解释两种表中的区别

元数据与实际数据

据笔者的理解,Hive 的数据表应该是包含两种数据元数据实际数据
元数据指的是 Hive 储存的用于维护其数据表的数据,例如:

  • 数据表的物理地址
  • 数据表的额外属性(由DBPROPERTIES指定)
  • 数据表的备注
  • 数据表的其他非实际储存字段

实际数据指的是 Hive 的数据表中实际储存的数据,如字段 A 中的第一行到第一百行的数据

托管表

托管表指的是 Hive 会去管理(指增删改)该表的数据,包括实际数据属性与数据结构,也就是 Hive 会根据命令去修改这些数据,并且所有数据都会储存于在可见的文件系统中,你可以随意地改动这些数据,但是会导致对应的 Hive 数据表作出不可预料的行为,托管表多用于本地数据库

外部表

外部表托管表最大的不同是,外部表不会去管理与验证数据的来源,甚至不会去主动查验该数据表的数据完整性,当然你可以执行MSCK REPAIR TABLE table_name来刷新数据表,Hive 只会负责管理该表的元数据,所以该表被删除DROP的时候只会删除其元数据,其数据来源不会受到任何影响,这种表多用于引用外部数据或者导出数据

Hive 数据的导出导入

这里用于汇总解释 Hive 的数据导出导入的几种方法

导入到 Hive
  • 从文件中导入到 Hive
    这里指从文件系统中导入到 Hive 数据表中,一般有两种情形,本地文件系统HDFS,这种功能可以通过命令LOAD DATA [LOCAL] INPATH <path> [OVERWRITE] INTO TABLE <table_name>实现
    • 若要使用 HDFS 文件系统,请在<path>中使用 URI,例如hdfs://namenode:1234/hadoop/dataFileA
    • 当没有指定LOCAL关键字时,Hive 会使用 URI 或者 且没有指定 URI 并使用的是相对路径时,Hive 将会将该地址关联到/user/${username}
    • 当指定了OVERWRITE关键字时,Hive 会使用指定的数据来覆盖目标表中的数据
    • 当目标表是分区表时,请在命令最后添加[PARTITION (partcol1=val1, partcol2=val2 ...)]来指定分区
  • 从其他表导入到 Hive
    • CTAS(Create Table As Select),这个方法可以从其他表中的SELECT语句获得的结果来建立一个新的表,同时也会也只能复制目标表的数据结构与属性,
      • 用法CREATE TABLE <table_name> AS SELECT <select_clause>
    • 把其他表中的SELECT语句获得的结果来插入到现存的表中,但这个目标表与源数据表的表结构必须相同
      • 用法INSETR INTO TABLE <table_name> SELECT <select_clause>
导出到文件系统
  • 导出到本地文件系统或者到 HDFS,可以使用命令INSERT OVERWRITE [LOCAL] DIRECTORY <path> [ROW FORMAT row_format] [STORED AS file_format] SELECT <select_clause>
    • 若指定LOCAL关键字,可以直接使用本地相对路径或者绝对路径,但是若没有指定的话请明确指定 URI
    • row_format可以指定导出文件的分隔符,例如:ROW FORMAT DELIMITED FIELDS TERMINATED BY ','即可指定,为分隔符
  • 可以使用 DFS 命令来操作 HDFS 来直接导出数据表的数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值