Sqoop抽取MySQL中tinyint类型数据只有0和1的问题

当使用Sqoop从MySQL导入数据到Hive时,tinyint(1)类型的数值会被错误地转换为0和1。原因是MySQL JDBC connector将TINYINT(1)映射为BIT, Sqoop则将其视为Boolean。解决方案是在JDBC连接字符串中添加`tinyInt1isBit=false`,或通过`--map-column-hive`或`--map-column-java`选项显式设置列映射。
摘要由CSDN通过智能技术生成
问题描述

使用Sqoop抽取MySQL数据到Hive时,会发现MySQL中tinyint类型的数据在抽到Hive中只有0和1,其他的数值都被替换了,很诡异。其实Sqoop的官方文档给出了解释并给出了解决方案:
27.2.5. MySQL: Import of TINYINT(1) from MySQL behaves strangely
Problem: Sqoop is treating TINYINT(1) columns as booleans, which is for example causing issues with HIVE import. This is because by default the MySQL JDBC connector maps the TINYINT(1) to java.sql.Types.BIT, which Sqoop by default maps to Boolean.

Solution: A more clean solution is to force MySQL JDBC Connector to stop converting TINYINT(1) to java.sql.Types.BIT by adding tinyInt1isBit=false into your JDBC path (to create something like jdbc:mysql://localhost/test?tinyInt1isBit=false). Another solution would be to explicitly override the column mapping for the datatype TINYINT(1) column. For example, if the column name is foo, then pass the following option to Sqoop during import: --map-column-hive foo=tinyi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值