教學課程:撰寫有效的查詢將計量資料上線
重要
從 2023 年 9 月 20 日起,您將無法建立新的計量建議程式資源。 計量建議程式服務將於 2026 年 10 月 1 日淘汰。
在本教學課程中,您會了解如何:
- 如何撰寫有效的資料上線查詢
- 常見錯誤和避免方法
必要條件
建立計量建議程式資源
若要匯出計量建議程式的功能,您可能需要在 Azure 入口網站中建立計量建議程式資源,以部署您的計量建議程式執行個體。
資料結構描述需求
Azure AI 計量建議程式是用於時間序列異常偵測、診斷和分析的服務。 作為 AI 服務,其會使用您的資料來定型所使用的模型。 服務接受具有下列資料行的彙總資料資料表:
- 量值 (必要):量值是基本或單位特定的字詞,也是可量化的計量值。 其表示包含數值的一或多個資料行。
- 時間戳記 (選用):零或一個類型為
DateTime
或String
的資料行。 未設定這個資料行時,時間戳記會設定為每個內嵌期間的開始時間。 格式化時間戳記,如下所示:yyyy-MM-ddTHH:mm:ssZ
。 - 維度 (選用):維度是一或多個類別值。 這些值的組合會識別特定的單變量時間序列 (例如國家/地區、語言和租用戶)。 維度資料行可以是任何資料類型。 使用大量資料行和值時請小心,以避免處理過多的維度數。
如果您使用資料來源,例如 Azure Data Lake Storage 或 Azure Blob 儲存體,您可以彙總資料,以符合預期的計量結構描述。 這是因為這些資料來源會使用檔案作為計量輸入。
如果您使用資料來源,例如 Azure SQL 或 Azure 資料總管,您可以使用彙總函數,將資料彙總至預期的結構描述。 這是因為這些資料來源支援執行查詢,以從來源取得計量資料。
計量建議程式如何進行資料擷取?
一般來說,將計量上線至計量建議程式的方法有兩種:
- 將計量預先彙總至預計的結構描述中,然後將資料儲存至特定檔案。 在上線期間填入路徑範本,計量建議程式便會持續從該路徑擷取新檔案,並在計量上進行偵測。 這是 Azure 資料湖和 Azure Blob 儲存體等資料來源的常見作法。
- 如果您要從支援使用查詢指令碼的資料來源 (例如 Azure SQL伺服器、Azure Data Explorer 或其他來源) 擷取資料,您必須要正確地建構您的查詢。 本文將教導您如何撰寫有效的查詢,以便如預期般順利將計量資料上線。
什麼是間隔?
必須根據商務需求以特定細微性對計量進行監視。 例如,會以每日細微性對業務關鍵效能指標 (KPI) 進行監視。 不過,通常會以分鐘/小時的細微性對服務效能計量進行監視。 因此,從來源收集計量資料的頻率是不同的。
計量建議程式會在每個時間間隔持續擷取計量資料,間隔等於計量的資料粒度。每次,計量建議程式都會執行您已在此特定間隔寫入擷取資料的查詢。 根據此資料擷取機制,查詢指令碼 不應該傳回於資料庫中存在的所有計量資料,但必須將結果限制為單一間隔。
如何撰寫有效的查詢?
Use @IntervalStart and @IntervalEnd to limit query results
為了幫助您達成此目標,我們提供兩個可在查詢內使用的參數:@IntervalStart 和 @IntervalEnd。
每次查詢執行時,@IntervalStart 和 @IntervalEnd 都會自動更新為最新的間隔時間戳記,並取得對應的計量資料。 @IntervalEnd 的細微性一律是 @IntervalStart 的細微性 + 1。
以下是在 Azure SQL Server 上正確使用這兩個參數的範例:
SELECT [timestampColumnName] AS timestamp, [dimensionColumnName], [metricColumnName] FROM [sampleTable] WHERE [timestampColumnName] >= @IntervalStart and [timestampColumnName] < @IntervalEnd;
用這種方式撰寫查詢腳本的話,每個查詢結果的計量時間戳記的間隔都應該會相同。 計量建議程式會依據計量的細微性來對齊時間戳記。
使用彙總函式來彙總計量
客戶的資料來源中通常會有許多資料行,但是並非所有資料行都適合監視或納為維度。 客戶可以用彙總函數來彙總計量,並只將有意義的資料行納為維度。
在以下範例中,客戶的資料來源有超過 10 個資料行,但其中只有部分資料行有意義,而必須包含並彙總到要監視的計量中。
TS | Market | 裝置作業系統 | 類別 | ... | Measure1 | Measure2 | Measure3 |
---|---|---|---|---|---|---|---|
2020-09-18T12:23:22Z | 紐約 | iOS | 太陽眼鏡 | ... | 43242 | 322 | 54546 |
2020-09-18T12:27:34Z | 北京 | Android | 袋 | ... | 3333 | 126 | 67677 |
... |
如果客戶想要以每小時的細微度監視「Measure1」,並選擇「市場」和「類別」作為維度,以下範例會說明如何妥善利用彙總函數來達成此目的:
SQL 範例:
SELECT dateadd(hour, datediff(hour, 0, TS),0) as NewTS ,Market ,Category ,sum(Measure1) as M1 FROM [dbo].[SampleTable] where TS >= @IntervalStart and TS < @IntervalEnd group by Market, Category, dateadd(hour, datediff(hour, 0, TS),0)
Azure 資料總管範例:
SampleTable | where TS >= @IntervalStart and TS < @IntervalEnd | summarize M1 = sum(Measure1) by Market, Category, NewTS = startofhour(TS)
注意
在上述案例中,客戶想要以每小時的資料細微性監視計量,但原始時間戳記 (TS) 並未對齊。 彙總語句需要一個時間戳記方面的流程,才能以小時對齊,並產生名為「NewTS」的新時間戳記資料行。
上線期間的常見錯誤
錯誤:在查詢結果中找到多個時間戳記值
如果您沒有限制一個間隔中的查詢結果,就會出現這個常見錯誤。 例如,假設您要以每日的細微性來監視某個計量,如果您的查詢傳回如下的結果,就會發生此錯誤:
結果中有多個時間戳記值,而且不在同一個計量間隔中 (一天)。 請參閱計量建議程式如何進行資料擷取? 以了解到計量建議程式會在每個計量間隔中擷取計量資料。 然後,請務必在查詢中使用 @IntervalStart 和 @IntervalEnd 以限制一個間隔中的結果數量。 如需詳細的指導和範例,請參閱 Use @IntervalStart and @IntervalEnd to limit query results。
錯誤:在一個計量間隔內,針對相同的維度組合找到重複的計量值
在一個間隔內,計量建議程式預期相同的維度組合只有一個計量值。 例如,假設您要以每日的細微性來監視某個計量,如果您的查詢傳回如下的結果,就會發生此錯誤:
如需詳細的指導和範例,請參閱使用彙總函數來彙總計量。
下一步
請前往下一篇文章以了解如何建立。