ใน บทความที่แล้ว เราได้อธิบายถึงขั้นตอนในการดึง authentication token เพื่อเข้าถึง Azure Data Factory REST API. ในบทความนี้ เราจะสร้างสิ่งนี้เพื่อดึงข้อมูลที่เป็นประโยชน์สำหรับการตรวจสอบข้อมูลจาก Azure Data Factory Pipleines โดยใช้ queryPipelineRuns endpoint.
โดยเริ่มจากการสร้าง parameters เพิ่มเติมเพื่อจัดเก็บ Azure Resource Group Name ของคุณ โดยต้องเป็นที่กลุ่มที่ Data Factory instsance ที่ต้องการใช้งานอยู่ และ ระบุชื่อ Data Factory ที่ต้องการ
1. เปิดไฟล์ Power BI Desktop ของคุณแล้วคลิก Transform Transform
2. จากนั้นคลิกขวาที่บานหน้าต่าง Queries, เลือก New Parameter จากนั้นเพิ่มชุดพารามิเตอร์ต่อไปนี้: resourceGroupName, dataFactoryName.
ตัวอย่าง:
ตอนนี้คุณควรมีทั้งหมด 5 parameters:
ลำดับต่อมา สร้าง query โดยคลิกขวาที่บนหน้าต่าง Queries ทางด้านซ้ายมือแล้วเลือก Blank Query , และเลือก Advanced Editor.
จากนั้นวาง Code ต่อไปนี้:
123456789101112131415161718192021222324252627282930313233343536373839404142 | let tenantId = tenantId, subscriptionId = subscriptionId, resourceGroupName = resourceGroupName, factoryName = dataFactoryName, apiVersion = "2018-06-01" , today = DateTime.LocalNow() as datetime, prev = Date.AddMonths(today, - 1), startDt = DateTime.Date(prev), startDtText = "'" & Text.From(Date.Year(startDt)) & "-" & Text.From(Date.Month(startDt)) & "-" & Text.From( Date.Day(startDt) ) & "T00:00:00.0000000Z'" , endDt = DateTime.Date(today), endDtText = "'" & Text.From(Date.Year(endDt)) & "-" & Text.From(Date.Month(endDt)) & "-" & Text.From( Date.Day(endDt) ) & "T00:00:00.0000000Z'" , token = getAuthToken( "https://management.azure.com/" ), //Build request URL & Body using variables url = "https://management.azure.com/subscriptions/" & subscriptionId & "/resourceGroups/" & resourceGroupName & "/providers/Microsoft.DataFactory/factories/" & factoryName & "/queryPipelineRuns?api-version=" & apiVersion, reqBody = "{ " "lastUpdatedAfter" ": " & startDtText & ", " "lastUpdatedBefore" ": " & endDtText & " } ] }" , //Make API Call to query Data Factory reqHeaders = [ #"Content-Type" = "application/json", #"Authorization" = "Bearer " & token], result = Json.Document( Web.Contents(url, [Headers = reqHeaders, Content = Text.ToBinary(reqBody)]) ) in result |
หลังจากคลิก Done คุณจะได้รับแจ้งให้ตั้งค่าระดับความเป็นส่วนตัว (privacy levels) สำหรับข้อมูลในรายงานนี้ คุณต้องเลือกตัวเลือกที่เหมาะสมตามนโยบายองค์กรของคุณ สำหรับการสาธิตเราจะเลือกละเว้นระดับความเป็นส่วนตัว:
หากป้อนค่าพารามิเตอร์ทั้งหมดของคุณอย่างถูกต้องและ query ได้รับการรับรองความถูกต้อง (authenticated) แล้ว query ควรส่งคืนการตอบสนองที่คล้ายกับตัวอย่างด้านล่าง:
ขั้นตอนต่อไป เราจะต้องทำการขั้นตอนการปรับปรุงเพื่อวิเคราะห์แยกข้อมูลที่ตอบสนองมาในรูปแบบ JSON ไปเป็นรูปแบบตาราง:
1. คลิก Into Table
2. คลิกบน List
3. คลิกไปที่ปุ่ม expand
4. จากนั้นตรวจสอบให้แน่ใจว่าได้ยกเลิกการเลือก “Use original column name as prefix” แล้ว หลังจากนั้นคลิก ok.
ตอนนี้สามารถดึงข้อมูลจากการรันไปป์ไลน์ได้เรียบร้อยแล้ว อย่างไรก็ตาม วิธีนี้จะส่งคืนข้อมูลเพียง 100 รายการตามค่าเริ่มต้น ตามข้อจำกัดของ API ที่สามารถส่งคืนได้เพียง 100 รายการต่อการเรียก API 1 ครั้ง
ในการดึงบันทึกทั้งหมด เราจะต้องสร้างฟังก์ชันที่จะใช้ประโยชน์จากฟังก์ชันการแบ่งหน้าของ API (pagination functionality) และให้ดำเนินการวนเรียกใช้งานซ้ำทีละหน้าจนครบ
ในการทำเช่นนี้ ให้คลิกขวาที่ New Query และ เลือก Duplicate and rename the new Query ไปเป็น getPipelineRuns.
เลือก query getPipelineRuns จากนั้นเลือก Advanced Editor และวาง code ดังต่อไปนี้:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | let getPipelineRuns = (optional contText as text) as list => let tenantId = tenantId, subscriptionId = subscriptionId, resourceGroupName = resourceGroupName, factoryName = dataFactoryName, apiVersion = "2018-06-01" , today = DateTime.LocalNow() as datetime, prev = Date .AddMonths(today, - 1), startDt = DateTime. Date (prev), startDtText = "'" & Text. From ( Date . Year (startDt)) & "-" & Text. From ( Date . Month (startDt)) & "-" & Text. From ( Date . Day (startDt) ) & "T00:00:00.0000000Z'" , endDt = DateTime. Date (today), endDtText = "'" & Text. From ( Date . Year (endDt)) & "-" & Text. From ( Date . Month (endDt)) & "-" & Text. From ( Date . Day (endDt) ) & "T00:00:00.0000000Z'" , token = getAuthToken( "https://management.azure.com/" ), //Build request URL & Body using variables url = "https://management.azure.com/subscriptions/" & subscriptionId & "/resourceGroups/" & resourceGroupName & "/providers/Microsoft.DataFactory/factories/" & factoryName & "/queryPipelineRuns?api-version=" & apiVersion, reqBody = if contText = null then "{ " "lastUpdatedAfter" ": " & startDtText & ", " "lastUpdatedBefore" ": " & endDtText & " }" else "{ " "lastUpdatedAfter" ": " & startDtText & ", " "lastUpdatedBefore" ": " & endDtText & ", " "continuationToken" ": '" & contText & "' }" , //Make API call to query Data Factory reqHeaders = [# "Content-Type" = "application/json" , # "Authorization" = "Bearer " & token], result = Json.Document( Web.Contents(url, [Headers = reqHeaders, Content = Text.ToBinary(reqBody)]) ), //Get continuation token from previous call if available contToken = try Record.Field(result, "continuationToken" ) otherwise null , //Run function for each new continuation token CombinedResults = if contToken = null then {result} else List.Combine({{result}, getPipelineRuns(contToken)}) in CombinedResults in getPipelineRuns |
คลิกถัดไป คลิกขวาที่ query ตั้งต้นและAdvanced Editor แล้ววาง code ต่อไปนี้ จากนั้นคลิกเสร็จสิ้น:
1234 | let Source = getPipelineRuns( null ) in Source |
คุณจะต้องแปลงที่ JSON response เป็นตารางอีกครั้ง ซึ่งตอนนี้ควรได้รับบันทึกข้อมูลรายการทั้งหมดของการใช้งาน Data Factory ของคุณ
เมื่อเสร็จแล้ว ให้คลิก Close & Apply.
ตอนนี้คุณควรมีทุกสิ่งที่จำเป็นในการเริ่มสร้างแดชบอร์ดการตรวจติดตาม Data Factory ของคุณ!
หากคุณอยากได้รับคำปรึกษาเพิ่มเติมเกี่ยวหรือมีข้อสงสัย โปรดติดต่อเราเพื่อรับคำปรึกษาฟรีโดยกรอกข้อมูลด้านล่าง หรือติดต่อเราโดยตรงที่ +66 (0) 2 117 4344