使用kettle交換工具自動建立oracle表分割槽

2021-07-30 05:39:20 字數 2378 閱讀 1830

有很多朋友都用不同的交換工具,但大多數功能還是一致的。這裡我使用的kettle是我們公司自己的

1.先在oracle資料庫裡建立乙個分割槽表例項,這裡我按日分割槽:

create table de_test( 

name_tag       varchar2(10), 

day_tag        date ) 

partition by range (day_tag)  (

partition de_test_20170405 values less than (to_date('2017-04-0600:00:00','yyyy-mm-ddhh24:mi:ss')), 

partition de_test_20170406 values less than (to_date('2017-04-0700:00:00','yyyy-mm-ddhh24:mi:ss'))  ) 

在正式操作之前,先分析一下需求:如果我們需要自動建立表分割槽,就需要查詢該錶的最大分割槽,來判斷是否需要建立新分割槽,日常建立分割槽要滿足的條件是至少建立到當天日期分割槽的第二天。

2.我的大體思路: 獲取最大分割槽-->將最大分割槽值日期與當天的日期做比較

比較的三種情況及結果如下:

如果相等,就表明最大分割槽正好建立到了當天日期,這種情況只需要提前建好明天(即當天系統日期的第二天)的日期分割槽

如果最大分割槽值小於當天的日期值 ,就迴圈建立新分割槽 ,直到建立好當天系統日期的第二天日期分割槽為止

如果最大分割槽值已經大於當天的日期值,就表明不需要建立新分割槽

3.具體步驟:

一、先建立交換:

(獲取最大分割槽:通過查詢最大分割槽 ,改寫sql得到三個字段:比較天數,分割槽時間(需要新建的分割槽名稱),結束時間):

具體sql如下

select

to_date(to_char(sysdate,'yyyymmdd'),'yyyymmdd')-to_date(substr(u.partition_name,9),'yyyymmdd') bjts

,'de_test_'||to_char(to_date(substr(u.partition_name,9),'yyyymmdd')+1,'yyyymmdd')fqsj

,to_char(to_date(substr(u.partition_name,9),'yyyymmdd')+2,'yyyy-mm-ddhh24:mi:ss') jssj

from user_tab_partitions u 

where u.table_name='de_test'

order

bypartition_namedesc

通過以上sql預覽資料如下:

bjts(很重要,需理解)就是說系統當前時間-最大分割槽的時間所差的天數,如果=0,說明最大分割槽就是當天的,需要建好明天的乙個分割槽;如果》0,就說明最大分割槽至少在當前系統時間的前一天乃至前n天,所以需要新建至少兩個新的分割槽;如果<0,就說明滿足條件,不需要新建分割槽

(bjts和bjts大小寫無所謂,都一樣哈)

(設定變數):

將這三個獲得的字段 設定成環境變數供作業中呼叫

二、建立作業,來排程交換

(1)在作業中排程上面步驟建立的交換,然後把下一步連線到檢驗欄位的值

(2)如何檢驗欄位的值:

注意:呼叫變數,變數名需要外加${}

這裡呼叫的變數就是交換中提到的bjts(比較天數,bjts只是我起的乙個變數名,拼音比較容易理解),之前分析過。這裡不再多加贅述。

成功條件,如果值bjts小於0,就是說不用建立新分割槽了,直接提示作業成功即可

如果不符合這個條件,就往下面走,去進行建立新分割槽步驟

(3)建立新分割槽

alter

table de_test

add partition $

values less than (to_date($))

注意: 

${}用來呼叫之前的變數

如果再檢驗欄位的值,還不滿足條件,就繼續迴圈,直到滿足條件為止,就成功

這是今天剛做的例項,純原創,當作是學習的記錄。

kettle工具使用一二三

1 關於id生成器。如果乙個轉化流程裡的兩個分支分別使用了generate id元件,請注意 計數器名稱 這個很重要。1 如果改名字不同,則最總彙總結果中的id是會分別生成的,也就是說會出現重複的id。2 如果名字相同,最終結果中id是不會重複的。2 關於序列生成器 首先抱歉,上面所說的 gener...

使用python製作時間戳轉換工具

python 時間戳轉日期 日期轉時間戳 本文的環境 可選 可以使用pyinstaller打包成exe檔案執行。程式大小大約8m,執行時記憶體占用15m左右。先貼 因為時間有限,沒有寫的太工整,見諒 from tkinter import from time import 1 這個程式實現時間戳和日...

使用python製作時間戳轉換工具

python 時間戳轉日期 日期轉時間戳 先貼 因為時間有限,沒有寫的太工整,見諒 from tkinter import from time import 1 這個程式實現時間戳和日期格式的相互轉換。2 使用grid方法按照 方式對元件位置進行安排 3 通過button按鈕進行轉換和重新整理操作。...