SAP บทช่วยสอนการเขียนสคริปต์ SQL ใน HANA: ไวยากรณ์และตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
สคริปต์ SQL ใน SAP HANA ขยายขีดความสามารถของ SQL มาตรฐานด้วยโครงสร้างเชิงฟังก์ชันและเชิงกระบวนการ ช่วยให้สามารถใช้งาน stored procedures และ user defined functions โดยย้ายตรรกะที่เกี่ยวข้องกับข้อมูลจำนวนมากจากเซิร์ฟเวอร์แอปพลิเคชันไปยังฐานข้อมูล

สคริปต์ SQL คืออะไร?
SQL Script คือชุดของส่วนขยายของ SQL สามารถใช้ในขั้นตอนการจัดเก็บแทน SQL ธรรมดาได้ จะกำหนดส่วนขยายการทำงานและขั้นตอน
In SQL ผู้ใช้สคริปต์สามารถกำหนดตัวแปรท้องถิ่นสำหรับโครงสร้างและตารางที่ใช้หลักๆ ในการสร้างกระบวนการจัดเก็บ
นอกจากนี้ยังสามารถใช้สคริปต์ SQL ในมุมมองการคำนวณได้อีกด้วย ใน SQL Script มีคอนเทนเนอร์ลอจิกสองแบบที่แตกต่างกัน
- ขั้นตอน (ขั้นตอนช่วยให้คุณสามารถอธิบายลำดับของการแปลงข้อมูลในข้อมูลที่ส่งผ่านเป็นตารางอินพุตและฐานข้อมูล)
- ฟังก์ชันที่ผู้ใช้กำหนด (คอนเทนเนอร์ฟังก์ชันที่ผู้ใช้กำหนดจะถูกแยกออกเป็นฟังก์ชันที่ผู้ใช้กำหนดแบบสเกลาร์และฟังก์ชันที่ผู้ใช้กำหนดของตาราง)
องค์ประกอบภาษาสคริปต์ SQL มีดังนี้ -
ลอจิกสคริปต์ SQL ที่ประกาศ (ส่วนขยายการทำงาน)
- อนุญาตให้กำหนดประเภทตารางโดยไม่ต้องอ้างอิงตารางฐานข้อมูล
- คำสั่งทั่วไปเช่น SELECT
- ฟังก์ชั่นเครื่องคำนวณ (CE)
⚠️ หมายเหตุเกี่ยวกับเวอร์ชัน: ตัวดำเนินการแผนการคำนวณของเอนจิน ฟังก์ชัน CE_ เช่น CE_COLUMN_TABLE และ CE_JOIN ถูกยกเลิกการใช้งานแล้ว SAPการพัฒนาใหม่ควรใช้คำสั่ง SQL มาตรฐาน ซึ่งตัวปรับแต่งประสิทธิภาพสามารถจัดการได้ดีไม่แพ้กัน โค้ด CE ที่มีอยู่ยังคงทำงานได้ แต่ควรย้ายไปใช้โค้ดใหม่เมื่อมีการเปลี่ยนแปลงขั้นตอนการทำงานครั้งต่อไป
ตรรกะสคริปต์ Orchestration SQL (ส่วนขยายการทำงาน)
ตรรกะการจัดเรียบเรียงใช้เพื่อนำโฟลว์ข้อมูลไปใช้โดยใช้คำสั่ง DDL, DML และ SQL Query และควบคุมตรรกะของโฟลว์โดยใช้โครงสร้างภาษาที่จำเป็น เช่น ลูปและเงื่อนไข
- คำชี้แจงภาษาคำจำกัดความของข้อมูล เช่น สร้างสคีมา
- ภาษาการจัดการข้อมูล (เช่นการแทรก)
ลอจิกสคริปต์ SQL ที่จำเป็น (ส่วนขยายขั้นตอน)
ตรรกะที่จำเป็นจะแยกตรรกะระหว่างกระแสข้อมูลต่างๆ เช่น IF, ELSEIF, ELSE, CASE, FOR (Loop) และข้อยกเว้น
ความสำคัญของสคริปต์ SQL
เฉพาะสคริปต์ SQL เท่านั้นที่มีองค์ประกอบที่จำเป็นในการย้ายตรรกะที่ใช้ข้อมูลจำนวนมากหรือการทำงานของเซิร์ฟเวอร์แอปพลิเคชันไปยังเซิร์ฟเวอร์ฐานข้อมูล
ประเด็นสำคัญของสคริปต์ SQL
- สคริปต์ SQL จะถูกดำเนินการและประมวลผลในกลไกการคำนวณภายในฐานข้อมูล HANA
- สคริปต์ SQL สามารถทำการคำนวณที่ซับซ้อนได้
- ใน SQL Script สามารถประกาศตัวแปรโลคัลเพื่อเก็บผลลัพธ์ชั่วคราวได้
- ขั้นตอนสคริปต์ SQL สามารถส่งคืนผลลัพธ์ได้มากขึ้นโดยใช้ "พารามิเตอร์เอาต์พุต" ในขณะที่ขั้นตอน SQL ปกติสามารถส่งคืนได้เพียงรายการเดียว
- ใน SQL Script คุณสามารถกำหนดประเภทตารางส่วนกลางหรือตารางท้องถิ่นซึ่งสามารถใช้เป็นพารามิเตอร์ได้
ด้วยการใช้สคริปต์ SQL คุณสามารถบรรลุโหมดการประมวลผลแบบขนานได้
ตัวอย่างขั้นตอนสคริปต์ 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 อ่านตัวแปรตารางในขณะที่ lt_all คำสั่ง `on the left` จะกำหนดค่าให้กับมัน คำสั่ง `READS SQL DATA` จะบอกตัวปรับแต่งประสิทธิภาพว่ากระบวนการนี้ไม่มีผลข้างเคียง ซึ่งช่วยให้สามารถใช้การประมวลผลแบบขนานได้อย่างมีประสิทธิภาพมากขึ้น และกระบวนการที่ส่งคืนพารามิเตอร์เอาต์พุตหลายตัวนั้นเป็นความสามารถที่ SQL แบบธรรมดาไม่มี
การเรียกชื่อนั้นง่ายมาก:
CALL DHK_SCHEMA.GET_HIGH_EARNERS (50000, ?, ?);
ฟังก์ชันที่ผู้ใช้กำหนดเองแบบสเกลาร์และแบบตาราง
ในขณะที่ขั้นตอนการทำงานจะทำการกระทำบางอย่าง ฟังก์ชันจะส่งคืนค่าและสามารถนำไปใช้ภายในคำสั่ง SQL ได้ สคริปต์ 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 ทำงานได้ดีเมื่อเขียนให้ระบบประมวลผลแบบขนาน และทำงานได้ไม่ดีเมื่อเขียนเหมือนโค้ดแอปพลิเคชัน หกข้อควรปฏิบัตินี้สร้างความแตกต่าง
- ควรเลือกใช้รูปแบบการประกาศมากกว่ารูปแบบคำสั่ง คำสั่งที่ใช้เซตเพียงชุดเดียวมีประสิทธิภาพเหนือกว่าลูปที่ประมวลผลทีละแถวในหลายกรณี โดยมีประสิทธิภาพมากกว่าหลายเท่า ควรใช้ลูป FOR เฉพาะเมื่อตรรกะไม่สามารถแสดงออกมาในรูปของการดำเนินการเซตได้จริงๆ เท่านั้น
- หลีกเลี่ยงการใช้เคอร์เซอร์ พวกมันบังคับให้ประมวลผลทีละแถวและทำให้กลไกการคำนวณใช้งานไม่ได้เลย แทบทุกเคอร์เซอร์สามารถเขียนใหม่เป็นคำสั่ง join หรือ aggregation ได้
- ควรแยกคำกล่าวออกจากกันอย่างชัดเจน ตัวแปรตารางสองตัวที่ไม่อ้างอิงถึงกันจะถูกคำนวณแบบขนาน การเชื่อมโยงแต่ละขั้นตอนผ่านขั้นตอนก่อนหน้าจะทำให้กระบวนการทั้งหมดทำงานแบบอนุกรม
- Declare READS SQL DATA where true. นั่นแสดงว่ากระบวนการนี้ไม่มีผลข้างเคียง ซึ่งช่วยให้สามารถปรับปรุงกระบวนการให้เหมาะสมยิ่งขึ้นได้
- ควรทำการกรองตั้งแต่เนิ่นๆ การลดจำนวนแถวในตัวแปรตารางแรกจะช่วยลดขนาดของทุกอย่างในขั้นตอนถัดไป ในขณะที่การกรองข้อมูลในตอนท้ายได้ช่วยลดต้นทุนไปแล้ว
- เลิกใช้ฟังก์ชัน CE_ แล้ว คำสั่งเหล่านั้นล้าสมัยแล้ว ไม่สามารถใช้ร่วมกับ SQL ในคำสั่งเดียวได้อย่างอิสระ และตัวเพิ่มประสิทธิภาพของ SQL ในปัจจุบันสามารถจัดการงานเดียวกันได้ดีกว่า
ไวยากรณ์ระดับคำสั่งจะกล่าวถึงใน SAP ฮาน่า SQLฟังก์ชันต่างๆ ที่มีอยู่ในขั้นตอนการทำงาน SAP ฟังก์ชัน HANA SQLและวัตถุการสร้างแบบจำลองที่ใช้กระบวนการเหล่านี้ใน SAP การสร้างแบบจำลอง HANA เกี่ยวกับการสอน
