Redshift ROW_ID 列换行?

Posted

技术标签:

【中文标题】Redshift ROW_ID 列换行?【英文标题】:Redshift ROW_ID column wrapping? 【发布时间】:2021-05-12 05:45:28 【问题描述】:

Redshift 的 ROW_ID 列有点类似于 PostgreSQL 的 OID 列。 这是表中每条记录的“唯一”键,添加到每个表的隐藏列。

您是否希望 ROW_ID 在某个时候被包装?

在 PostreSQL 中,OID 列只有 32 位 -

OID 使用 4 字节无符号整数实现。他们不是 unique–OID 计数器将在 2³²-1 处环绕。 OID 也用于 识别数据类型(见 /usr/include/postgresql/server/catalog/pg_type_d.h)。

由于包装,PostgreSQL 中的 OID 并不是真正唯一的。

RedShift 中ROW_ID 的规模是多少?预计它们会在某个时候被包裹起来吗?我们可以期望ROW_ID 是独一无二的吗?单调递增?

找不到这方面的文档。

ps。 ROW_ID 至少记录在这里 https://docs.amazonaws.cn/en_us/redshift/latest/dg/c_load_compression_hidden_cols.html 但它可能已在更高版本的 Redshift 中被删除?谢谢

【问题讨论】:

【参考方案1】:

这是一个int8,所以是 64 位。您可以通过pg_attribute 对其进行检查。系统表指示raw 编码,我想我记得这对于该列的行为方式看起来是合理的(但其他两个系统列(MVCC 列)的行为不适合raw,我认为他们使用标记为runlength)。

我想知道它是否真的被使用过,因为我相信 Postgres 它已被淘汰,但 Redshift 最初来自 Postgres 8,我认为当时它仍在使用中。

至于单调增量,我没有看过,但我对此表示怀疑 - 你必须有一些中心点来分发数字,这将是一个严重的瓶颈。我可能猜它的行为类似于identity 列,其中每个切片独立生成数字,因此您最终会得到唯一的数字,并且始终是递增的,但不是连续的或单调的。如果我没记错的话,您不能使用SELECT 查询系统列(与 Postgres 不同)。您使用minvalueSTV_BLOCKLIST 中的maxvalue 查看它们的值的能力有限,因为int8 直接用于计算其排序键值,因此如果您将单行写入表中,您可以看到它是值,通过检查其排序键值。因此,如果您先写一行,然后再写第二行,然后删除第一行,然后进行清理,然后假设没有发生行重新编号(实际上它可能会这样做 - Postgres 在清理时会这样做),那么您将看到该值对于第二行。请记住使用排序键列,始终具有相同的值,以将所有行保留在一个切片中,因此您添加的行实际上都在同一个块中。

【讨论】:

以上是关于Redshift ROW_ID 列换行?的主要内容,如果未能解决你的问题,请参考以下文章

在 Bootstrap 4 中禁用列换行

如何使用 pandas 为整个列换行?

如何将表格中的一列换行,表格大小适合浏览器窗口

使用 flexbox 列换行的 Chrome v Firefox 中的垂直间距差异

获取 flexbox 列换行以使用全宽并最小化高度

c语言中 将数组列换行 行换列