SAP HANA SQL szkript oktatóanyag: Szintaxis és példák

⚡ Okos összefoglaló

SQL szkript SAP A HANA kiterjeszti a standard SQL-t funkcionális és procedurális konstrukciókkal. Tárolt eljárásokat és felhasználó által definiált függvényeket működtet, adatintenzív logikát helyezve át az alkalmazáskiszolgálóról az adatbázisba.

  • 🧩 Alapvető definíció: SQL-kiterjesztések gyűjteménye, amelyeket tárolt eljárásokon belül használnak egyszerű SQL-utasítások helyett.
  • 📦 Két konténer: Az eljárások transzformációk sorozatát írják le; a felhasználó által definiált függvények skaláris és táblázatos formában léteznek.
  • 🧠 Deklaratív logika: Táblatípusokat definiál adatbázistáblákra való hivatkozás nélkül, és szokásos SELECT utasításokat ad ki.
  • 🎼 Vezérelt logika: Adatfolyamatot valósít meg DDL, DML és lekérdezési utasításokkal, valamint ciklusokkal és feltételes utasításokkal.
  • 🔀 Felszólító logika: IF, ELSEIF, ELSE, CASE, FOR ciklusok és kivételkezelés az adatfolyamatok közötti megosztott logikával.
  • 📤 Több kimenet: Egy SQL Script eljárás több eredményt ad vissza OUTPUT paramétereken keresztül, ellentétben egy sima SQL eljárással.
  • Párhuzamos végrehajtás: A független utasításokat a számítási motor párhuzamosan hajtja végre.

SQL szkript SAP HANNA

Mi az SQL Script?

Az SQL Script az SQL kiterjesztéseinek gyűjteménye. Tárolt eljárásban használható a sima SQL helyett. Ez határozza meg a funkcionális és eljárási kiterjesztéseket.

In SQL A Script felhasználó helyi változókat definiálhat a struktúrához és a táblákhoz, amelyeket elsősorban a tárolt eljárások létrehozására használnak.

Az SQL-szkript számítási nézetben is használható. Az SQL Scriptben két különböző logikai konténer található:

  • Eljárás (Az Eljárások segítségével leírhatja az adatátalakítások sorozatát a bemeneti és adatbázistáblázatként átadott adatokon).
  • Felhasználó által definiált függvény (A Felhasználó által meghatározott függvény tároló skaláris, felhasználó által meghatározott függvényre és táblázatos, felhasználó által meghatározott függvényre van felosztva).

Az SQL Script Language elemei az alábbiak:

Deklaratív SQL-szkript logika (funkcionális kiterjesztés)

  • Lehetővé teszi a táblatípusok meghatározását adatbázistáblákra való hivatkozás nélkül.
  • Tipikus kijelentés, mint a SELECT.
  • Számítási motor (CE) funkciói.

⚠️ Verzió megjegyzés: A Calculation Engine tervoperátorai, a CE_ függvények, mint például a CE_COLUMN_TABLE és a CE_JOIN, elavultak a következő miatt: SAPAz új fejlesztéseknek szabványos SQL utasításokat kell használniuk, amelyeket az optimalizáló legalább olyan jól kezel. A meglévő CE kód továbbra is fut, de migrálni kell, amikor egy eljárás legközelebb módosul.

Orchestrációs SQL Script Logic (funkcionális kiterjesztés)

Az összehangolási logika az adatfolyam megvalósítására szolgál DDL, DML és SQL lekérdezési utasítások használatával, valamint a vezérlőfolyamat logikája kötelező nyelvi konstrukciók, például hurkok és feltételes konstrukciók használatával.

  • Adatdefiníciós nyelvi nyilatkozat. Pl. Séma létrehozása.
  • Adatkezelési nyelv (Pl. Insert).

Kötelező SQL-szkript logika (eljárási kiterjesztés)

Az imperatív logika felosztja a logikát több adatfolyam között. Pl. IF, ELSEIF, ELSE, CASE, FOR (Loop) és Exceptions.

Az SQL Script jelentősége

Csak az SQL Script biztosítja a szükséges elemeket az adatigényes logika vagy az alkalmazáskiszolgáló működésének áttelepítéséhez az adatbázis-kiszolgálóra.

Az SQL Script kulcspontjai

  • Az SQL Script végrehajtása és feldolgozása a HANA adatbázison belüli számítási motorban történik.
  • Az SQL Script képes összetett számítások elvégzésére.
  • Az SQL Scriptben egy helyi változó deklarálható az időközi eredmény tárolására.
  • Az SQL Script Procedure több eredményt tud visszaadni az „OUTPUT Parameter” használatával, míg a Normal SQL Procedure csak egyet tud visszaadni.
  • Az SQL Scriptben megadhat globális vagy helyi táblatípusokat, amelyek paraméterként használhatók.

SQL Script használatával párhuzamos feldolgozási mód érhető el.

SQL szkript eljárás példa

Az eljárás a leggyakoribb tároló. Az alábbi példa beolvassa az alkalmazottak adatait, szűri azokat, és egy kimeneti tábla paraméteren keresztül adja vissza az eredményt.

CREATE PROCEDURE DHK_SCHEMA.GET_HIGH_EARNERS (
  IN  im_min_salary DECIMAL(15,2),
  OUT ex_employees  TABLE (EMP_NAME NVARCHAR(100), SALARY DECIMAL(15,2)),
  OUT ex_row_count  INTEGER
)
LANGUAGE SQLSCRIPT
READS SQL DATA
AS
BEGIN
  -- Declarative logic: a table variable, not a physical table
  lt_all = SELECT EMP_NAME, SALARY
             FROM DHK_SCHEMA.EMPLOYEE
            WHERE SALARY >= :im_min_salary;

  -- Imperative logic: branch on the result
  SELECT COUNT(*) INTO ex_row_count FROM :lt_all;

  IF :ex_row_count = 0 THEN
    ex_employees = SELECT '' AS EMP_NAME, 0 AS SALARY FROM DUMMY WHERE 1 = 0;
  ELSE
    ex_employees = SELECT * FROM :lt_all ORDER BY SALARY DESC;
  END IF;
END;

Három konvenciót érdemes megjegyezni. A változók beolvasása előtt kettőspont áll, tehát :lt_all beolvassa a táblaváltozót, miközben lt_all a bal oldalon hozzárendeli. A READS SQL DATA jelzi az optimalizálónak, hogy az eljárásnak nincsenek mellékhatásai, ami agresszívabb párhuzamosítást tesz lehetővé. És egy több kimeneti paramétert visszaadó eljárás pontosan az a képesség, amivel a sima SQL nem rendelkezik.

A hívása pofonegyszerű:

CALL DHK_SCHEMA.GET_HIGH_EARNERS (50000, ?, ?);

Skaláris és táblázatos felhasználó által definiált függvények

Amikor egy eljárás műveleteket hajt végre, egy függvény egy értéket ad vissza, és felhasználható egy lekérdezésen belül. Az SQL Script kétféle formát kínál, és ezek nem felcserélhetők.

Vizsgált paraméter Skaláris UDF Tábla UDF
Visszatér Egyetlen érték Egy eredményhalmaz
Használt SELECT lista, WHERE záradék, kifejezések A FROM záradék, mint egy táblázat
Módosíthatja az adatokat Nem Nem
Tipikus felhasználás Újrafelhasználható számítás, például adókulcs Paraméterezett nézet, amely szűrt sorokat ad vissza
-- Scalar function: returns one value
CREATE FUNCTION DHK_SCHEMA.ADD_BONUS (im_salary DECIMAL(15,2))
  RETURNS total DECIMAL(15,2)
  LANGUAGE SQLSCRIPT AS
BEGIN
  total := :im_salary * 1.10;
END;

SELECT EMP_NAME, DHK_SCHEMA.ADD_BONUS(SALARY) AS WITH_BONUS
  FROM DHK_SCHEMA.EMPLOYEE;

Egy táblafüggvényt a RETURNS TABLE paraméterrel definiálunk, majd a FROM záradékban kérdezünk le, ami természetes módon teszi lehetővé egy újrafelhasználható, paraméterezett adathalmaz létrehozását, amelyet egy számítási nézet vagy a jelentés felhasználhatja.

SQL szkriptek bevált gyakorlatai

Az SQL szkriptek jól teljesítenek, ha úgy írják őket, hogy a motor párhuzamosítson, és rosszul, ha alkalmazáskódként írják őket. Hat szokás teszi a különbséget.

  1. A kijelentőt részesítsd előnyben a felszólítóval szemben. Egyetlen halmaz alapú utasítás teljesítménye felülmúlja azt a ciklust, amely egyszerre csak egy sort dolgoz fel, gyakran nagyságrendekkel. FOR ciklust csak akkor használjunk, ha a logika valóban nem fejezhető ki halmazműveletként.
  2. Kerüld a kurzorokat. Soronkénti feldolgozást kényszerítenek ki, és teljesen megbénítják a számítási motort. Szinte minden kurzor átírható illesztésként vagy aggregációként.
  3. Tartsa a kijelentéseket függetleneknek. Két, egymásra nem hivatkozó táblaváltozó párhuzamosan kerül kiszámításra. Az összes lépésnek az előzőn keresztüli láncolása szerializálja az egész eljárást.
  4. Deklarálja az SQL DATA olvasása parancsot, ha az igaz. Ez azt jelzi, hogy az eljárásnak nincsenek mellékhatásai, ami további optimalizálást tesz lehetővé.
  5. Szűrd le a lehető leghamarabb. Az első táblaváltozó sorszámának csökkentése a további változókat is összezsugorítja, míg a végén történő szűrés már kifizette a költséget.
  6. Migrálás a CE_ függvényekről. Ezek elavultak, nem keverhetők szabadon SQL-lel egyetlen utasításban, és az SQL optimalizáló most már jobban kezeli ugyanezt a feladatot.

Az utasításszintű szintaxist a következő tárgyalja: SAP HANA SQL, az eljáráson belül elérhető függvények SAP HANA SQL függvények, és a modellezési objektumok, amelyek ezeket az eljárásokat felhasználják a SAP HANA modellezés tutorial.

GYIK

A kettőspont a változó beolvasását jelöli. Ha kettőspont nélkül írjuk balra, akkor hozzárendeljük az értéket, így a két forma lehetővé teszi az elemző számára, hogy megkülönböztesse az értékadást a hivatkozástól.

Nem. A Calculation Engine tervoperátorai elavultak. A meglévő kód továbbra is fut, de az új fejlesztéseknek szabványos SQL-t kell használniuk, amelyet az optimalizáló most már legalább olyan jól kezel.

Gyakran igen. Sok FOR ciklus és kurzor egy hosszú úton írt join-t vagy aggregációt fejez ki, és a mesterséges intelligencia fel tudja ajánlani a halmaz alapú megfelelőjét. Ellenőrizd, hogy a sorok száma megegyezik-e, mielőtt elfogadnád.

Igen. A terv olvasásaViz trace., a mesterséges intelligencia azonosítja az időt fogyasztó utasítást, és azt, hogy a lépéseket szerializálták-e a táblaváltozók közötti szükségtelen függőség.

Igen, számos OUTPUT táblaparaméteren keresztül. Ez az SQL Script egyik fő előnye egy egyszerű SQL eljárással szemben, amely csak egyetlen eredményt tud visszaadni.

Foglald össze ezt a bejegyzést a következőképpen: