上一篇说的是外部表,当把EXTERNAL关键字去掉的时候就是内部表了。为什么叫内部表,因为这种表,Hive会(或多或少地)控制着数据的生命周期。

如果你熟悉Hive那你一定知道,Hive默认情况下会将这些表的数据存储在由配置项 hive.metastore.warehouse.dir (例如,/user/hive/warehouse)所定义的目录的子目录下。

当我们删除一个内部表时,Hive也会删除这个表中数据。相应的,内部表不方便和其他工作共享数据。例如,有一份数据正在被其他程序使用,同时我们还想使用Hive在这份数据上执行一些查询,可是并没有给予Hive对数据的所有权,我们可以创建一个外部表指向这份数据,而并不需要对其具有所有权。那内部表如果想要这份数据怎么办呢,用LOAD。

LOAD DATA LOCAL INPATH /data/ OVERWRITE INTO TABLE ods_login PARTITION (dt='2020-03-01');
  • OVERWRITE:覆盖

如果用户指定了 OVERWRITE关键字,那么目标文件夹中之前存在的数据将会被先删 除掉。如果没有这个关键字,仅仅会把新增的文件增加到目标文件夹中而不会删除之 前的数据。如果目标文件夹中已经存在和装载的文件同名的文件,那么旧的同 名文件将会被覆盖重写。

  • PARTITION:导入分区

如果分区目录不存在的话,这个命令会先创建分区目录,然后再将数据拷贝到该目录下。如果目标表是非分区表,那么语句中应该省略PARTITION子句。

通常情况下指定的路径应该是一个目录,而不是单个独立的文件。Hive会将所有文件 都拷贝到这个目录中。这使得用户将更方便地组织数据到多文件中,同时,在不修改 Hive脚本的前提下修改文件命名规则。不管怎么样,文件都会被拷贝到目标表路径下 而且文件名会保持不变。

如果使用了 LOCAL这个关键字,那么这个路径应该为本地文件系统路径。数据将会被 拷贝到目标位置。如果省略掉LOCAL关键字,那么这个路径应该是HDFS的路径。这种情况下,数据是从这个路径转移到目标位置的。

上一篇提到过Hive的schema on read,这种模式的优势是load data 非常迅速,因为它不需要读取数据进行解析,仅仅进行文件的复制或者移动。Mysql的写时模式的优势是提升了查询性能,因为预先解析之后可以对列建立索引,并压缩,但这样也会花费要多的加载时间。

需要注意的是:

  • 如果加载的文件在HDFS上,此文件会被移动到表路径中;

  • 如果加载的文件在本地,此文件会被复制到HDFS的表路径中;

  • 会为每一个待导入的文件,启动一个MR任务进行导入。

如同内部表一样,外部表在创建表时也需要指定数据表所在的数据文件的路径——以下简称为表路径。如果没有指定,Hive会自动分配一个。自动分配的目录是hive主目录下的以表名命名目录;

如果创建外部表时,指定表的数据存储目录。Hive会将此目录下已有的所有文件作为表的数据文件,在查询时进行解析。此时,Hive仍会在hive的目录下创建以表名命名的目录,但目录内的内容为空。

参考资料:

1.《Hive编程指南》

2. Hive官方wiki:

https://cwiki.apache.org/confluence/display/HIVE


>>  想学大数据?点击找老蒙!<<智能人工推荐:

从面试官的角度谈谈大数据面试  

你是否能被轻易地取代?

>>  点击查看更多觉得有价值请关注▼

hive load data inpath 空目录_Hive内部表 | 每日五分钟学大数据相关推荐

  1. hive load data inpath 空目录_hive学习笔记之四:分区表

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类和汇总,及配套源码,涉及Java.Docker.Kubernetes.DevO ...

  2. hive load data inpath 空目录_走近大数据之Hive进阶(一、Hive数据的导入)

    一.使用Load语句进行数据的导入 -语法: LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE]INTO TABLE tablename [PARTITIO ...

  3. hive load data inpath ‘‘ overwrite into 坑

    load data inpath 'dataDir/dim_url.csv' overwrite into table dim_url partition(day='2021-03') 注意: 1,以 ...

  4. hive load data外部表报错_从0开始学大数据-Hive基础篇

    Hive起源于Facebook,是基于 Hadoop HDFS 分布式文件系统的分布式 数据仓库 架构.它为数据仓库的管理提供了许多功能:数据ETL(抽取.转换和加载)工具.数据存储管理和大型数据集的 ...

  5. hive load data出错

    今天往hive导数据时发生了个错误 hive> load data inpath '/user/tmp/uids.test_copy_3.txt' into table userfeature. ...

  6. load data inpath的实践

    有个需求,需要在hive表里面追加数据,数据是历史数据,是业务方给的一个csv文件, 思路,考虑使用load data inpath,把历史数据导入到hive表里面 步骤: 1.利用已经搭建好的大数据 ...

  7. Hive - Load Data 数据过长或过短

    一.引言 Hive 可以通过 load data inpath 加载本地或者 hdfs 的数据到 hive 表中,有时会出现生成数据长于 hive 表字段或者短于 hive 表字段的情况,经过测试,两 ...

  8. hive外部表改为内部表_hive内部表外部表介绍

    未被external修饰的是内部表(managed table),被external修饰的为外部表(external table): 区别: 内部表数据由Hive自身管理,外部表数据由HDFS管理: ...

  9. hive load data外部表报错_生产SparkSQL如何读写本地外部数据源及排错

    https://spark-packages.org/里有很多third-party数据源的package,spark把包加载进来就可以使用了 csv格式在spark2.0版本之后是内置的,2.0之前 ...

最新文章

  1. Android自定义View基本步骤
  2. windows 2008本地计算机策略,windows2008组策略操作出现了扩展错误 未能保存本地策略数据库#...
  3. H5拍照、预览、压缩、上传采坑记录
  4. 对抗粉尘攻击——CashShuffle正在保护BCHer隐私
  5. Ubuntu图形界面配置开机自启动
  6. 给你汇报Struts2 S2-016漏洞修复的总结
  7. Java 字符串 String 与整数型 int 之间的转换
  8. iis php 数据库乱码,如何解决php插入数据乱码问题
  9. html超链接打开共享文件夹,教你如何访问共享文件夹
  10. 猎头职位:存储翘首EMC高薪诚聘高级软件工程师SH
  11. jquery getjson php,jquery中调用php json函数的方法分享
  12. [导入]如何点击按钮弹出新窗口,输入数据后返回并刷新页面?(老孟)
  13. ideal pom文件安装到maven库中_不装 maven 直接使用 IntelliJ 的插件来把本地 jar 包加入到 maven 仓库...
  14. CSS居中对齐的各种方式
  15. WPF中的对话框 Dialog
  16. 【无人机航测实习简明教程】1 无人机航测常见名词术语解释
  17. iOS环境股票行情报价功能历程
  18. python语言玫瑰花_python 实现漂亮的烟花,樱花,玫瑰花
  19. powerquery分组_使用Excel Power Query进行文本分组合并
  20. 新零售mysql设计(采购表 入库信息表 入库商品表)

热门文章

  1. 用树状数组解决求区间最值的问题:hdu1754
  2. YARN的job提交过程
  3. R - history
  4. Linux下防火墙iptables用法规则详及其防火墙配置
  5. 14 图的基础知识-几种常用的存储结构
  6. 终止线程的2种方法。标记法和中断
  7. 傲游5里保存的网址,在傲游4不能同步?外加几句吐槽
  8. [Tomcat]Tomcat6和Tomcat7的区别
  9. Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它
  10. CF#190DIV.1