如何散列整个 Redshift 表?

Posted

技术标签:

【中文标题】如何散列整个 Redshift 表?【英文标题】:How to Hash an Entire Redshift Table? 【发布时间】:2019-05-03 00:11:29 【问题描述】:

我想对整个 redshift 表进行哈希处理,以便在升级、备份和其他不应该影响表数据的修改后检查一致性。

我找到了Hashing Tables to Ensure Consistency in Postgres, Redshift and mysql,但该解决方案仍然需要拼出每个列的名称和类型,因此不能以通用方式应用新表。我必须手动更改列名和类型。

是否有其他函数或方法可以让我对整个表进行哈希/校验和以确认它们是相同的?理想情况下,无需详细说明该表的特定列和列类型。

【问题讨论】:

如果您可以选择另一个像 Snowflake 这样支持表 docs.snowflake.net/manuals/sql-reference/functions/hash.html 哈希的数据库,请将您的表卸载到 s3 并加载到雪花中并运行哈希。 【参考方案1】:

Redshift 中当然没有内置功能来散列整个表。

另外,我会稍微注意那篇文章中建议的方法,因为据我所知,它正在计算列中所有值的哈希值,但没有将哈希值与行相关联标识符。因此,如果第 1 行和第 2 行交换列中的值,则哈希不会改变。所以,它不是严格计算一个足够的哈希值(但我可能错了!)。

您可以使用新的Stored Procedures in Redshift 进行调查,看看您是否可以创建适用于任何表的通用函数。

【讨论】:

以上是关于如何散列整个 Redshift 表?的主要内容,如果未能解决你的问题,请参考以下文章

如何将访问密钥和秘密密钥 shell 变量传递给 Redshift 复制命令

星型模式的 OLAP 或 OLTP?

使用 Amazon Redshift 进行维度建模是不是可行

在 Redshift 中更新整个表的正确方法,删除表 + 创建表与截断 + 插入表

Redshift 是优化块间搜索还是只扫描整个块?

如何控制 Redshift 中不断增加的数据量?