SAP Підручник зі скриптів HANA SQL: синтаксис та приклади

⚡ Розумний підсумок

SQL-скрипт у SAP HANA розширює стандартний SQL функціональними та процедурними конструкціями. Вона забезпечує збережені процедури та користувацькі функції, переносячи логіку, що вимагає інтенсивної обробки даних, із сервера застосунків у базу даних.

  • 🧩 Основне визначення: Набір розширень SQL, що використовуються всередині збережених процедур замість простих SQL-інструкцій.
  • 📦 Два контейнери: Процедури описують послідовність перетворень; визначені користувачем функції бувають скалярними та табличними.
  • 🧠 Декларативна логіка: Визначає типи таблиць без посилання на таблиці бази даних та виконує звичайні оператори SELECT.
  • 🎼 Логіка оркестрації: Реалізує потік даних за допомогою DDL, DML та операторів запитів, а також циклів та умовних операторів.
  • 🔀 Імперативна логіка: Цикли IF, ELSEIF, ELSE, CASE, FOR та обробка винятків розділяють логіку між потоками даних.
  • 📤 Кілька виходів: Процедура SQL-скрипту повертає кілька результатів через параметри OUTPUT, на відміну від простої SQL-процедури.
  • ⚡ Паралельне виконання: Незалежні оператори виконуються паралельно обчислювальним механізмом.

SQL-скрипт у SAP ХАНА

Що таке SQL Script?

SQL Script — це набір розширень SQL. Його можна використовувати в збереженій процедурі замість звичайного SQL. Він визначає функціональні та процедурні розширення.

In SQL Користувач сценарію може визначати локальні змінні для структури та таблиць, які в основному використовуються для створення збереженої процедури.

Сценарій SQL також можна використовувати в режимі обчислення. У SQL Script є два різних логічних контейнера -

  • Процедура (Процедури дозволяють описати послідовність перетворень даних щодо даних, що передаються як вхідні дані та таблиці бази даних).
  • Функція, визначена користувачем (контейнер функції, визначеної користувачем, розділений на скалярну функцію, визначену користувачем, і функцію таблиці, визначену користувачем).

Елементи SQL Script Language:

Логіка декларативного сценарію SQL (функціональне розширення)

  • Це дозволяє визначати типи таблиць без посилань на таблиці бази даних.
  • Типовий оператор, як SELECT.
  • Функції механізму обчислення (CE).

⚠️ Примітка до версії: Оператори плану обчислювального механізму, функції CE_, такі як CE_COLUMN_TABLE та CE_JOIN, є застарілими SAPНові розробки повинні використовувати стандартні SQL-запитувачі, які оптимізатор обробляє щонайменше так само добре. Існуючий CE-код все ще працює, але його слід перенести під час наступної зміни процедури.

Оркестровка SQL Script Logic (функціональне розширення)

Логіка оркестровки використовується для реалізації потоку даних за допомогою інструкцій запитів DDL, DML і SQL і керування логікою потоку за допомогою імперативних мовних конструкцій, таких як цикли та умови.

  • Заява мови визначення даних. Наприклад, створити схему.
  • Мова маніпулювання даними (наприклад, вставка).

Імперативна логіка сценарію SQL (процедурне розширення)

Імперативна логіка розділяє логіку між кількома потоками даних. Наприклад, IF, ELSEIF, ELSE, CASE, FOR (цикл) і винятки.

Важливість SQL Script

Лише SQL Script надає необхідні елементи для перенесення логіки, що потребує великих даних, або роботи сервера додатків на сервер бази даних.

Ключові моменти SQL Script

  • Сценарій SQL виконується та обробляється в системі обчислень у базі даних HANA.
  • SQL Script здатний виконувати складні обчислення.
  • У SQL Script локальна змінна може бути оголошена для зберігання проміжного результату.
  • Процедура сценарію SQL може повернути більше результатів за допомогою «ВИВІДНОГО параметра», тоді як звичайна процедура SQL може повернути лише один.
  • У SQL Script ви можете визначити глобальні або локальні типи таблиць, які можна використовувати як параметри.

Використовуючи SQL Script, можна досягти режиму паралельної обробки.

Приклад процедури SQL-скрипту

Процедура є найпоширенішим контейнером. У наведеному нижче прикладі зчитуються дані співробітників, фільтруються та повертається результат через параметр вихідної таблиці.

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;

Варто зазначити три домовленості. Двокрапка ставиться перед будь-яким зчитуванням змінної, тому :lt_all зчитує табличну змінну під час все_всі ліворуч присвоює йому значення. READS SQL DATA повідомляє оптимізатору, що процедура не має побічних ефектів, що дозволяє більш агресивне розпаралелювання. А процедура, яка повертає кілька вихідних параметрів, — це саме та можливість, якої бракує простому SQL.

Викликати це просто:

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

Скалярні та табличні функції, визначені користувачем

Там, де процедура виконує дії, функція повертає значення та може бути використана всередині запиту. SQL-скрипт пропонує дві форми, і вони не є взаємозамінними.

Параметр Скалярна UDF Таблиця UDF
Повернення Одне значення Набір результатів
Використовується в Список SELECT, речення WHERE, вирази Речення FROM, як таблиця
Можна змінювати дані Немає Немає
Типове використання Повторно використовуваний розрахунок, такий як ставка податку Параметризоване представлення, що повертає відфільтровані рядки
-- 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;

Таблична функція визначається за допомогою RETURNS TABLE, а потім запитується в реченні FROM, що робить її природним способом створення багаторазово використовуваного, параметризованого набору даних, який перегляд розрахунку або звіт може споживати.

Найкращі практики роботи зі скриптами SQL

SQL-скрипти добре працюють, коли вони написані так, щоб механізм міг працювати паралельно, і погано, коли вони написані як код програми. Шість звичок мають вирішальне значення.

  1. Віддавайте перевагу декларативному способу над імперативним. Оператор на основі одного набору перевершує цикл, який обробляє рядки по одному, часто на порядки. Звертайтеся до циклу FOR лише тоді, коли логіку дійсно неможливо виразити як операцію з наборами.
  2. Уникайте курсорів. Вони змушують обробляти дані по рядках і повністю руйнують обчислювальний механізм. Майже кожен курсор можна переписати як об'єднання або агрегацію.
  3. Зберігайте твердження незалежними. Дві табличні змінні, які не посилаються одна на одну, обчислюються паралельно. Поєднання кожного кроку з попереднім серіалізує всю процедуру.
  4. Оголосити ЧИТАННЯ ДАНИХ SQL, де воно є true. Це сигналізує про відсутність побічних ефектів у процедури, що дозволяє її більшу оптимізацію.
  5. Фільтруйте якомога раніше. Зменшення кількості рядків у першій змінній таблиці зменшує все нижче за течією, тоді як фільтрація в кінці вже окупила свою ціну.
  6. Міграція з функцій CE_. Вони застаріли, їх не можна вільно поєднувати з SQL в одному операторі, а оптимізатор SQL тепер краще справляється з тією ж роботою.

Синтаксис рівня операторів розглядається в SAP HANA SQL, функції, доступні всередині процедури в SAP Функції HANA SQL, та об'єкти моделювання, які споживають ці процедури в SAP Моделювання HANA навчальний посібник.

Поширені запитання

Двокрапка позначає зчитування змінної. Запис без двокрапки ліворуч присвоює їй значення, тому ці дві форми дозволяють синтаксичному аналізатору розрізняти присвоєння та посилання.

Ні. Оператори плану обчислювального механізму застаріли. Існуючий код продовжує виконуватися, але нові розробки повинні використовувати стандартний SQL, який оптимізатор тепер обробляє щонайменше так само добре.

Часто так. Багато циклів FOR та курсорів виражають об'єднання або агрегацію, записану довгим способом, і штучний інтелект може запропонувати еквівалент на основі множин. Переконайтеся, що кількість рядків збігається, перш ніж використовувати його.

Так. Читання плануViz tracтобто, ШІ визначає оператор, який споживає час, та чи були кроки серіалізовані через непотрібну залежність між змінними таблиці.

Так, через кілька параметрів таблиці OUTPUT. Це одна з головних переваг SQL-скрипту над простою SQL-процедурою, яка може повернути лише один результат.

Підсумуйте цей пост за допомогою: