数据驱动hive-jdbc 数据精度问题

出现问题:mybatis作为dao框架,利用hive-jdbc驱动,连接hive数据源,查询结果集的decimal类型数据 失去小数点后的值,导致数据精度问题。

如下是hive驱动的相关包和数据源配置

<!-- hive连接驱动开始 -->
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-client</artifactId>
			<version>2.6.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hive</groupId>
			<artifactId>hive-jdbc</artifactId>
			<version>2.0.0</version>
			<exclusions>
				<exclusion>
					<groupId>org.eclipse.jetty.aggregate</groupId>
					<artifactId>jetty-all</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.hive</groupId>
					<artifactId>hive-shims</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
<!--         hive连接驱动结束 -->

 hive数据源配置

##hive 
datasource.url=jdbc:hive2://10.10.8.107:21050/;auth=noSasl
datasource.username=
datasource.password=
datasource.driverClassName=org.apache.hive.jdbc.HiveDriver
datasource.type=hive

原因:hive-jdbc包中 org.apache.hive.jdbc.JdbcColumn 类的 columnClassName方法对 hiveType的decimal类型匹配为了javaType的BigInteger类型,因此导致了经过mybatis后类型转换后导致数据小数点后缺失,产生数据精度问题。

解决方案如下:

方案一:在当前项目中新建一个同包名类目的JdbcColumn.java,修改下图位置,将BigInteger换位BigDecimal,项目编译后,

将新生成的JdbcColumn.class 的替换hive-jdbc.jar中的 JdbcColumn.class即可。附件中保存了该文件。

方案二:改为 impala 连接驱动

    1. 修改pom配置

 <!-- impala 配置开始 -->      
       <dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-common</artifactId>
			<version>2.6.0</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.hive</groupId>
			<artifactId>ImpalaJDBC41</artifactId>
			<version>1.0.0</version>
		</dependency>
		<dependency>
			<groupId>pri.impala</groupId>
			<artifactId>inceptor-driver</artifactId>
			<version>1.0.0</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.thrift</groupId>
			<artifactId>libfb303</artifactId>
			<version>0.9.3</version>
			<type>pom</type>
		</dependency>
<!-- impala 配置开始 -->

    2.修改数据源配置

##hive 
#datasource.url=jdbc:hive2://10.10.8.107:21050/;auth=noSasl
datasource.url=jdbc:impala://10.10.8.102:21050/;auth=noSasl
datasource.username=
datasource.password=
#datasource.driverClassName=org.apache.hive.jdbc.HiveDriver
datasource.driverClassName=com.cloudera.impala.jdbc41.Driver
datasource.type=hive

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值