2017-01-23 76 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