[英]Naming convention in NiFi
我有一個流程GetFile-> ConvertRecord-> splittext-> PutdatabaseRecord 。 我要發送到GetFile的csv文件包含以下字段:
ID TIME M00B01 M00B02 M00B03
1 2018-09-27 10:44:23.972 3242 35 335
2 2018-09-21 11:44:23.972 323 24 978
MYSQL中的MY數據庫表框架如下:
Create table test(ID INT,TIME DATETIME(3),MxB01 INT,MxB02 INT,MxB03 INT);
注意:我已將標頭的名稱替換為MxB00,MxB01等。
我以CSVReader讀取並以CSVSetWritter書寫時,convertRecord處理器出現錯誤。 我附上兩者的配置供您參考。
問題是它讀取CSV文件,但是由於標頭名稱的更改,它將所有其他字段都留為空白(我更改了標頭名稱,因為我必須將標頭名稱寫為MxB00才能匹配MySQL表中定義的標頭)。 我獲得了ID和Time的值,因為我沒有更改CSVWritter和MySQL表定義中那些字段的Header名稱。 因此我得到了這些值,但對於其他值卻得到了空白,因為名稱更改使它變得混亂。
我怎么解決這個問題? 非常感謝您的幫助。謝謝!
如要為輸出CSV文件創建自定義標頭,然后配置CSV閱讀器控制器服務,如下所示。
當我們將模式訪問策略用作模式文本並將模式指定為
{
"type": "record",
"name": "SQLSchema",
"fields" : [
{"name": "ID", "type": ["null","int"]},
{"name": "TIME", "type": ["null","string"]},
{"name": "MxB01", "type": ["null","int"]},
{"name": "MxB02", "type": ["null","int"]},
{"name": "MxB03", "type": ["null","int"]}
]
}
並且我們將csv數據的第一行視為Header並忽略了CSV header列名 ,因此輸出流文件將具有我們上面定義的架構。
CsvWriter配置:
由於我們繼承了架構寫入策略,因此輸出流文件將具有我們在閱讀器中指定的相同標頭。
另外,我不確定為什么在ConvertRecord之后使用SplitText處理器作為PutDatabaseRecord處理器,該處理器旨在一次處理大塊記錄。
即使您可以使用上述CsvReader控制器服務配置PutDatabaseRecord處理器,您的流程也將是:
流:
GetFile -> PutDatabaseRecord
注意:
由於我沒有在時間戳字段中使用Avro邏輯類型(如果您正在使用邏輯類型),請相應地更改控制器服務配置。
嘗試GetFile-> ReplaceText-> ConvertRecord-> splittext-> PutdatabaseRecord。
配置:
搜索值:輸入標題,替換值:新標題,替換策略:文字替換,評估模式; 整個文字
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.