2017-01-23 48 views
1

我使用NiFi到Oracle(11克)数据库表传送到HDFS(阿夫罗格式)所有字段。甲骨文+ NiFi =>转换为字符串

出了差错与AVRO列的分型:他们都被定义为字符串,即使甲骨文TableColumn的是另一种类型的数字一样,日期时间的时间戳的。显然,这是恼人的:-)

一些google搜索后,我发现建议,在某些Oracle JDBC驱动程序的组合和转换器的Avro存在的问题。但是,我找不到合适的解决方案;有没有人知道要使用什么JDBC(或其他?)驱动程序来正确输入Avro输出?

回答

0

我发现意外的行为的解释:

  1. Oracle使用即使列与INT定义的号码[1](这 不是一个驾驶员侧的问题,我猜。)
  2. 2JDBC驱动程序映射数为BigDecimal
  3. NiFi实现映射到BigDecimal的字符串,因为在那个时候, 的Avro不支持的BigDecimal映射到的Avro 1.8.1。当前 NiFi使用Avro 1.7.7。通过Avro 1.8.1,我们可以利用LogicalType [2]来映射BigDecimal或Date更友好的方式。
  4. NiFi项目[3]正在努力使用LogicalType 机制,以便这些数据类型可以映射更多的适当数据类型。

换句话说,似乎我不得不等待下一个版本解决此问题。

2

如果驱动程序按照Bryan的建议(或NiFi将其视为字符串的未知类型)作为每个列的类型返回“string”,那么如果您知道期望的列类型,对于原始类型转换(字符串, long,int,double,float)你可以试试ConvertAvroSchema处理器。

对于日期/时间字段,取决于您想要对它们做什么,NiFi表达式语言中有一些Date Manipulation functions可以帮助您处理它们。

+0

感谢您的输入。但是,您建议的是(不可持续的)解决方法。 –

+0

是的,我是在暗示一种变通方法,直到https://issues.apache.org/jira/browse/NIFI-2624实现。 – mattyb