Hive之加载csv格式数据到hive

场景:

今天接了一个需求,将测试环境的hive数据导入到正式环境中。但是不需要整个流程的迁移,只需要迁移ads表


解决方案:

拿到这个需求首先想到两个方案:

1、将数据通过insert into语句导出,然后运行脚本

2、数据导出成csv格式的数据,然后Load进hive

方案一的实践过程中,发现几个问题,然后果断进行了方案二。就讲讲方案一存在的问题

  1. ads数据量较大。存在18W的数据量,对于大集群而言不值一提,但是公司的堡垒机资源较小,且用DBServer不支持18WSQL执行
  2. DBServer hive不支持SQL脚本运行,只能粘贴复制,还是问题一一样资源太小
    最终采用方案二

实践过程:

这里就说说方案二遇到的问题以及解决方案

  1. hive查询结果导出CSV时间格式问题。下图就我设置了CSV导出格式,但是还是存在问题,且时间格式还存在引号的情况,所以将数据导出来之后,用WPS进行打开,对时间格式进行一个调整,然后在保存为CSV结构的数据,用nodepad++打开即可

  2. hive导入成功但数据不存在。下面截图就展示了存在的问题。这个问题就是因为hive建表的问题,hive建表的格式不是文本格式导致的。我开始用的org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat ,后续如果不指定格式,默认格式就是org.apache.hadoop.mapred.TextInputFormat 即可导入进去

  3. hive数据导入之后一行的数据都存在某一个字段中。这个问题是因为hive没有指定数据导入后按照什么方式进行分割。SET SERDEPROPERTIES ('field.delim'=',', 'serialization.format'=' ')指定这个参数后,hive会将csv导入的数据按照逗号分隔。但是请注意,你的数据存在json数据或者别的逗号数据,导入后可能会产生数据错位的情况。在条件允许的情况下,将json和数据中的逗号,在WPS中用中文逗号替换即可。

  4. 其他的解决方案:其实这种类型的问题解决方案应该很多。例如:shell脚本执行hive insert语句、将数据插入到mysql用ETL的方式抽取到hive目标表。

总结:

导入数据考验一个细心的程度其实问题也不难,就是麻烦。如果其他网友有更好的解决办法,欢迎留言

相关推荐
Pushkin.21 小时前
新数仓建设方法论与实践指南-分层解耦驱动的数据仓库
大数据·数据仓库
m0_716255001 天前
二、Hadoop 面试必背 | 三、Hive 面试必背
大数据·hadoop·面试
Pushkin.1 天前
【新】数据仓库分层建模实战指南:从混乱到有序的工程实践
数据仓库
Volunteer Technology1 天前
HDFS扩缩容及数据迁移
大数据·hadoop·hdfs
3D霸霸2 天前
Sourcetree 拉取新工程
数据仓库·unity
Volunteer Technology2 天前
Hadoop NameNode HA
大数据·hadoop·分布式
大大大大晴天2 天前
Flink集群跨机房容灾:HDFS 快照权限踩坑与实践
hadoop·flink
Leo.yuan2 天前
企业数字化转型选型指南:FineBI如何助力数据驱动决策?
数据仓库·人工智能·信息可视化
Volunteer Technology2 天前
Hadoop Federation 联邦
大数据·hadoop·分布式
Volunteer Technology3 天前
Hadoop之HDFS集群搭建与操作(二)
大数据·hadoop·hdfs