有些表没有指定主键、唯一键或组合键。
我们如何唯一地标识Vertica中的每个记录?
在这方面,Vertica是一个真正的关系数据库:如果没有声明标识符,则没有标识符。
它是柱状的
基于行的dbms有一种方法来物理地标识某一行的位置。例如,Oracle的ROWID就是从这里来的。
Vertica是列式的,你甚至不能找到排序顺序中第一列的实际位置:
例如,如果您将性别作为排序顺序中的第一列,并且该列被编码为运行长度编码(RLE),那么,在包含该列的文件中,例如,值'F',一个整数502,值'M'和一个整数498,对于包含1000行的表。
您可以计算所有列的哈希值(有哈希冲突的小风险),但是如果您有两行这样:
42 | Arthur Dent | 2022-01-25
42 | Arthur Dent | 2022-01-25
现在有一种方法可以区分一行和另一行。即使你使用
ROW_NUMBER() OVER(PARTITION BY <all_columns_of_the_table> )
,这将导致上面的一行得到1,另一行得到2-将无法确定哪个被分配给哪一行。
这是两种不完全令人满意的解决此行为的方法。这不是问题,而是一种行为特征。