【公眾號系列】超詳細SAP HANA JOB全解析
寫在前面
你一定知道SM36/SM37,ERP裏的JOB我們都很熟悉,可以讓一些功能性的程序定期地完成一些我們需要的指定性的操作。這樣既可以節省時間,又可以避開服務器使用的高峰期,所以很多時候JOB是項目實施的必要手段。
那麽,這些事情(定時執行定時任務的功能)是否可以在HANA裏來完成呢,由於HANA顯著的性能優勢,在和外部系統集成的時候,也需要這樣的功能來做一些任務。這個功能使用還是很普遍的,我也在博客中寫了很多這方面的內容,今天在公眾號上我想詳細的說一下使用HANA JOB的全過程。
前提條件
1、服務器版本
首先HANA服務器的版本要高於SPS07,因為從Revision 70之後的版本才添加了這個功能。
2、XSEngine服務
確保XSEngine可以使用,測試方法,打開瀏覽器,輸入下面這個URL:
http://<Web_Server_Host>:80<HANA_instance>
或者:
http://<Web_Server_Host>:80<HANA_instance>/sap/hana/xs/admin/
如果出現下面兩張圖的內容,說明XS服務沒有問題
公眾號:SAP Technical
公眾號:SAP Technical
公眾號:SAP Technical
SAP HANA登錄界面
3、參數修改
我們需要為後面的JOB修改一下參數,在indexserver.ini參數文件裏,默認情況下,repository下的sqlscript_mode是default,建議修改為UNSECURE。因為default模式下是read only狀態,無法進行insert操作。
還有一點,在xsengine.ini參數文件裏,添加scheduler節點,並且添加enabled屬性,值設置為true。這兩點的參數分別如下圖所示:
公眾號:SAP Technical
公眾號:SAP Technical
公眾號:SAP Technical
HANA XS參數文件
4、權限參數
要給登錄的賬號授予sap.hana.xs.admin.roles :: JobAdministrator的權限和sap.hana.xs.admin.roles :: HTTPDestAdministrator的權限。當然,該用戶的Schema權限也要賦給用戶_SYS_REPO。
公眾號:SAP Technical
以上四個步驟完成之後,說明我們的前期準備工作已經做完,相當於環境準備完成。接下來就是創建JOB的具體操作了,下面我來講一下具體的流程。
創建步驟
1、創建XSProject
選擇Project後,找到XSProject,這裏的一些步驟我這裏就不那麽詳細寫了,因為重點在後面的參數介紹,這些步驟讀者朋友可以自己操作一下,很容易做出來。
公眾號:SAP Technical
找到XSProject,如下圖所示:
公眾號:SAP Technical
這裏強調一點,當要給project指定一個workspace時,你可以新建一個workspace或者使用缺省的workspace。
2、所需文件
創建完Project後,我們需要在Project裏有幾個必要的文件,.xsapp文件、. xsaccess文件、.xsjob文件和.xsjs文件。這幾個文件是必要的,而且創建Project的時候,會帶出來前兩個文件,我下面會重點說一下比較重要的文件,其他的可能會直接帶過。
其他的就是填寫名稱,一路NEXT下來就好。最後,我們可以在Project Explorer裏看到新建的project。如下圖所示
公眾號:SAP Technical
.xsaccess文件內容,這個文件裏面主要是控制權限緩存之類的參數,我這裏寫上最簡單的參數內容,如下圖所示:
公眾號:SAP Technical
.xsapp文件內容為空即可,因為這個是整個Project訪問的入口,所以沒有內容也要有這個文件,這裏我就不在多說了。
3、調用文件
JOB能調用的內容,包括表,存儲過程,模型等等。比如表,我就可以直接通過js的function來實現調用,然後放入到job文件中,而存儲過程就可以直接放入job文件中,寫法略有不同,這個後面會詳細講解
調用展示
這裏我簡單的做一個調用展示的例子,希望大家看到例子後知道整個過程的操作。
1、創建表
首先,我需要一張表,我想通過JOB來完成表裏的數據存儲,那現在來創建一個簡單的存儲表,如下圖所示:
公眾號:SAP Technical
2、創建js文件
我需要一個js文件來完成對表的數據操作,創建的方法,如下圖所示:
公眾號:SAP Technical
創建js文件後,需要些一點代碼,代碼的內容就是SQL執行數據連接操作,這段代碼很簡單,我就不解釋太多了,直接看代碼,如下圖所示:
公眾號:SAP Technical
3、創建job文件
我需要一個JOB文件作為載體,用於定時完成任務,創建過程也很簡單,和步驟2類似,只是要選擇JOB文件即可,.xsjob文件生成之後,可以在XS Job文件裏定義任務了。如下圖所示:
公眾號:SAP Technical
創建JOB文件後,也需要寫一點參數的代碼,在action裏指定剛才新建的XS JavaScript文件裏的function。在schedules中指定調度時間,其中的xscron同Linux環境的crontab的語法類似,這裏我們指定每5秒鐘執行一次。代碼如下圖所示:
公眾號:SAP Technical
JOB配置
以上步驟完成之後,現在來到了最後一步,也就是如何啟動任務。此時,打開瀏覽器,進入到Admin界面,輸入賬號和密碼之後,我可以在HANA XS Administration Tool裏看到剛才新建的Job。在這裏我也可以新建Job,來完成我想要定時的任何任務。
輸入User和Locale,勾選Active,然後,點擊Save之後XS Job就開始執行了。當然,我們也可以在此監控任務。如下圖所示:
配置界面如下圖所示:
公眾號:SAP Technical
參數解析
我這裏重點說一下Job的參數,我把Job文件拆分開來,每一個都具體說一下。
1、description參數
參數的具體使用,如下圖所示:
公眾號:SAP Technical
只是單純的描述描述這個Job的作用,方便查找和日誌查詢。
2、action參數
參數的具體使用,如下圖所示:
公眾號:SAP Technical
使用action關鍵字可以定義要作為XS作業的一部分運行的函數,例如,XS JavaScript或SQLScript。需要以下語法:
“action” : “<package.path>:<XSJS_Service>.xsjs::<functionName>”.
由於js的function比較特殊,所以這裏拿出來舉例說明。
3、schedules參數
description(可選)
描述Job的具體執行規則
xscron
使用類似cron的語法來定義作業運行的計劃,所以xscron關鍵字允許我們定義在運行作業的計劃。(下面有詳解)
parameter(可選)
定義作為作業一部分調用的(XSJS或SQLScript)函數用作輸入參數
XS作業文件中的xscron語法詳解:
公眾號:SAP Technical
舉個栗子說明一下,比如:* * * * * */5 20表示預定作業應每五分鐘運行一次,並且還應在指定分鐘內的第20秒運行。作業從指定分鐘的正好20秒開始,僅運行一次。
為了更清晰的弄清楚這個問題,我再來詳細的列一個表格,幫你解決困惑。
公眾號:SAP Technical
那現在我再來舉個正常的例子
比如:2019 * * fri 12 0 0 表示2019年每周五中午12:00開始執行。
再比如:* * 3:-2 * 12:14 0 0 表示每月的第三天和第二天之間的每個月的每個小時的12:00至14:00之間的每小時定時執行。
存儲過程
使用Job調用存儲過程的方式和前面差不多,我這裏就簡單的說一下關鍵步驟,創建存儲過程的步驟我這裏就省略了,創建完存儲過程之後,需要在存儲過程裏寫一下簡單的測試代碼,很簡單,就是在上述我創建的表格裏,插入一行代碼,具體代碼如下圖所示:
公眾號:SAP Technical
調用過程
創建完存儲過程之後,將其保存並激活。然後同樣新建一個XS Job來執行這個Procedure。創建JOB的過程這裏也省略了,在Project右鍵就可以直接創建(創建的過程可以直接在過濾條件裏輸入關鍵字),具體代碼如下圖所示:
公眾號:SAP Technical
在這裏有需要註意的地方就是,註意action的語法,和剛才的XS JavaScript是不同的。這裏我指定了每10秒鐘執行一次。這一部分就先介紹到這裏。
刪除計劃
創建JOB的部分差不多已經全部介紹完,那麽,可以創建JOB,當然也可以刪除,刪除的方法也不止一種,可以在瀏覽器中進入到admin裏,找到要刪除的JOB,選擇delete schedule直接刪除,也可以使用$.jobs JavaScript API在運行時向作業添加或刪除JOB。第一種方法就不用說了,進入界面找到,直接刪除。現在來說一下第二種方法,使用API進行刪除。
公眾號:SAP Technical
現在我來創建一個xsjs在運行時為xsjob中定義的XS作業添加新JOB或者是刪除JOB,代碼如下圖所示:
公眾號:SAP Technical
保存並激活上述文件,調用XS JavaScript在運行時添加新的JOB或者刪除JOB。但相對來說,還是推薦第一種做法,進入admin後可以直接刪除,不用考慮API的內容。
公眾號:SAP Technical
以上講了很多關於HANA JOB的操作,這篇文章也基本涵蓋了HANA Job的所有內容,並且重點在詳細解析了參數,這個地方很多人可能沒有搞清楚,希望你看完這篇文章之後,對這些參數有個清晰的了解。
參考文檔:
SAP HANA Administration Guide;
SAP HANA Developer Guide;
【公眾號系列】超詳細SAP HANA JOB全解析