我编写了一个简单的hadoop / hive表,定义为
CREATE TABLE mike
timeOne TIMESTAMP,
timeTwo TIMESTAMP,
name STRING
然后在myBatis映射器文件中插入一个看起来像这样的记录
<insert id="insertMikeFormDataForHadoop" parameterType="hashmap">
INSERT INTO ${tableName} (timeOne, timeTwo, name)
VALUES (#{timeOne, jdbcType=DATE}, #{timeTwo, jdbcType=DATE}, #{name})
</insert>
当我运行测试以通过此SQL插入数据时,我得到这样的错误。
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 2:16 mismatched input '-' expecting ) near '2017' in value row constructor
### The error may involve com.vertexinc.ve.returns.mapper.FormMapper.insertMikeFormDataForHadoop-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO mike (timeOne, timeTwo, name) VALUES (?, ?, ?)
### Cause: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 2:16 mismatched input '-' expecting ) near '2017' in value row constructor
我也尝试使用jdbcType = TIMESTAMP而不是日期,但错误相同。
我想知道我是做错了什么,或者假设有关hive / hadoop和mybatis的事情,我不应该这样做。
(这是我用来说明这一点的一个非常简单的例子。)
答案 0 :(得分:0)
原来这是hive jdbc驱动程序版本1.2.1的问题 HivePreparedStatement中的setTimestamp有一个小缺陷。升级驱动程序修复了问题..