使用參考資料在串流分析中進行查閱

參考資料是本質上屬於靜態或變化緩慢的有限資料集。 可用來執行查閱或擴增資料流。 參考資料也稱為查閱資料表。

以 IoT 案例為例。 您可以將感應器的相關中繼資料儲存在參考資料中,通常不會變更。 然後,您可以將其與即時 IoT 資料流結合在一起。

Azure 串流分析會將參考資料載入記憶體,以達到低延遲的串流處理。 若要使用串流分析作業中的參考資料,您通常要在查詢中使用參考資料聯結。

範例

您可以讓汽車通過收費站時產生即時事件串流。 收費站可以即時擷取車牌。 該資料會與含有註冊詳細資料的靜態資料集聯結,以識別已過期的車牌。

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'

串流分析支援 Azure Blob 儲存體和 Azure SQL Database 作為參考資料的儲存層。 您還可以從 Azure Data Factory 將參考資料轉換或複製到 Blob 儲存體中,以使用雲端和內部部署資料存放區

Azure Blob 儲存體

參考資料會依 Blob 名稱中指定日期/時間的遞增順序,以 Blob 序列的形式建立模型。 Blob 只能使用比序列中最後一個 Blob 指定日期/時間更大的日期/時間,新增到序列的尾端。 Blob 定義於輸入設定中。

如需詳細資訊,請參閱將來自 Blob 儲存體的參考資料用於串流分析作業

設定 Blob 參考資料

若要設定參考資料,您必須先建立參考資料類型的輸入。 下表說明您在建立參考資料輸入及其描述時必須提供的每個屬性。

屬性名稱 描述
輸入別名 作業查詢中用來參考這個輸入的自訂名稱。
儲存體帳戶 您 blob 所在的儲存體帳戶名稱。 如果其與您的串流分析作業位於相同的訂用帳戶,請從下拉式清單中選取。
儲存體帳戶金鑰 與儲存體帳戶相關聯的密碼金鑰。 如果儲存體帳戶與您的串流分析作業位於相同的訂用帳戶,就會自動填入此金鑰。
儲存體容器 容器會針對儲存在 Blob 儲存體中的 Blob 提供邏輯分組。 當您將 blob 上傳至 Blob 儲存體時,必須指定該 blob 的容器。
路徑模式 您可以使用這個必要的屬性,在指定的容器中找出您的 blob。 在該路徑內,您也可以指定變數 {date} 和 {time} 的一或多個執行個體。
範例 1:products/{date}/{time}/product-list.csv
範例 2:products/{date}/product-list.csv
範例 3︰product-list.csv

如果 blob 不在指定路徑中,則串流分析作業將無限期地等待 blob 變成可用。
日期格式 [選用] 如果您在指定的路徑模式內使用 {date},請從支援格式的下拉式清單中選取組織 Blob 所使用的日期格式。
範例:YYYY/MM/DD 或 MM/DD/YYYY
時間格式 [選用] 如果您在指定的路徑模式內使用 {time},請從支援格式的下拉式清單中選取組織 Blob 所使用的時間格式。
範例︰HH、HH/mm 或 HH-mm
事件序列化格式 為了確定您的查詢運作如預期,串流分析需要知道您的內送資料流使用哪一種序列化格式。 參考資料的支援格式為 CSV 和 JSON。
編碼 UTF-8 是目前唯一支援的編碼格式。

靜態參考資料

您的參考資料可能不會變更。 若要啟用靜態參考資料支援,請在輸入設定中指定靜態路徑。

串流分析會從指定的路徑挑選 blob。 {date} 和 {time} 替代權杖並非必要。 由於串流分析中的參考資料不可變,因此不建議覆寫靜態參考資料 Blob。

依排程產生參考資料

您的參考資料可能是變更緩慢的資料集。 若要重新整理參考資料,請使用 {date} 和 {time} 替代權杖在輸入設定中指定路徑模式。 串流分析會根據此路徑模式採用更新的參考資料定義。

例如,日期格式為 "YYYY-MM-DD" 且時間格式為 "HH:mm" 的模式 sample/{date}/{time}/products.csv,會指示串流分析在 UTC 時區 2015 年 4 月 16 日的下午 5:30 挑選更新的 Blob sample/2015-04-16/17-30/products.csv

串流分析會每隔一分鐘自動掃描已重新整理的參考資料 blob。 時間戳記為 10:30:00 的 Blob 可能會在上傳時發生小小的延遲,例如 10:30:30。 您會在參考此 Blob 的串流分析作業中,發現有一個小小延遲。

若要避免發生這類情況,請在目標有效時間 (在此範例中為 10:30:00) 之前上傳 Blob。 串流分析作業現在有足夠的時間,可以在記憶體中探索及載入 Blob 並執行作業。

注意

目前,串流分析作業只有在機器時間朝向 Blob 名稱中編碼的時間時,才會尋求 Blob 重新整理。 例如,作業會盡早尋找 sample/2015-04-16/17-30/products.csv,但不會早於 UTC 時區 2015 年 4 月 16 日的下午 5:30。 其決不會尋找編碼時間早於最後一個探索時間的 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 可用來針對串流分析更新參考資料定義時所需的已更新 Blob,協調建立這些 Blob 的工作。

Data Factory 是雲端架構資料整合服務,用來協調以及自動移動和轉換資料。 Data Factory 支援連線到大量雲端式和內部部署的資料存放區。 其可以依照您指定的定期排程,輕鬆移動資料。

如需如何設定 Data Factory 管線以產生依預先定義排程進行重新整理的串流分析參考資料,請參閱這個 GitHub 範例

重新整理 Blob 參考資料的秘訣

  • 請勿覆寫參考資料 Blob,因為其是不可變的。
  • 重新整理參考資料的建議方式是:
    • 在路徑模式中使用 {date}/{time}。
    • 使用作業輸入中定義的相同容器和路徑模式來新增 blob。
    • 使用比序列中最後一個 Blob 指定的日期/時間的日期/時間。
  • 參考資料 Blob 不會依照 Blob 的上次修改時間排序。 只會依照使用 {date} 和 {time} 替代的 Blob 名稱所指定的日期和時間排序。
  • 若要避免必須列出大量 Blob,請刪除再也不會進行處理的舊 Blob。 串流分析在某些案例 (例如重新啟動) 中可能需要重新處理少數舊的 Blob。

Azure SQL Database

串流分析作業會擷取 SQL Database 參考資料,並將其儲存為記憶體中的快照集以供處理。 參考資料的快照集也會儲存在儲存體帳戶中的容器。 您可以在設定中指定儲存體帳戶。

作業開始時自動建立容器。 如果作業停止或進入失敗狀態,則在重新啟動作業時會刪除自動建立的容器。

如果參考資料是變更緩慢的資料集,則需要定期重新整理作業中使用的快照集。

使用串流分析,您可以在設定 SQL Database 輸入連線時設定重新整理的頻率。 串流分析執行階段將依重新整理頻率所指定的間隔,查詢您的 SQL 資料庫執行個體。 支援的最快重新整理頻率是每分鐘一次。 針對每次重新整理,串流分析都會在提供的儲存體帳戶中儲存新的快照集。

串流分析提供了兩個用於查詢 SQL 資料庫執行個體的選項。 快照集查詢是強制的,必須包含在每個作業中。 串流分析會依據您的重新整理間隔,定期執行快照集查詢。 其會使用查詢的結果 (快照集) 作為參考資料集。

快照集查詢應該符合大部分的案例。 如果您在使用大型資料集和密集的重新整理頻率時遇到效能問題,請使用差異查詢選項。 傳回參考資料集需要 60 秒以上時間的查詢會導致逾時。

使用差異查詢選項,串流分析最初會執行快照集查詢,以取得基準參考資料集。 之後,串流分析會根據您的重新整理間隔定期執行差異查詢,以擷取增量變更。 這些增量變更會持續套用至參考資料集,以讓其保持更新。 使用差異查詢選項可能有助於減少儲存成本和網路 I/O 作業。

設定 SQL Database 參考資料

若要設定 SQL Database 參考資料,您必須先建立參考資料輸入。 下表說明您在建立參考資料輸入及其描述時必須提供的每個屬性。 如需詳細資訊,請參閱將來自 SQL Database 的參考資料用於串流分析作業

您可以使用 Azure SQL 受控執行個體作為參考資料輸入。 您必須在 SQL 受控執行個體中設定公用端點。 然後在串流分析中手動設定下列設定。 以附加資料庫執行 SQL Server 的 Azure 虛擬機器,也可以透過手動進行下列設定來支援。

屬性名稱 描述
輸入別名 作業查詢中用來參考這個輸入的自訂名稱。
訂用帳戶 您的訂用帳戶。
資料庫 包含參考資料的 SQL 資料庫執行個體。 針對 SQL 受控執行個體,您必須指定連接埠 3342。 範例為 sampleserver.public.database.windows.net,3342
使用者名稱 與 SQL 資料庫執行個體相關聯的使用者名稱。
密碼 與 SQL 資料庫執行個體相關聯的密碼。
定期重新整理 此選項可讓您選取重新整理的頻率。 選取 [開啟],以 DD:HH:MM 格式指定重新整理的頻率。
快照集查詢 這個預設的查詢選項會從 SQL 資料庫執行個體中擷取參考資料。
差異查詢 對於具有大型資料集和重新整理頻率較短的進階案例,請新增差異查詢。

大小限制

使用小於 300 MB 的參考資料集以取得最佳效能。 有六個以上串流單位的作業支援 5 GB 以下的參考資料集。 使用大型參考資料集可能會影響作業的端對端延遲。

可以增加查詢複雜度,以納入具狀態的處理,例如視窗彙總、時態聯結和時態分析函式。 複雜度增加時,參考資料的支援大小上限會降低。

如果串流分析無法載入參考資料並執行複雜的作業,則作業會因記憶體不足而失敗。 在這種情況下,串流單位百分比使用率計量會達到 100%。

串流單位數量 建議大小
1 50 MB 以下
3 150 MB 以下
6 和以上 5 GB 以下

參考資料無法使用壓縮支援。 如需大於 300 MB 的參考資料集,請使用 SQL Database 作為來源並搭配差異查詢選項,以取得最佳效能。 如果在這類案例中未使用差異查詢選項,則每次重新整理參考資料集時,就會看到浮水印延遲計量的最大值。

在作業中聯結多個參考資料集

您只能將參考資料輸入聯結至串流輸入。 所以,若要聯結多個參考資料集,請將查詢分成多個步驟。 以下為範例:

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 作業

串流分析邊緣作業僅支援本機參考資料。 當作業部署到 IoT Edge 裝置時,會從使用者定義的檔案路徑載入參考資料。 在裝置上備妥參考資料檔案。

針對 Windows 容器,請將參考資料檔案放在本機磁碟機上,並將本機磁碟機與 Docker 容器共用。 針對 Linux 容器,請建立 Docker 磁碟區,並在磁碟區上填入資料檔案。

IoT Edge 上的參考資料會由部署觸發更新。 觸發之後,串流分析模組會挑選更新的資料,不會停止執行中的作業。

您可以透過兩種方式來更新參考資料:

  • 從 Azure 入口網站更新串流分析作業中的參考資料路徑。
  • 更新 IoT Edge 部署。

後續步驟