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目标表。

总结:

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

相关推荐
RestCloud13 小时前
ETL与数据湖Hudi的集成与操作
数据仓库·etl·hudi·数据同步·数据集成平台
苛子13 小时前
实时数据同步工具横评:ETLCloud vs 帆软FDL,谁更适合企业数据平台?
数据仓库·etl
德昂信息dataondemand13 小时前
ETL:解锁数据价值的 “黄金转换器
数据仓库·etl
ApacheSeaTunnel15 小时前
(三)ODS/明细层落地设计要点:把数据接入层打造成“稳定可运维”的基础设施
数据库·数据仓库·数据湖·白鲸开源
网络工程小王17 小时前
【大数据技术详解】——HDFS技术(学习笔记)
hadoop·hdfs·big data
SelectDB技术团队20 小时前
易车 × Apache Doris:构建湖仓一体新架构,加速 AI 业务融合实践
数据仓库·人工智能·数据分析·agent·apache doris·mcp·易车
王的宝库1 天前
MapReduce / Hive / Pig :从底层批处理到 SQL/脚本落地
hive·hadoop·sql·mapreduce
升职佳兴1 天前
告别 nohup:Hive Metastore 交给 systemd 托管的完整步骤
数据仓库·hive·hadoop
IT从业者张某某1 天前
Docker部署Hadoop-01-Docker安装
hadoop·docker·eureka
小哥哥咯1 天前
数据仓库维度建模思维导图—— 基于《The Data Warehouse Toolkit, 3rd Edition》(第三版修订版)
大数据·数据仓库