本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
HyperLogLog 草圖
本主題說明如何在 Amazon Redshift 中使用 HyperLogLog 草圖。HyperLogLog 是計數-目的地問題的演算法,近似資料集中的不同元素數量。HyperLogLog 草圖是有關資料集的唯一性資料的陣列。
HyperLogLog 是用於估計多重集合基數的演算法。基數是指多重集合中相異值的數目。例如,在 {4,3,6,2,2,6,4,3,6,2,2,3} 的集合中,基數為 4,因為不同的值有 4、3、6 和 2。
HyperLogLog 演算法的精確度 (也稱為 m 值) 會影響估計基數的準確度。在基數估算期間,Amazon Redshift 會使用預設精確度值 15。針對較小的資料集,此值最多可以到 26。因此,平均相對誤差範圍介於 0.01–0.6% 之間。
計算多重集合的基數時,HyperLogLog 演算法會產生一個稱為 HLL 草圖的建構模組。HLL 草圖會封裝多重集合中不同值的相關資訊。Amazon Redshift 資料類型 HLLSKETCH 代表這類草圖值。此資料類型可用來將草圖儲存在 Amazon Redshift 資料表中。此外,Amazon Redshift 支援可套用至 HLLSKETCH 值來作為彙總和純量函數的操作。您可以使用這些函數來擷取 HLLSKETCH 的基數,並組合多個 HLLSKETCH 值。
從大型資料集擷取基數時,HLLSKETCH 資料類型可提供顯著的查詢效能優勢。您可以使用 HLLSKETCH 值預先彙總這些資料集,並將其儲存在資料表中。Amazon Redshift 可以直接從儲存的 HLLSKETCH 值擷取基數,而無需存取基礎資料集。
在處理 HLL 草圖時,Amazon Redshift 會執行最佳化,以最大程度地減少草圖的記憶體佔用量,並最大限度地提高所擷取基數的精確度。Amazon Redshift 會針對 HLL 草圖使用兩種表示法:稀疏和密集。HLLSKETCH 會以稀疏格式開始。當新值插入到其中時,其大小會增加。當其大小達到密集表示的大小後,Amazon Redshift 會自動將草圖從稀疏轉換為密集。
當草圖為稀疏格式時,Amazon Redshift 會將 HLLSKETCH 匯入、匯出和列印為 JSON。當草圖為密集格式時,Amazon Redshift 會將 HLLSKETCH 匯入、匯出和列印為 Base64 字串。如需 UNLOAD 的相關資訊,請參閱 卸載 HLLSKETCH 資料類型。若要將文字或逗號分隔值 (CSV) 資料匯入 Amazon Redshift,請使用 COPY 命令。如需詳細資訊,請參閱載入 HLLSKETCH 資料類型。
如需與 HyperLogLog 搭配使用的函數相關資訊,請參閱 HyperLogLog 檔函數。