sqoop从mysql导入数据到hive时tinyint(1)字段自动变成Boolean(已解决)

在使用sqoop从mysql导入数据到hive时,tinyint(1)字段被自动转换为Boolean类型。这是因为MySQL JDBC connector默认将Tinyint(1)映射为BIT,Sqoop则映射为Boolean。解决方案包括在JDBC连接字符串添加tinyInt1isBit=false或通过--map-column-hive或--map-column-java选项显式指定列类型。
摘要由CSDN通过智能技术生成

最近使用sqoop从mysql导入数据的时候发现tinyint(1)的字段内容在hive中变成了true、false的布尔类型,但是tinyint(2)的却没有。

Sqoop在抽取数据到Hive或者HDFS时,会自动将类型为tinyint(1)的列转为boolean类型,这就是导致抽取到Hive或HDFS中的数据中只有true和false的原因。因为默认情况下,MySQL JDBC connector 会将Tinyint(1)映射为java.sql.Types.BIT类型,而Sqoop默认会映射为Boolean类型。

解决方案

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值