如何在没有主键的情况下唯一地标识Vertica数据库中的每条记录?



有些表没有指定主键、唯一键或组合键。

我们如何唯一地标识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-将无法确定哪个被分配给哪一行。

这是两种不完全令人满意的解决此行为的方法。这不是问题,而是一种行为特征。

相关内容

  • 没有找到相关文章

最新更新