【发布时间】:2019-11-08 14:37:02
【问题描述】:
我们有几个实体被持久化到 Amazon Redshift 中用于报告目的,这些实体之间存在关系。 Postgres 中的源表通过具有 UUID 数据类型的外键关联,Redshift 不支持这种数据类型。
一种选择是将 UUID 编码为 128 位有符号整数。 Redshift documentation 指的是创建 NUMBER(38,0) 的能力,以及创建 128 位数字的能力。
但是 2^128 = 340,282,366,920,938,463,463,374,607,431,768,211,456,即 39 位。 (感谢维基百科)。因此,无论文档怎么说,您都无法在 Redshift 中存储完整的 128 位/39 位精度。你如何在 Redshift 中创建一个完整的 128 位数字列?
简而言之,这背后的真正问题是 - Redshift 存储和连接具有 UUID 主键的表的最佳实践是什么?
【问题讨论】:
-
你可能已经硬着头皮使用
varchar(36) -
通过 varchar(38) 加入表格肯定是个坏主意?
-
没有你想的那么糟糕。我什至会争辩说,还有更多其他因素会影响性能,这些因素会使字符串比较黯然失色。确保使用
local "C"定义列(但不确定 Redshift 是否支持) -
我猜会试一试,也许可以尝试在它上面收集大量数据,看看它是否会导致问题。显然有no locale support。
标签: postgresql amazon-redshift uuid