大数据采坑集-导入数据到hive的换行符问题

问题描述

我们通常在迁移数据到大数据环境中,会使用,sqoop、datax之类的etl工具,从数据库中迁移到hive或hdfs。数据库中的原始数据中的文本类数据难免会有特殊字符,比如换行符,会对导入Hive后的数据产生影响。下面是从mysql导入hive的数据,其中,hive表是textfile格式存储特殊字符没做处理:
在这里插入图片描述

发现有两个字段没了,于是再看看hive表在hdfs上的文件:
在这里插入图片描述
发现原本一行的数据,变成多行了,文本中有‘\n’换行符,导致位置错乱,所以hive查出来有两个字段没了

解决方法一

把换行符替换成空字符串,sqoop中有替换的参数,但是datax中没有。有些场景中,为了保留数据的完整性,必须保留换行符怎么办呢?

解决方法二

用orc存储hive表
ORC的全称是(Optimized Row Columnar),ORC文件格式是一种Hadoop生态圈中的列式存储格式,它的产生早在2013年初,最初产生自Apache Hive,用于降低Hadoop数据存储空间和加速Hive查询速度。和Parquet类似,它并不是一个单纯的列式存储格式,仍然是首先根据行组分割整个表,在每一个行组内进行按列存储。ORC文件是自描述的,它的元数据使用Protocol Buffers序列化,并且文件中的数据尽可能的压缩以降低存储空间的消耗,目前也被Spark SQL、Presto等查询引擎支持
因为是列式存储,所以不存在某字段的换行符的原因导致数据错乱

用orc存储后的表,全表查询:
在这里插入图片描述
咦?怎么还是空的?下面几行怎么全是null?列式存储不应该出现这种情况啊!
别急, 你看到的不一定是真实的
增加过滤条件指定这行的id试试
在这里插入图片描述
咦?怎么又有了?
解释:我用的是ambari自带的hive查询界面,这可能是ambari本身显示的bug,它把文本数据里面的换行符也展示出来了,所以页面上看到还是乱的,but,实际数据并没有乱,你执行任何查询都不会有问题,页面展示的问题,不再是数据的问题!!

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
Sqoop是一款用于在Hadoop集群和关系型数据库之间高效地传输数据的工具。它可以将关系型数据库中的数据导入到Hadoop生态系统中的各种工具,如HDFS、Hive、HBase等。下面是使用Sqoop将数据从关系型数据导入Hive的步骤: 1. 首先需要确保Hadoop和Hive已经安装并正常运行。 2. 然后需要在Hive中创建一个,用于存储从关系型数据库中导入数据。可以使用Hive的CREATE TABLE语句来创建。 3. 接下来,需要使用Sqoop的import命令来将数据从关系型数据库中导入Hive中。Sqoop的import命令语法如下: ``` sqoop import --connect jdbc:mysql://mysql.example.com/dbname \ --username myuser \ --password mypassword \ --table mytable \ --hive-import \ --hive-table myhive_table \ --create-hive-table \ --fields-terminated-by ',' \ --lines-terminated-by '\n' ``` 其中,--connect指定了要连接的关系型数据库的URL;--username和--password指定了要用于连接数据库的用户名和密码;--table指定了要导入的关系型数据库中的的名称;--hive-import指定了要将数据导入Hive中;--hive-table指定了要将数据导入到的Hive的名称;--create-hive-table指定了在Hive中创建新;--fields-terminated-by和--lines-terminated-by指定了导入数据时使用的字段和行分隔符。 4. 运行上述Sqoop命令后,数据将被导入Hive中。可以使用Hive的SELECT语句来查询导入数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值