ETL工具-nifi乾貨系列 第十三講 nifi處理器QueryDatabaseTable查詢表數據實戰教程

1、處理器QueryDatabaseTable,該組件生成一個 SQL 查詢,或者使用用戶提供的語句,並執行它以獲取所有在指定的最大值列中值大於先前所見最大值的行。查詢結果將被轉換爲 Avro 格式,如下圖所示:

 本示例通過QueryDatabaseTable處理器連接數據庫查詢表數據,然後連接到LogMessage打印日誌消息。

2、處理器QueryDatabaseTable屬性配置,如下圖所示:

Database Connection Pooling Service:設置數據庫連接信息,如設置ip,端口,用戶名,密碼等。

Database Type:設置數據庫類型,有如下選項Generic 、Oracle 、Oracle 12+ 、MS SQL 2012+ 、MS SQL 2008 、MySQL 、PostgreSQL 、Phoenix 。本次演示採用mysql。

Table Name:設置表名,這裏設置爲t1。

Columns to Return:一個逗號分隔的列名列表,用於在查詢中使用。如果您的數據庫對這些名稱需要特殊處理(例如引號),每個名稱都應包括此處理方式。如果未提供列名,則將返回指定表中的所有列。

Additional WHERE clause:構建 SQL 查詢時要添加到 WHERE 條件中的自定義子句。

Custom Query:自定義查詢語句,如select * from t1 where id='22';

Maximum-value Columns:一個逗號分隔的列名列表。處理器將跟蹤自處理器啓動以來返回的每個列的最大值。使用多個列意味着對列列表有一個順序,並且預期每個列的值增長速度比前一個列的值慢。因此,使用多個列意味着列的分層結構,通常用於分區表。此處理器可用於僅檢索自上次檢索以來已添加/更新的行。請注意,一些 JDBC 類型,如 bit/boolean,並不利於維護最大值,因此不應在此屬性中列出這些類型的列,並且在處理過程中會導致錯誤。如果未提供列,則將考慮來自表的所有行,這可能會影響性能。注意:爲了使增量獲取正常工作,對於給定表格,使用一致的最大值列名非常重要。

Initial Load Strategy:

Max Wait Time:運行中的 SQL 查詢所允許的最長時間,零表示沒有限制。小於1秒的最長時間將等同於零。

Fetch Size:每次從結果集中獲取的結果行數。這是對數據庫驅動程序的提示,可能不會被採納和/或精確執行。如果指定的值爲零,則提示將被忽略。

Max Rows Per Flow File:單個FlowFile中將包含的最大結果行數。這將允許您將非常大的結果集分成多個FlowFiles。如果指定的值爲零,則所有行都將在單個FlowFile中返回。

Output Batch Size:在提交處理會話之前排隊的輸出FlowFiles的數量。當設置爲零時,會話將在所有結果集行都已處理並且輸出FlowFiles準備好傳輸到下游關係時提交。對於大型結果集,這可能會導致在處理器執行結束時傳輸大量的FlowFiles。如果設置了此屬性,則當指定數量的FlowFiles準備好傳輸時,會話將被提交,從而釋放FlowFiles到下游關係。注意:當設置此屬性時,FlowFiles上將不設置maxvalue.*和fragment.count屬性。

 

 

Maximum Number of Fragments:最大碎片數量。如果指定的值爲零,則返回所有碎片。當此處理器攝取大型表格時,這可以防止OutOfMemoryError。注意:設置此屬性可能會導致數據丟失,因爲傳入的結果未排序,並且碎片可能在不包含在結果集中的行的任意邊界結束。

Normalize Table/Column Names:是否將列名中的非Avro兼容字符更改爲Avro兼容字符。例如,冒號和句點將被更改爲下劃線,以構建有效的Avro記錄,有true和false兩個選項。

Transaction Isolation Level:此設置將爲支持此設置的驅動程序設置數據庫連接的事務隔離級別。

Use Avro Logical Types:是否使用 Avro 邏輯類型來處理 DECIMAL/NUMBER、DATE、TIME 和 TIMESTAMP 列。如果禁用,則寫入爲字符串。如果啓用,則使用邏輯類型並按其底層類型寫入,具體來說,DECIMAL/NUMBER 作爲邏輯 ‘decimal’:按字節寫入,並附加精度和比例元數據,DATE 作爲邏輯 ‘date-millis’:按整數寫入,表示自 Unix 紀元(1970-01-01)以來的天數,TIME 作爲邏輯 ‘time-millis’:按整數寫入,表示自 Unix 紀元以來的毫秒數,以及 TIMESTAMP 作爲邏輯 ‘timestamp-millis’:按長整數寫入,表示自 Unix 紀元以來的毫秒數。如果寫入的 Avro 記錄的讀取器也瞭解這些邏輯類型,那麼根據讀取器實現的不同上下文,這些值可以以更多的上下文進行反序列化。

Default Decimal Precision:當 DECIMAL/NUMBER 值被寫入爲 ‘decimal’ Avro 邏輯類型時,需要指定表示可用數字的數量的特定 ‘precision’。通常,精度由列數據類型定義或數據庫引擎默認值定義。然而,一些數據庫引擎可能會返回未定義的精度(0)。在寫入這些未定義精度的數字時,將使用“默認十進制精度”。

Default Decimal Scale:當 DECIMAL/NUMBER 值被寫入爲 ‘decimal’ Avro 邏輯類型時,需要指定表示可用小數位數的特定 ‘scale’。通常,scale 由列數據類型定義或數據庫引擎默認值定義。然而,當返回未定義的精度(0)時,在某些數據庫引擎中,scale 也可能不確定。在寫入這些未定義數字時,將使用“默認十進制 scale”。如果一個值的小數位數超過指定的 scale,則該值將四捨五入,例如,scale 爲 0 時,1.53 變爲 2,scale 爲 1 時,1.5。

 3、控制器服務,配置數據庫連接,點擊Database Connection Pooling Service 屬性對應的值,選擇Create new service,如下圖所示:

選擇合適的Compatible Controller Services,自定義Controller Service Name,如下圖所示。

 下種中的齒輪可以進行設置數據庫連接信息,閃電標記可以啓用和禁用。

點擊齒輪進行配置數據庫連接信息,填寫主要信息Database Connection Url、Database Driver Class Name,Database user和Password,如下圖所示:

 

 

 4、點擊運行,然後查看數據溯源信息,attributes 中多了tablename、querydbtable.row.count、mime.type屬性如下圖所示:

 

 點擊content選項卡,可以看到flowfile的content,點擊view進行查看數據,如下圖所示:

 

 

 點擊view查看數據,默認orginal格式爲avro二進制數據所以會有中文亂碼的情況,此處亂碼不影響,忽略即可,如下圖所示:

 

 

 選擇formatted,輸出json格式的數據,如下圖所示:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章