หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
Important
คุณลักษณะนี้อยู่ในตัวอย่าง
ใน Fabric คลังข้อมูล นักพัฒนา T-SQL สามารถเรียกใช้ฟังก์ชันข้อมูลผู้ใช้ Fabric จากคําสั่ง T-SQL ได้ ฟังก์ชันพร็อกซี T-SQL ในคลังข้อมูลจะเรียกใช้ฟังก์ชัน Python ที่อ้างอิงในรายการฟังก์ชันข้อมูลผู้ใช้ที่เผยแพร่
ใช้การผสานรวมนี้เพื่อขยาย T-SQL ด้วยตรรกะ Python ที่นํากลับมาใช้ใหม่ได้สําหรับสถานการณ์เช่น:
- ใช้แพ็กเกจ PyPI เฉพาะสําหรับงานเชิงพื้นที่ ตัวเลข หรือวิทยาศาสตร์ข้อมูล
- การนําตรรกะธุรกิจแบบกําหนดเองมาใช้ใน Python
- การเรียกใช้ API ภายนอก
- การโต้ตอบกับรายการ Fabric และบริการ Azure อื่น ๆ เช่น คลังสินค้า บ้านพักริมทะเลสาบ ฐานข้อมูล SQL หรือ Cosmos DB
บทความนี้แสดงวิธีการอ้างอิงฟังก์ชันข้อมูลผู้ใช้ที่เผยแพร่จาก Fabric คลังข้อมูล และใช้ในคําสั่ง T-SQL
ข้อกําหนดเบื้องต้น
ในการใช้ฟังก์ชันข้อมูลผู้ใช้จาก Fabric คลังข้อมูล คุณต้องมี:
คลังสินค้าผ้า
รายการฟังก์ชันข้อมูลผู้ใช้ที่เผยแพร่ซึ่งมีฟังก์ชัน Python ที่คุณต้องการเรียกใช้
การเข้าถึงข้อมูลผู้ใช้ ฟังก์ชัน และสิทธิ์ในการเรียกใช้ฟังก์ชันที่เผยแพร่
สิทธิ์ในการสร้างฟังก์ชันในคลังสินค้าเป้าหมาย
ฟังก์ชัน Python ที่ปฏิบัติตามโมเดลการเขียนโปรแกรมฟังก์ชันข้อมูลผู้ใช้ สําหรับข้อกําหนดไวยากรณ์ ประเภทอินพุตและเอาต์พุตที่รองรับ และการใช้งานของตัวตกแต่ง ดูภาพรวมโมเดลโปรแกรมฟังก์ชันข้อมูลผู้ใช้ Fabric
หากคุณต้องการสร้างรายการฟังก์ชันข้อมูลผู้ใช้ใหม่ คุณก็ต้องมีความจุ Fabric ในภูมิภาคที่รองรับ และพื้นที่ทํางาน Fabric ที่กําหนดให้กับความจุนั้นด้วย สําหรับรายละเอียด ดูที่ สร้างรายการฟังก์ชันข้อมูลผู้ใช้ใน Fabric and Service รายละเอียดและข้อจํากัดของฟังก์ชันข้อมูลผู้ใช้ Fabric
สร้างและเผยแพร่ฟังก์ชันข้อมูลผู้ใช้
ก่อนที่คุณจะเรียกใช้ฟังก์ชันข้อมูลผู้ใช้จากคลังข้อมูล ให้สร้างและเผยแพร่ฟังก์ชันนั้นในรายการฟังก์ชันข้อมูลผู้ใช้ สําหรับขั้นตอนทั้งหมดและตัวอย่างฟังก์ชัน Python ดูที่ สร้างรายการฟังก์ชันข้อมูลผู้ใช้ใน Fabric
ฟังก์ชันข้อมูลผู้ใช้ Python ที่คุณสามารถสร้างได้จะแสดงในตัวอย่างต่อไปนี้:
import fabric.functions as fn
udf = fn.UserDataFunctions()
@udf.function()
def hello_fabric(name: str) -> str:
# Your function logic here
return name
คุณใช้ชื่อฟังก์ชัน user data เพื่อผูกฟังก์ชันพร็อกซี T-SQL กับฟังก์ชัน Python
สร้างฟังก์ชันพร็อกซี T-SQL
สร้างฟังก์ชัน T-SQL ในคลังข้อมูลของคุณและผูกกับฟังก์ชัน Python ที่เผยแพร่โดยใช้ AS EXTERNAL FUNCTION clause
CREATE OR ALTER FUNCTION dbo.hello_fabric
AS EXTERNAL FUNCTION FunctionSetName.hello_fabric;
แทนที่FunctionSetNameด้วยชื่อของฟังก์ชันข้อมูลผู้ใช้ของคุณ และแทนที่hello_fabricด้วยชื่อของฟังก์ชัน Python ที่เผยแพร่
Tip
คุณสามารถสร้างโค้ดเรียกใช้งานจากประสบการณ์ฟังก์ชันข้อมูลผู้ใช้และใช้เป็นจุดเริ่มต้นสําหรับฟังก์ชันพร็อกซีคลังสินค้า
โดยค่าเริ่มต้น คําสั่ง CREATE FUNCTION จะอนุมานรายการพารามิเตอร์และประเภทที่ส่งกลับจากคํานิยามของ Remote Fabric User Data Function (UDF) คุณสามารถแทนที่ประเภทการคืนค่าที่อนุมานได้โดยระบุอย่างชัดเจนในนิยามฟังก์ชัน การระบุประเภทการคืนค่ามีประโยชน์เมื่อคุณต้องการเปิดเผยชนิดการคืนค่าที่แม่นยํากว่าชนิดที่สรุปได้จากเมตาดาต้าฟังก์ชันระยะไกล
CREATE OR ALTER FUNCTION dbo.hello_fabric
RETURNS VARCHAR(100)
AS EXTERNAL FUNCTION FunctionSetName.hello_fabric;
ตัวอย่างเช่น ค่าที่คืนค่าใน Python str มักจะถูกอนุมานเป็น VARCHAR(MAX)แต่ถ้าฟังก์ชันคืนค่าที่มีความยาวสูงสุดที่ทราบเสมอ คุณสามารถกําหนดประเภทVARCHAR(100)คืนค่าเป็นหรือความยาวที่เหมาะสมอื่น ๆ เพื่อให้ข้อมูลเมตาและประเภทข้อมูลแม่นยํายิ่งขึ้น
ใช้ฟังก์ชันพร็อกซีในคําสั่ง T-SQL
หลังจากสร้างฟังก์ชันพร็อกซีแล้ว ให้เรียกใช้จาก T-SQL เหมือนฟังก์ชันที่ผู้ใช้กําหนดเองอื่น ๆ
ใช้ฟังก์ชันพร็อกซีในนิพจน์คําสั่ง เช่น:
-
SELECTรายการ -
WHEREข้อกําหนด -
GROUP BYข้อกําหนด - การแสดงออกและ
UPDATEINSERTข้อความ
รูปแบบต่อไปนี้แสดงวิธีการเรียกฟังก์ชันพร็อกซีจากคําสั่งค้นหา:
SELECT dbo.<proxy_function_name>(<arguments>) AS function_result;
สําหรับรูปแบบ Python ขั้นสูง ประเภทที่รองรับ การเชื่อมต่อ และวัตถุบริบท ดูภาพรวมโมเดลโปรแกรมฟังก์ชันข้อมูลผู้ใช้ Fabric
กําหนดค่าการทํางานในโหมดแบตช์
Fabric คลังข้อมูล สามารถรันฟังก์ชันข้อมูลผู้ใช้ภายนอกในโหมดแบตช์ได้
การทํางานในโหมดแบตช์จะส่งการเรียกใช้งานฟังก์ชันหลายรายการในคําขอเดียวไปยังบริการ Fabric User Data Function (UDF) ระยะไกล ช่วยลดภาระเครือข่ายและความหน่วงของคําขอ ชุดงานหนึ่งสามารถบรรจุการเรียกใช้ฟังก์ชันได้สูงสุด 900 รายการ
โหมดแบตช์มักใช้เมื่อฟังก์ชันเดียวกันถูกนําไปใช้กับค่าจากคอลัมน์ตารางหนึ่งหรือมากกว่า ทําให้โปรเซสเซอร์คําค้นสามารถประเมินหลายแถวในการเรียกระยะไกลครั้งเดียวแทนที่จะส่งคําขอแยกสําหรับแต่ละแถว วิธีนี้สามารถปรับปรุงประสิทธิภาพการสืบค้นได้อย่างมาก โดยเฉพาะสําหรับชุดข้อมูลขนาดใหญ่และการเรียกใช้ฟังก์ชันภายนอกที่มีความหน่วงสูง
ตัวอย่างเช่น เมื่อคําสั่งค้นหาใช้ฟังก์ชันข้อมูลผู้ใช้กับทุกค่าในคอลัมน์ Fabric คลังข้อมูล สามารถจัดกลุ่มค่าที่นําเข้าเป็นชุดและส่งรวมกันเพื่อประมวลผลระยะไกล บริการระยะไกลจะส่งผลลัพธ์ชุดที่สอดคล้องกัน ซึ่งจะถูกรวมเข้ากับกระบวนการประมวลผลคําสั่ง
วิธีเปิดใช้งานโหมดแบตช์สําหรับฟังก์ชันข้อมูลผู้ใช้:
- เปิดรายการฟังก์ชันข้อมูลผู้ใช้
- ไปที่การตั้งค่าการจัดการ>ห้องสมุด
- เปิดใช้งานฟีเจอร์ดูตัวอย่าง
ตั้งค่า max_batch_size=900 ในตัว @udf.function() ตกแต่งให้คลังสินค้าสามารถส่งแถวอินพุตได้สูงสุด 900 แถวในแต่ละการเรียกใช้:
Note
อาร์กิวเมนต์นี้จะ max_batch_size ใช้งานได้เฉพาะเมื่อเปิดใช้งานการแสดงตัวอย่างโหมดแบตช์เท่านั้น
import fabric.functions as fn
udf = fn.UserDataFunctions()
@udf.function(max_batch_size=900)
def normalizeText(value: str) -> str:
return value.strip().lower()
หลังจากที่คุณสร้างฟังก์ชันพร็อกซี T-SQL ที่อ้างอิงฟังก์ชันข้อมูลผู้ใช้ที่เปิดใช้งานแบบแบตช์ (UDF) Fabric คลังข้อมูล จะตรวจจับการกําหนดค่าแบตช์โดยอัตโนมัติ รวมถึงขนาดแบตช์สูงสุดที่กําหนดโดยฟังก์ชันระยะไกล เมื่อรูปแบบคําสั่งรองรับการเป็นกลุ่ม ตัวประมวลผลคําสั่งจะจัดกลุ่มการเรียกฟังก์ชันหลายรายการเป็นชุดและส่งไปยังบริการระยะไกลเพื่อดําเนินการแทนการส่งคําขอแยกสําหรับแต่ละแถว
แสดงฟังก์ชันข้อมูลผู้ใช้ในคลังสินค้า
ฟังก์ชันข้อมูลผู้ใช้ที่คุณสร้างด้วยAS EXTERNAL FUNCTIONจะปรากฏในsys.objectsประเภทวัตถุXF
หากต้องการแสดงฟังก์ชันข้อมูลผู้ใช้ในคลังข้อมูล ให้กรอง sys.objects ด้วย type = 'XF'.
SELECT SCHEMA_NAME(schema_id) AS schema_name, name, object_id, type, type_desc
FROM sys.objects
WHERE type = 'XF';
เพื่อแสดงรายการฟังก์ชันสเกลาร์ปกติ (FN) และฟังก์ชันข้อมูลผู้ใช้ (XF) พร้อมกับลายเซ็นพารามิเตอร์และชนิดการส่งกลับ ให้ใช้ sys.parameters และ sys.types:
WITH metadata AS
(
SELECT o.schema_id, o.object_id, o.name, p.parameter_id, p.name AS parameter_name, t.name AS type_name
FROM sys.objects AS o
INNER JOIN sys.parameters AS p
ON p.object_id = o.object_id
INNER JOIN sys.types AS t
ON t.user_type_id = p.user_type_id
WHERE o.type IN ('FN', 'XF')
),
signature AS
(
SELECT SCHEMA_NAME(schema_id) AS schema_name,
name,
ANY_VALUE(
CASE WHEN parameter_id = 0 THEN type_name END
) AS return_type,
CONCAT(
SCHEMA_NAME(schema_id),
'.',
name,
'(',
STRING_AGG(
CASE
WHEN parameter_id > 0
THEN CONCAT(parameter_name, ' ', type_name)
END,
', '
) WITHIN GROUP (ORDER BY parameter_id),
') -> ',
MAX(CASE WHEN parameter_id = 0 THEN type_name END)
) AS signature
FROM metadata
GROUP BY schema_id, object_id, name
)
SELECT *
FROM signature;
หมายเหตุ
- ฟังก์ชันพร็อกซี T-SQL ขึ้นอยู่กับรายการฟังก์ชันข้อมูลผู้ใช้ที่เผยแพร่และชื่อฟังก์ชัน หากคุณเปลี่ยนชื่อหรือลบฟังก์ชัน Python ให้อัปเดตฟังก์ชันพร็อกซีคลังสินค้าตามนั้น
- โมเดลการเขียนโปรแกรมฟังก์ชันข้อมูลผู้ใช้กําหนดประเภทอินพุตและเอาต์พุตที่รองรับ ตรวจสอบว่าพารามิเตอร์ Python และคําอธิบายประกอบที่ส่งกลับรองรับค่าที่คําสั่ง T-SQL ของคุณผ่าน
- ฟังก์ชันข้อมูลผู้ใช้มีขีดจํากัดของขนาดภาระงานคําขอ, เวลาหมดอายุในการดําเนินการ, ขนาดการตอบสนอง, ขนาดไลบรารี และการเก็บบันทึก สําหรับขีดจํากัดปัจจุบัน โปรดดูรายละเอียดบริการและข้อจํากัดของฟังก์ชันข้อมูลผู้ใช้ Fabric
- ชื่อพารามิเตอร์ต้องใช้ camelCase และต้องมีคําอธิบายประเภท ฟังก์ชันที่ตกแต่งด้วย
@udf.function()ต้องระบุประเภทการคืนค่าด้วย สําหรับกฎไวยากรณ์ฉบับสมบูรณ์ ดูภาพรวมโมเดลการเขียนโปรแกรมฟังก์ชันข้อมูลผู้ใช้ Fabric - สําหรับฟังก์ชันแปลงข้อความในตัวที่ไม่ต้องใช้โค้ด Python แบบกําหนดเอง ดูที่ ใช้ฟังก์ชัน AI (ตัวอย่าง)
- ฟังก์ชันข้อมูลผู้ใช้มีขีดจํากัดของขนาดภาระงานคําขอ, เวลาหมดอายุในการดําเนินการ, ขนาดการตอบสนอง, ขนาดไลบรารี และการเก็บบันทึก สําหรับขีดจํากัดปัจจุบัน โปรดดูรายละเอียดบริการและข้อจํากัดของฟังก์ชันข้อมูลผู้ใช้ Fabric
- ชื่อพารามิเตอร์ต้องใช้ camelCase และต้องมีคําอธิบายประเภท ฟังก์ชันที่ตกแต่งด้วย
@udf.function()ต้องระบุประเภทการคืนค่าด้วย สําหรับกฎไวยากรณ์ฉบับสมบูรณ์ ดูภาพรวมโมเดลการเขียนโปรแกรมฟังก์ชันข้อมูลผู้ใช้ Fabric - สําหรับฟังก์ชันแปลงข้อความในตัวที่ไม่ต้องใช้โค้ด Python แบบกําหนดเอง ดูที่ ใช้ฟังก์ชัน AI (ตัวอย่าง)
ตัวอย่าง
สถานการณ์ต่อไปนี้แสดงวิธีการทั่วไปในการขยาย Fabric คลังข้อมูล ด้วยฟังก์ชันข้อมูลผู้ใช้
ตอบ ขยาย T-SQL ด้วยการแยกวิเคราะห์ที่อยู่ IP
ใช้ฟังก์ชันข้อมูลผู้ใช้ Python เมื่อการค้นหาคลังข้อมูลของคุณต้องการฟังก์ชันที่ไม่มีในฟังก์ชัน T-SQL ที่มีอยู่ในตัว ตัวอย่างเช่น คุณสามารถใช้แพ็กเกจที่อยู่ IP เพื่อคืนค่าซับเน็ตสําหรับที่อยู่ IP คุณสามารถใช้ฟังก์ชันนี้เป็นชุดเมื่อคําสั่งค้นหาประมวลผลที่อยู่ IP จากหลายแถว สําหรับขั้นตอนการกําหนดค่า ดูที่ กําหนดค่าโหมดแบตช์
Note
หากฟังก์ชันใช้แพ็กเกจที่ไม่ได้เป็นส่วนหนึ่งของไลบรารีมาตรฐาน Python ให้เพิ่มแพ็กเกจในการจัดการไลบรารีก่อนที่จะเผยแพร่ฟังก์ชันข้อมูลผู้ใช้ ตัวอย่างนี้ใช้แพ็กเกจnetaddr
กําหนดและเผยแพร่ฟังก์ชัน Python ในรายการฟังก์ชันข้อมูลผู้ใช้:
from netaddr import IPNetwork
import fabric.functions as fn
udf = fn.UserDataFunctions()
@udf.function(max_batch_size=900)
def ipSubnet(ipAddress: str, prefixLength: int = 24) -> str:
return str(IPNetwork(f"{ipAddress}/{prefixLength}").cidr)
สร้างฟังก์ชันพร็อกซี T-SQL ในคลังข้อมูลที่อ้างอิงฟังก์ชัน Python ที่เผยแพร่:
CREATE OR ALTER FUNCTION dbo.ip_subnet
AS EXTERNAL FUNCTION inet.ipSubnet;
เรียกใช้ฟังก์ชันพร็อกซีจากคําสั่งคลังสินค้า:
SELECT dbo.ip_subnet('192.168.1.25', 24) AS subnet;
ผลลัพธ์ที่คาดหวัง:192.168.1.0/24
B. เรียกใช้ API สาธารณะภายนอก
ใช้ฟังก์ชันข้อมูลผู้ใช้เมื่อการสืบค้นคลังข้อมูลจําเป็นต้องเรียกใช้ API ภายนอกเป็นส่วนหนึ่งของเวิร์กโฟลว์การเพิ่มความเข้มข้นของข้อมูล
ใน SQL database in Fabric, Azure SQL Database และ Azure SQL Managed Instance sys.sp_invoke_external_rest_endpoint จะเรียกใช้ HTTPS REST endpoint ใน Fabric คลังข้อมูล ฟังก์ชันข้อมูลผู้ใช้สามารถสร้างรูปแบบทางเลือกโดยการห่อหุ้มการเรียก HTTPS ใน Python และเปิดเผยไปยัง T-SQL ผ่านฟังก์ชันพร็อกซี
ข้อควรระวัง
การโทรหาอุปกรณ์ปลายทางภายนอกสามารถโอนย้ายข้อมูลออกนอกคลังสินค้าของคุณได้ ใช้อุปกรณ์ปลายทางที่ได้รับอนุมัติ หลีกเลี่ยงการส่งข้อมูลที่ละเอียดอ่อนเว้นแต่จะได้รับอนุญาต และปฏิบัติตามข้อกําหนดด้านความปลอดภัยและการปฏิบัติตามข้อกําหนดขององค์กรของคุณ
Note
เพิ่มไลบรารีของบุคคลที่สามที่จําเป็น เช่น requests, ใน การจัดการไลบรารี ก่อนเผยแพร่ฟังก์ชัน
กําหนดและเผยแพร่ฟังก์ชัน Python ในรายการฟังก์ชันข้อมูลผู้ใช้ ตัวอย่างนี้ใช้ชื่อพารามิเตอร์ที่ sys.sp_invoke_external_rest_endpointคล้ายกับ :
import json
import requests
import fabric.functions as fn
udf = fn.UserDataFunctions()
@udf.function()
def invokeExternalRestEndpoint(
url: str,
method: str = "GET",
payload: str | None = None,
headers: str | None = None,
timeout: int = 30
) -> str:
requestHeaders = json.loads(headers) if headers else None
requestPayload = payload if payload else None
response = requests.request(
method=method,
url=url,
data=requestPayload,
headers=requestHeaders,
timeout=timeout
)
response.raise_for_status()
return response.text
สร้างฟังก์ชันพร็อกซี T-SQL ในคลังสินค้า:
CREATE OR ALTER FUNCTION dbo.invoke_external_rest_endpoint
AS EXTERNAL FUNCTION api.invokeExternalRestEndpoint;
เรียกใช้ฟังก์ชันพร็อกซีจากคําสั่งคลังสินค้า:
SELECT dbo.invoke_external_rest_endpoint(
'https://ipapi.co/8.8.8.8/country_name/',
'GET',
NULL,
NULL,
30
) AS response;
C. ใช้ระยะเวลาการเก็บรักษาที่ปรับแต่งได้
ใช้ฟังก์ชันข้อมูลผู้ใช้เมื่อการสืบค้นคลังสินค้าต้องการค่าการกําหนดค่าที่จัดการจากศูนย์กลางจากไลบรารีตัวแปร Fabric ตัวอย่างเช่น เก็บช่วงเวลาการเก็บรักษาไว้ในไลบรารีตัวแปร ดึงข้อมูลผ่านฟังก์ชันพร็อกซี และใช้เป็นอาร์กิวเมนต์ ตัวเลข ของ DATEADD ฟังก์ชัน T-SQL
ก่อนที่คุณจะเผยแพร่ฟังก์ชัน ให้เพิ่มการเชื่อมต่อจากรายการฟังก์ชันข้อมูลผู้ใช้ไปยังไลบรารีตัวแปรและจดบันทึกชื่อแฝงการเชื่อมต่อ ไลบรารีตัวแปรในตัวอย่าง RETENTION_DAYS นี้มีค่าเช่น 90.
กําหนดและเผยแพร่ฟังก์ชัน Python ในรายการฟังก์ชันข้อมูลผู้ใช้:
import fabric.functions as fn
udf = fn.UserDataFunctions()
@udf.connection(argName="varLib", alias="WarehouseConfig")
@udf.function()
def getRetentionDays(varLib: fn.FabricVariablesClient) -> int:
variables = varLib.getVariables()
return int(variables["RETENTION_DAYS"])
แทนที่ WarehouseConfig ด้วยชื่อแฝงของการเชื่อมต่อไลบรารีตัวแปรของคุณ
สร้างฟังก์ชันพร็อกซี T-SQL ในคลังสินค้า:
CREATE OR ALTER FUNCTION dbo.get_retention_days
AS EXTERNAL FUNCTION config.getRetentionDays;
บนการเชื่อมต่อ T-SQL แบบถาวร ให้ดึงค่าที่กําหนดค่าไว้หนึ่งครั้งและเก็บไว้โดยใช้ sp_set_session_context:
DECLARE @retention_days int = dbo.get_retention_days();
EXECUTE sys.sp_set_session_context
@key = N'retention_days',
@value = @retention_days,
@read_only = 1;
ค่านี้จะยังคงใช้ได้ตลอดอายุการใช้งานของเซสชัน ดึงข้อมูลกับ SESSION_CONTEXT และแปลงจาก sql_variant เป็น int ก่อนใช้งานกับ DATEADD และGETDATE ตัวอย่างเช่น คํานวณค่าตัดการเก็บรักษา:
SELECT DATEADD(
day,
-CONVERT(int, SESSION_CONTEXT(N'retention_days')),
GETDATE()
) AS retention_cutoff;
ใช้ค่าเซสชันเดียวกันซ้ําในคําสั่งอื่นเพื่อกรองตาราง:
SELECT *
FROM dbo.events
WHERE event_timestamp >= DATEADD(
day,
-CONVERT(int, SESSION_CONTEXT(N'retention_days')),
GETDATE()
);
Important
ใช้รูปแบบนี้จากไคลเอนต์ที่ดูแลการเชื่อมต่อ T-SQL แบบถาวร เช่น SQL Server Management Studio หรือส่วนขยาย MSSQL สําหรับ Visual Studio Code ตัวแก้ไขคําสั่ง SQL ในพอร์ทัล Fabric ไม่รองรับ sp_set_session_contextและแต่ละรันจะใช้เซสชันแยกต่างหาก สําหรับข้อมูลเพิ่มเติม โปรดดูที่ข้อจํากัดของตัวแก้ไขคําสั่ง SQL
แก้ไขปัญหาฟังก์ชันข้อมูลผู้ใช้
Query Insights ให้ข้อมูลการทํางานและประสิทธิภาพที่คุณต้องการเพื่อแก้ไขปัญหาฟังก์ชันของ Fabric คุณสามารถระบุคําสั่งที่เรียกใช้ฟังก์ชัน ตรวจสอบว่าฟังก์ชันนั้นใช้การประมวลผลแบบแบตช์หรือแถว และตรวจสอบความหน่วงของบริการภายนอก การรีไทร์ แถวที่ล้มเหลว และขนาดของภาระงาน ใช้มุมมองสองแบบต่อไปนี้เพื่อเปลี่ยนจากภาพรวมระดับคําสั่งไปยังสถิติโดยละเอียดสําหรับแต่ละฟังก์ชัน:
- ใช้เพื่อ
queryinsights.exec_requests_historyระบุคําค้นที่เรียกใช้ฟังก์ชัน Fabric หรือ AI มุมมองนี้ประกอบด้วยข้อความคําค้น สถานะ เวลาส่ง และเวลารวมที่ผ่านไป - ใช้เพื่อ
queryinsights.external_api_call_statsเก็บสถิติรายละเอียดสําหรับแต่ละฟังก์ชันที่ถูกเรียกใช้โดยคําสั่งค้นหา มุมมองนี้รวมถึงประเภทฟังก์ชัน โหมดการทํางาน จํานวนการโทรและลองใหม่ เวลารอบริการภายนอก ขนาดภาระงาน และผลลัพธ์ของแถว
มุมมองเหล่านี้ใช้เพื่อ distributed_statement_id ระบุการดําเนินการค้นหาเดียวกัน
ค้นหาคําค้นที่ใช้ฟังก์ชัน Fabric
ใช้เพื่อqueryinsights.exec_requests_historyค้นหาข้อความล่าสุดที่เรียกใช้ฟังก์ชัน Fabric หรือ AI:
SELECT TOP 100
h.distributed_statement_id,
h.submit_time,
h.status,
h.total_elapsed_time_ms,
h.command
FROM queryinsights.exec_requests_history AS h
WHERE h.is_using_external_api = 1
ORDER BY h.submit_time DESC;
คัดลอกสําหรับ distributed_statement_id คําสั่งที่คุณต้องการตรวจสอบ คําค้นหาถัดไปจะกรองสถิติรายละเอียดไปยังฟังก์ชัน Fabric
ดูสถิติสําหรับแต่ละฟังก์ชันในคําสั่ง
แทนที่ <distributed_statement_id> ด้วยตัวระบุที่ส่งคืนจากคําค้นหาก่อนหน้า คําสั่งต่อไปนี้จะคืนค่าหนึ่งแถวสําหรับแต่ละฟังก์ชัน Fabric ที่แตกต่างกันซึ่งถูกเรียกใช้โดยคําสั่งนี้:
DECLARE @distributed_statement_id uniqueidentifier =
'<distributed_statement_id>';
SELECT function_name,
execution_mode,
call_count,
batch_call_count,
row_call_count,
call_retry_count,
external_service_wait_time_ms,
external_service_wait_time_ms
/ call_count AS average_wait_time_ms_per_call,
rows_total,
rows_succeeded,
rows_failed,
data_sent_bytes,
data_received_bytes
FROM queryinsights.external_api_call_stats
WHERE distributed_statement_id = @distributed_statement_id
AND function_type = 'FABRIC_FUNCTION'
ORDER BY external_service_wait_time_ms DESC;
ผลลัพธ์มีลักษณะคล้ายกับตัวอย่างต่อไปนี้:
| function_name | execution_mode | call_count | batch_call_count | row_call_count | call_retry_count | external_service_wait_time_ms | average_wait_time_ms_per_call | rows_total | rows_succeeded | rows_failed | data_sent_bytes | data_received_bytes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
inet.ipSubnet |
batch |
12 | 12 | 0 | 0 | 840 | 70 | 600 | 600 | 0 | 12,000 | 9,600 |
api.invokeExternalRestEndpoint |
row |
4 | 0 | 4 | 1 | 1,920 | 480 | 4 | 4 | 0 | 1,024 | 512 |
คำแนะนำในการแก้ไขปัญหา
- ค่า high
row_call_countหรือexecution_modevalue ofrowอาจบ่งบอกว่าฟังก์ชันไม่ได้ใช้การประมวลผลแบบ batch หากคุณคาดหวังว่าจะมีการแบตช์ ให้ตรวจสอบว่าการดูตัวอย่างโหมดแบตช์เปิดใช้งานอยู่และฟังก์ชันใช้อาร์กิวเมนต์นั้นmax_batch_size - ใช้
external_service_wait_time_msและaverage_wait_time_ms_per_callระบุการตอบสนองภายนอกที่ช้า ถ้าค่าเหล่านี้สูงในขณะที่data_sent_bytesและdata_received_bytesต่ํา เวลาตอบสนองของบริการภายนอกน่าจะเป็นความล่าช้าหลัก - ค่าหรือค่าที่ใหญ่
data_sent_bytesdata_received_bytesก็สามารถเพิ่มเวลาการดําเนินการได้เช่นกัน ลดภาระข้อมูลอินพุตหรือเอาต์พุตเมื่อฟังก์ชันถ่ายโอนข้อมูลมากกว่าที่สถานการณ์ต้องการ