簡體   English   中英

NiFi中的命名約定

[英]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閱讀器

CSVSetWritter

AvroSchemaRegistry

我怎么解決這個問題? 非常感謝您的幫助。謝謝!

如要為輸出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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM