Skip links

הסבר מפורט על AFL במערכת SAP HANA

AFL מייצג את Application Function Library, שהיא מסגרת המאפשרת למפתחים ליצור ולבצע פונקציות מותאמות אישית במערכת SAP HANA. פונקציות AFL נכתבות בשפת C++ ועוברות הידור לספריות משותפות שנטענו על-ידי שרת SAP HANA בזמן ריצה. פונקציות AFL יכולות לגשת לנתונים המאוחסנים בטבלאות, תצוגות או אובייקטים אחרים של SAP HANA ולטפל בהם באמצעות SQL או SQLScript.

פונקציות AFL מקובצות לחבילות, שהן אוספים לוגיים של פונקציות קשורות המשרתות מטרה או תחום ספציפיים. לדוגמה, ישנן חבילות AFL לניתוח תחזיתי, ניתוח טקסט, ניתוח מרחבי, עיבוד גרפים ועוד. לכל חבילה יש שם ומספר גירסה ייחודיים, וניתן להתקין או להסיר את התקנתה בנפרד מחבילות אחרות.

כדי להשתמש בפונקציית AFL, מפתח צריך ליצור הליך מעטפת שחושף את הפונקציה לשכבת SQL או SQLScript. הליך העטיפה מגדיר את פרמטרי הקלט והפלט של הפונקציה, כמו גם את כל פרמטרי התצורה האופציונליים. הליך העטיפה מציין גם את השם והגירסה של חבילת AFL המכילה את הפונקציה, ואת שם הספריה המשותפת המיישמת את הפונקציה.

לאחר מכן ניתן לקרוא לפרוצדורת העטיפה מכל משפט SQL או SQLScript, להעביר את הארגומנטים המתאימים ולקבל את התוצאות. שרת SAP HANA יטען באופן דינמי את הספרייה המשותפת ויבצע את הפונקציה, יעביר את נתוני הקלט ופרמטרי התצורה, ויחזיר את נתוני הפלט.

פונקציות AFL יכולות לספק יתרונות ביצועים משמעותיים על פני פונקציות SQL או SQLScript קונבנציונליות, מכיוון שהן יכולות למנף את יכולות העיבוד המקבילי של SAP HANA ולהימנע מתנועת נתונים בין שכבות. פונקציות AFL יכולות גם ליישם אלגוריתמים מורכבים או לוגיקה שאינם זמינים או ישימים ב- SQL או ב- SQLScript.

AFL הוא כלי רב עוצמה וגמיש להרחבת הפונקציונליות של SAP HANA וליצירת פתרונות מותאמים אישית לתרחישים עסקיים שונים. עם זאת, AFL דורש גם כישורי תכנות מתקדמים וידע פנימי של SAP HANA, כמו גם בדיקות קפדניות וניפוי באגים. לכן, יש להשתמש ב-AFL בזהירות ורק בעת הצורך.

SQLScript היא שפת סקריפטים המשולבת עם SQL וניתן להשתמש בה לכתיבת פרוצדורות, פונקציות או גורמים מפעילים מאוחסנים ב- SAP HANA. SQLScript יכול לבצע חישובים מורכבים, המרות נתונים או לוגיקה עסקית בערכות נתונים גדולות באופן מקביל ומבוזר.

ההבדל העיקרי בין AFL ל- SQLScript הוא שפונקציות AFL נכתבות ב- C++ ופועלות באופן מקורי בשרת SAP HANA, בעוד שפונקציות SQLScript נכתבות ב- SQLScript ופועלות במחשב וירטואלי בשרת SAP HANA. פונקציות AFL יכולות לספק ביצועים וגמישות טובים יותר מאשר פונקציות SQLScript, אך הן גם דורשות יותר כישורי תכנות וידע פנימי של SAP HANA.

כיצד ליצור פונקציית AFL פשוטה המחשבת את העצרת של מספר נתון. העצרת של מספר n היא מכפלה של כל המספרים השלמים החיוביים הקטנים או שווים ל-n. לדוגמה, העצרת של 5 היא 5 x 4 x 3 x 2 x 1 = 120.

כדי ליצור פונקציית AFL, עלינו לבצע את השלבים הבאים:

1. צור קובץ מקור C או C++ המגדיר את חתימת הפונקציה, פרמטרי הקלט והפלט ואת הלוגיקה של הפונקציה. חתימת הפונקציה חייבת לפעול לפי תבנית ספציפית הכוללת את שם הפונקציה, המספר והסוג של פרמטרי הקלט והפלט, וכמה מטה-נתונים כגון תיאור הפונקציה וגרסה. יש להצהיר על פרמטרי הקלט והפלט כמצביעים למבנים המכילים את סוג הנתונים, האורך והערך של כל פרמטר. הלוגיקה של הפונקציה חייבת להשתמש ב- API של SAP HANA כדי לגשת ולטפל בפרמטרי הקלט והפלט.

2. חבר את קובץ המקור לספרייה משותפת באמצעות מהדר התואם ל-SAP HANA. הספריה המשותפת חייבת לכלול את הסיומת .so ב- Linux או .dll ב- Windows. הספרייה המשותפת חייבת גם להיות ממוקמת בספרייה ספציפית בשרת SAP HANA, כגון

/usr/sap/<SID>/HDB<nr>/exe/afl או C:\Program Files\sap\hdbclient\afl.

3. רשום את הפונקציה ב-SAP HANA באמצעות המשפט CREATE FUNCTION. המשפט CREATE FUNCTION חייב לציין את שם הפונקציה, את השם והמיקום של הספרייה המשותפת ואת פרמטרי הקלט והפלט. פרמטרי הקלט והפלט חייבים להתאים לאלה שהוגדרו בקובץ המקור.

4. התקשר לפונקציה מ- SQLScript או משפות אחרות באמצעות המשפט CALL. משפט CALL חייב לעבור את פרמטרי הקלט ולקבל את פרמטרי הפלט כמשתנים.

הנה דוגמה לקובץ מקור C המגדיר פונקציית AFL בשם FACTORIAL:

#include “hana_afl.h”

AFL_FUNCTION_SIGNATURE(

FACTORIAL

)

typedef struct {

int32_t type;

int32_t length;

int32_t value;

} FACTORIAL_INPUT;

typedef struct {

int32_t type;

int32_t length;

int32_t value;

} FACTORIAL_OUTPUT;

AFL_CODE_BLOCK_BEGIN

FACTORIAL_INPUT* input = (FACTORIAL_INPUT*)inputParam[0];

FACTORIAL_OUTPUT* output = (FACTORIAL_OUTPUT*)outputParam[0];

if (input->type != DT_INT || input->length != 4) {

return AFL_INVALID_PARAMETER;

}

output->type = DT_INT;

output->length = 4;

output->value = 1;

for (int i = 1; i <= input->value; i++) {

output->value *= i;

}

return AFL_OK;

AFL_CODE_BLOCK_END

הנה דוגמה כיצד לקמפל את קובץ המקור לספריה משותפת ב- Linux:

cc -fPIC -shared -o factorial.so factorial.c -I/usr/sap/<SID>/HDB<nr>/exe/include

הנה דוגמה לאופן רישום הפונקציה ב-SAP HANA:

CREATE FUNCTION FACTORIAL (IN n INT) RETURNS m INT AS LANGUAGE AFL

LIBRARY ‘factorial’ NAME ‘FACTORIAL’;

הנה דוגמה כיצד לקרוא לפונקציה מ- SQLScript:

DO BEGIN

DECLARE v_input INT = 5;

DECLARE v_output INT;

CALL FACTORIAL(:v_input) INTO :v_output;

SELECT :v_output AS FACTORIAL FROM DUMMY;

END;

התוצאה צריכה להיות: 120

אני מקווה שהפוסט הזה בבלוג נתן לך דוגמה לשימוש ב-SAP HANA. AFL היא מסגרת חזקה וגמישה שיכולה לעזור לך ליצור ולבצע פונקציות מותאמות אישית המתאימות לצרכים העסקיים שלך. לקבלת מידע נוסף, עיין בתיעוד ובערכות הלימוד של SAP HANA.


 

 

Shacham Levi – שחם לוי Shacham Levi – שחם לוי
SAP Basis, Technical Architect, Installation, Upgrade, DB: SAP-HANA | SQL Server | Oracle | DB2, DB Migration, OS: Windows | Linux, S/4 & BW/4 Conversion, BTP, Solution Manager, SAP CPI, SAP Authorization Security, S/4HANA, BW/4HANA, BI, EP, NetWeaver, J2EE, GRC, BPC, ADS, SLD, SOLMAN, GW, Cloud, Big Data, .NET, SAP Developer, ABAP, C#, JAVA.
 

 

סייר
גרור