具有跨行相似性的 VARCHAR 良好编码

Good encoding for VARCHAR with similarity across rows

什么是 VARCHAR 列的良好 Amazon Redshift 列编码,其中每行包含一个短值(通常为 50-100 个字符),几乎没有重复,但各行之间的相似度很高? (特别是相同的前缀。)

令人抓狂的简洁 LZO description 听起来就像 LZO 被单独应用于每个值。在那种情况下,行之间将没有共享字典,并且几乎没有可利用的共性。 OTOH,如果将 LZO 应用于写入磁盘的整个 1 MB 值块,它会表现良好。

Byte Dictionary 听起来它只在值相同而不是相似时才产生节省,所以不是一个好的选择。

按块应用压缩,这意味着 LZO 几乎总是 VARCHAR 的正确选择。大多数其他替代方案要求值要么与其他值完全相同(例如 BYTEDICTRUNLENGTH),要么是数字(例如 DELTAMOSTLY8)。

VARCHARS 的唯一替代方案是 TEXT255/TEXT32K,它可能适用于您的用例。他们构建前 N 个单词的字典(TEXT255 为 245 个,TEXT32K 为变量),并用单字节索引替换这些单词的出现。如果您的价值观共享很多词,那么 TEXT255 可能比 LZO.

更有效