參考資料是一個有限的資料集,性質上是靜態或緩慢變化的。 它用來執行查詢或擴充你的資料流。 參考資料也稱為查找表。
以物聯網情境為例。 你可以將不常變動的感測器元資料儲存在參考資料中。 接著您可以將它與即時 IoT 資料串流連接。
Azure Stream Analytics 將參考資料載入記憶體,以實現低延遲的串流處理。 在你的串流分析工作中使用參考資料,通常會在查詢中使用 參考資料連接 。
Example
你可以讓車輛經過收費站時產生即時事件串流。 收費站可以即時擷取車牌號碼。 這些資料可以與包含註冊資料的靜態資料集合併,以識別已過期的車牌。
SELECT I1.EntryTime, I1.LicensePlate, I1.TollId, R.RegistrationId
FROM Input1 I1 TIMESTAMP BY EntryTime
JOIN Registration R
ON I1.LicensePlate = R.LicensePlate
WHERE R.Expired = '1'
Stream Analytics 支援 Azure Blob Storage、Azure Data Lake Storage Gen2 以及 Azure SQL Database 作為參考資料的儲存層。 如果你在其他資料庫裡有參考資料,試著用 Azure Data Factory 擷取、轉換並載入支援的資料庫。 更多資訊請參閱 Azure Data Factory 中的複製活動總覽。
Azure Blob 儲存體或 Azure Data Lake Storage Gen 2
參考資料是建模為一系列 blob,依照 blob 名稱中指定的日期/時間升序排列。 只有使用比序列中最後一個 Blob 所指定的日期/時間更晚的日期/時間,才能將 Blob 加入序列末尾。 blobs 是在輸入配置中定義的。
欲了解更多資訊,請參閱 「使用 Blob Storage 中的參考資料以取得串流分析工作」。
配置 Blob 參考數據
要設定參考資料,首先需要建立一個 參考 資料型別的輸入。 下表說明了您在建立參考資料輸入及其描述時需要提供的每個屬性。
| 屬性名稱 | Description |
|---|---|
| 輸入別名 | 任務查詢中使用的友善名稱來標識此輸入。 |
| 記憶體帳戶 | 用來存放您 blob 的儲存體帳戶名稱。 如果它和你的 Stream Analytics 職缺在同一個訂閱裡,就從下拉選單選擇它。 |
| 儲存體帳戶金鑰 | 與儲存帳號相關的秘密金鑰。 如果儲存帳號和你的 Stream Analytics 工作是同一個訂閱,這個金鑰會自動填入。 |
| 儲存體容器 | 容器為儲存在 Blob Storage 中的 blob 提供邏輯分組。 當你將 blob 上傳到 Blob 儲存時,必須為該 blob 指定一個容器。 |
| 路徑模式 | 這個必要屬性是用來在指定的容器內找出您的 blob。 在路徑中,你可以選擇指定一個或多個變數 {date} 和 {time} 的實例。 範例 1:產品/{日期}/{時間}/product-list.csv 範例 2:產品/{日期}/product-list.csv 範例三:product-list.csv 如果 blob 不存在於指定路徑中,Stream Analytics 工作會無限期等待該 blob 可用。 |
| 日期格式[可選] | 如果您在指定的路徑模式中使用了 {date},請從支援格式的下拉選單中選擇您的 Blob 所整理的日期格式。 範例:YYYY/MM/DD 或 MM/DD/YYYY |
| 時間格式 [可選] | 如果你在指定的路徑模式中使用了 {time},請從支援格式的下拉清單中選擇你的 blob 所使用的時間格式。 範例:HH、HH/MM,或 HH-mm |
| 事件序列化格式 | 為了確保你的查詢如預期運作,Stream Analytics 需要知道你對輸入資料流使用的序列化格式。 參考資料支援的格式是 CSV 和 JSON。 |
| 編碼 | 目前唯一支援的編碼格式是 UTF-8。 |
靜態參考資料
你的參考資料可能預期不會變動。 為了啟用靜態參考資料的支援,請在輸入設定中指定靜態路徑。
Stream Analytics 會從指定的路徑中擷取 blob。 {date} 和 {time} 替換標記並非必需。 因為 Stream Analytics 的參考資料是不可變的,不建議覆寫靜態的參考資料塊。
依照排程產生參考資料
你的參考資料可能是緩慢變化的資料集。 要刷新參考資料,請在輸入設定中使用 {date} 和 {time} 替代符號來指定路徑模式。 Stream Analytics 會根據此路徑模式擷取更新的參考資料定義。
例如,有個sample/{date}/{time}/products.csv模式具有日期格式 YYYY-MM-DD 和時間格式 HH-mm,指示串流分析接收更新的 blobsample/2015-04-16/17-30/products.csv (時間是 2015 年 4 月 16 日 UTC 時間下午 5:30)。
Stream Analytics 會自動以一分鐘間隔掃描刷新的參考資料塊。 時間戳記為 10:30:00 的 blob 可能會有小延遲上傳,例如 10:30:30。 您會注意到參考此 blob 的串流分析工作會有一點延遲。
為避免此類情況,應提前上傳 blob,早於目標生效時間(在本例中為 10:30:00)。 串流分析工作現在有足夠時間發現並載入記憶體中的 blob 並執行操作。
備註
目前,串流分析工作只會在機器時間推進到 blob 名稱中編碼的時間時,才會尋找 blob 的重新整理。 例如,尋找sample/2015-04-16/17-30/products.csv的工作應盡早開始,但不得早於 2015 年 4 月 16 日 UTC 時間下午 5:30。 它將永遠不會尋找一個編碼時間早於最後發現的 blob 的 blob。
例如,工作找到 blob sample/2015-04-16/17-30/products.csv後,會忽略任何編碼日期早於 2015 年 4 月 16 日下午 5:30 的檔案。 如果在同一個容器中建立一個延遲到達的 sample/2015-04-16/17-25/products.csv blob,則工作將不會使用它。
另一個例子是 sample/2015-04-16/17-30/products.csv 僅於 2015 年 4 月 16 日晚上 10:03 產生,但容器中並不存在更早日期的 blob。 接著,該工作從 2015 年 4 月 16 日晚上 10:03 開始使用此檔案,並在此之前使用先前的參考資料。
此行為的例外是當工作需要重新處理過去的資料或當工作剛開始時。
在工作開始時,此工作會尋找在指定的工作開始時間之前產生的最新 blob。 這種行為確保工作開始時參考資料集 不是空 的。 如果找不到,任務會顯示以下診斷結果:Initializing input without a valid reference data blob for UTC time <start time>。
當參考資料集被刷新時,會產生診斷日誌: Loaded new reference data from <blob path>。 出於多種原因,工作可能需要重新載入先前的參考資料集。 大多數原因是重新處理過去的資料。 當時也會產生相同的診斷日誌。 此動作並不代表目前的串流資料使用過去的參考資料。
Azure Data Factory 可用來編排建立 Stream Analytics 所需的 Blob,以更新參考資料定義的任務。
Data Factory 是一項基於雲端的資料整合服務,能協調並自動化資料的移動與轉換。 Data Factory 支援 連接大量雲端及本地資料儲存。 它可以依照你指定的固定行程輕鬆移動資料。
欲了解更多如何建立資料工廠管線以產生依預先設定的排程刷新的 Stream Analytics 參考資料,請參閱此 GitHub 範例。
刷新 Blob 參考資料的技巧
- 不要覆寫參考資料塊,因為它們是不可變的。
- 建議刷新參考資料的方法包括:
- 在路徑模式中使用 {date}/{time}。
- 使用工作輸入中定義的容器和路徑模式,新增一個新 blob。
- 使用比序列中最後一個 blob 所指定的日期/時間更晚的日期/時間。
- 參考資料塊並非依據其 最後修改 時間排序。 它們只依據 blob 名稱中指定的日期和時間,使用 {date} 和 {time} 的替換來排序。
- 為避免列出大量的數據塊,刪除那些不再需要處理的舊數據塊。 Stream Analytics 在某些情況下可能需要重新處理少量資料,例如重新啟動。
Azure SQL Database
你的串流分析工作會取得 SQL 資料庫的參考資料,並將其作為快照儲存在記憶體中以便處理。 你的參考資料快照也會儲存在儲存帳號的容器中。 你可以在設定中指定儲存帳號。
容器會在工作開始時自動建立。 若工作停止或進入失敗狀態,自動建立的容器會在工作重新啟動時被刪除。
如果你的參考資料是緩慢變化的資料集,你需要定期刷新工作中使用的快照。
使用 Stream Analytics,你可以在設定 SQL 資料庫輸入連線時設定刷新率。 Stream Analytics 執行時會依照刷新率指定的間隔查詢你的 SQL 資料庫實例。 支援的最快更新率是每分鐘一次。 每次更新時,Stream Analytics 會在所提供的儲存帳號中儲存一個新的快照。
Stream Analytics 提供兩種查詢 SQL 資料庫實例的選項。 快照查詢為強制性,且必須包含在每個工作中。 Stream Analytics 會根據你的刷新間隔定期執行快照查詢。 它使用查詢結果(快照)作為參考資料集。
快照查詢應該適用於大多數情境。 當你遇到大型資料集和快速刷新率的效能問題時,可以使用 delta 查詢選項。 查詢若需超過 60 秒才返回參考資料集,則會產生逾時。
使用 delta 查詢選項時,Stream Analytics 會先執行快照查詢以取得基準參考資料集。 之後,Stream Analytics 會根據你的刷新間隔定期執行 delta 查詢,以取得增量變更。 這些漸進式變更會持續套用於參考資料集,以保持其更新。 使用差量查詢選項可能有助於降低儲存成本及網路 I/O 操作。
配置 SQL 資料庫參考資料
要設定你的 SQL 資料庫參考資料,首先需要建立參考資料輸入。 下表說明了您在建立參考資料輸入及其描述時需要提供的每個屬性。 欲了解更多資訊,請參閱 「使用 SQL 資料庫的參考資料以申請串流分析職缺」。
你可以使用 Azure SQL Managed Instance 作為參考資料輸入。 你必須 在 SQL 管理實例中設定一個公開端點。 接著你在 Stream Analytics 中手動設定以下設定。 手動設定這些設定時,也支援執行 SQL Server 並具有附加資料庫的 Azure 虛擬機器。
| 屬性名稱 | Description |
|---|---|
| 輸入別名 | 任務查詢中使用的友善名稱來標識此輸入。 |
| Subscription | 您的訂用帳戶。 |
| 資料庫 | 包含你參考資料的 SQL 資料庫實例。 對於 SQL 管理實例,你必須指定埠號 3342。 例如 sampleserver.public.database.windows.net,3342。 |
| 用戶名稱 | 與你的 SQL 資料庫實例相關聯的使用者名稱。 |
| 密碼 | 與你的 SQL 資料庫實例相關聯的密碼。 |
| 定期刷新 | 這個選項可以讓你選擇刷新率。 選擇 開啟 以在 DD:HH:MM 中指定刷新率。 |
| 快照查詢 | 這個預設查詢選項會從你的 SQL 資料庫實例取得參考資料。 |
| Delta 查詢 | 對於資料集大且刷新率短的進階情境,可以新增一個 delta 查詢。 |
尺寸限制
使用少於 300 MB 的參考資料集以達到最佳效能。 在具有六個或更多串流單元的工作中,支援最大 5 GB 的參考資料集。 使用大型參考資料集可能會影響你工作的端對端延遲。
查詢複雜度可增加,包含有狀態處理,如視窗聚合、時間連接及時間分析函數。 當複雜度增加時,最大支援的參考資料大小會減少。
如果 Stream Analytics 無法載入參考資料並執行複雜操作,工作就會用盡記憶體並失敗。 在這種情況下,串流單位百分比利用率指標會達到100%。
| 串流單元數量 | 建議尺寸 |
|---|---|
| 1 | 50 MB 或以下 |
| 3 | 150 MB 或以下 |
| 6歲及以後 | 5GB 或更低 |
參考資料不支援壓縮。 對於超過 300 MB 的參考資料集,請使用 SQL Database 作為來源,並啟用 delta 查詢 選項以達到最佳效能。 如果在這類情境中,不使用增量查詢選項,則每次重新整理參考資料集時,您將會看到浮水印延遲指標出現高峰。
在工作中加入多個參考資料集
你只能將參考資料輸入連接到串流輸入。 所以要連接多個參考資料集,請將查詢拆解成多個步驟。 以下為範例:
With Step1 as (
--JOIN input stream with reference data to get 'Desc'
SELECT streamInput.*, refData1.Desc as Desc
FROM streamInput
JOIN refData1 ON refData1.key = streamInput.key
)
--Now Join Step1 with second reference data
SELECT *
INTO output
FROM Step1
JOIN refData2 ON refData2.Desc = Step1.Desc
IoT Edge 工作
串流分析邊緣工作僅支援本地參考資料。 當工作部署到物聯網邊緣裝置時,會從使用者定義的檔案路徑載入參考資料。 裝置上準備好參考資料檔。
對於 Windows 容器,將參考資料檔案放在本地硬碟,並與 Docker 容器共用本地硬碟。 對於 Linux 容器,建立一個 Docker 磁碟區,並將資料檔案填入該磁碟區。
IoT Edge 更新的參考資料是由部署觸發。 觸發後,Stream Analytics 模組會選擇更新後的資料,且不會停止執行中的工作。
你可以用兩種方式更新參考資料:
- 從 Azure 入口更新你 Stream Analytics 工作中的參考資料路徑。
- 更新 IoT Edge 部署。