当前位置:   article > 正文

【Hive】(二十二)往 Hive 表中插入与导出数据方式load 、insert_hive insert

hive insert

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

文章目录

一、前言

往hive数据仓库的表中导入数据,可以直接insert ,也可以选择load方式。当然也可以通过第三方工具如sqoop等将数据导入到hive当初。特别注意:hive虽然不会验证用户装载的数据和表的模式是否匹配,但是hive会验证文件的存储格式和hive定义的表结构的存储格式是否一致。比如将文本文件装载到sequencefile表中则报错。

二、往hive表中导入数据

load data 导入数据到hive中,这种情况适合提供了外部数据文件,然后将其导入hive仓库的表中。(这种方式其实使用的不是太多,大厂的数据源一般都是数据库中数据,直接定时任务抽取即可,除非外包数据以文件形式提供)

1.将本地数据文件导入到hive非分区表中,如下文件可以是个目录,会导入目录中所有的文件
load data local inpath '/home/robot/'
overwrite into table fdm_sor.personinfo
2.将本地数据文件导入到hive分区表中
load data local inpath '/home/robot/'
overwrite into table fdm_sor.personinfo
partition(country='china',city='nanjing')
注意:
   1.inpath里只要填目录即可,不用具体到文件,会加载目录下所有问题,但该目录下不能再有子目录,否则报错。
   2.overwrite 可以不加,加的话会将表中所有数据覆盖掉(分区表只覆盖当前分区数据),into talbe 将数据追加到表中。
   3.into talbe 如果表里数据已经存在了,会再次到导入,底层文件存储会给同文件名加序列号然后存储。
3.将分布式文件系统上的数据导入的hive中,比如讲hdfs上数据导入到hive中
load data inpath '/user/robot/'
overwrite into table fdm_sor.personinfo
注意:去掉local,则默认的路径是分布式文件系统上的路径,如hdfs上的路径。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

总结:overwrite覆盖的原理,是先删除数据,然后再写入数据。如果开了trash回收站功能,可以在回收站查看到回收的数据。

三、通过查询insert …select的形式往hive中导入数据

使用insert子句将查询结果插入表中,这是开发中往表里导入数据最常用的方式之一,主要用来项目开发中使用,多表关联计算等操作。

1.通过查询将数据覆盖导入的分区表中(或者用into追加结果,往动态分区表中插入数据,请参考本系列其他博客。)
insert overwrite table fdm_sor.personinfo
partition(statis_date='${staits\_date}'
select a.id,a.name,b.address
from  person a left join address b
on a.id = b.id
 
2.多次插入,从一张表中读数据,下面这种方式效率最高,只需要扫描一次表即可。注意中间没有分号;
from T_DEDUCT_SIGN_D_external t
insert into table t1 
select 123 ,sign_no string,null
insert into table t2
select 345 ,null ,bp_no string
insert into table t3
select 678 ,sign_no string,bp_no string
where t.statis_date = '20180101';

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

注意:使用,insert…select 往表中导入数据时,查询的字段个数必须和目标的字段个数相同,不能多,也不能少,否则会报错。但是如果字段的类型不一致的话,则会使用null值填充,不会报错。而使用load data形式往hive表中装载数据时,则不会检查。如果字段多了则会丢弃,少了则会null值填充。同样如果字段类型不一致,也是使用null值填充。

四、使用create…as 语句往hive表里装载数据

hive (fdm_sor)> create table mytest_createas  
              > as select id ,name
                 from  mytest_tmp2_p
                where country='china' and city='beijing';
注意:使用create... as 创建的表,表的存储属性是默认的textfile,serde也是默认的lazyserde.同时表没有分区.如果对表的结构有要求,
比如我们公司sor要求使用rcfile存储,则不能使用create ..as创建表,并且加载数据。
2.如果多次操作需要取同一个表中数据,可以优化如下,将from放到最前面,这样只扫描一次表即可完成。
  from  tu_trade t


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
![img](https://img-blog.csdnimg.cn/img_convert/d93c532eb7289c09de1ed03f09736c25.png)

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

3342562862)]

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/942409
推荐阅读
相关标签
  

闽ICP备14008679号