Nifi 管理數據庫分區

繼續上文講述,使用Nifi管理數據庫分區。

其實關鍵就是表的設計 ,oracle的語法,nifi的自動化。

廢話不多說了,就用一個需求作為結尾吧。

GE_BI_T_CENTER_COMP_DETAIL 這是一張分區表。

T_CENTER_COMP_DETAIL_P20200301 這是3月1號的分區。

T_CENTER_COMP_DETAIL_P20200402 這是4月2號的分區。

我們假設 這張表當前最小的分區是3月1號,最大的分區是4月2號。而今天就是3月29號。

那麼nifi這邊做到操作 就是刪除歷史分區 3月1號,和創建新增分區 4月3號的分區。

那麼首先:

我們將GE_BI_T_CENTER_COMP_DETAIL存儲到一張專門維護分區表的表中。

然後表字段如下:


Nifi 管理數據庫分區

這樣,我們通過Nifi的ExecuteSQL 得到數據庫的查詢結果。

馬上通過PartitionRecord 這個processor 獲取到 添加分區的天數,刪除分區的天數,分區的前綴,表名等。


Nifi 管理數據庫分區

PartitionRecord的下游就是 設置 刪除分區 和 添加分區的關鍵屬性。


Nifi 管理數據庫分區

這樣就構建了關鍵的文本 ,用於組裝sql語句。


Nifi 管理數據庫分區

接下來 這個下游流向兩處,

一個是生成 刪除分區的語句。【alter table ${table_name} truncate partition ${delete_text} drop storage】

一個是生成 構建分區的語句。【ALTER TABLE ${table_name} ADD PARTITION ${pre_text} VALUES LESS THAN(TO_DATE('${pre}','YYYY-MM-DD'))】

最後,將這兩句sql ,交給 PutSQL 這個processor 去執行就大功告成了。

只是這是在正常情況下,萬一有人給表新加了分區,那執行刪除分區 可能會有問題。

所以為了保險,在刪除分區 之前 加一層校驗,如果當前刪除的分區不是最小的分區,就不給刪除。

select min(partition_name) as MIN_PARTITION from user_tab_partitions where table_name='${table_name:toUpper()}'

執行這個獲取當前的最小分區,當然執行這句查詢肯定是交給


Nifi 管理數據庫分區

獲取最小的分區


這樣才能保證高可用,而新增分區也是如此類推,查詢添加的分區是否存在,如果不存在就添加,反之就過濾。

然後這樣Nifi 就會每天幫你自動化執行,刪除歷史的分區 和 構建未來的分區。

而用戶只要維護 那張存儲分區表的表即可,一勞永逸。


分享到:


相關文章: