HIVE和myBatis问题与日期/时间戳字段

时间:2017-10-06 17:20:10

标签: java hadoop hive mybatis

我编写了一个简单的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的事情,我不应该这样做。

(这是我用来说明这一点的一个非常简单的例子。)

1 个答案:

答案 0 :(得分:0)

原来这是hive jdbc驱动程序版本1.2.1的问题 HivePreparedStatement中的setTimestamp有一个小缺陷。升级驱动程序修复了问题..

https://issues.apache.org/jira/browse/HIVE-11748