如何将 ABS(HASH(...)) 从传统 sql 转换为标准 SQL

Posted

技术标签:

【中文标题】如何将 ABS(HASH(...)) 从传统 sql 转换为标准 SQL【英文标题】:How to convert ABS(HASH(...)) from Legacy sql to Standard SQL 【发布时间】:2017-08-08 23:34:04 【问题描述】:

在 Legacy sql 中,我们可以通过SELECT ABS(HASH('12345')) 来获取一个值的唯一哈希号。

我正在将旧版 sql 转换为 GBQ 中的标准 sql, 所以想知道转换上述函数的最佳方法是什么,以便它给我与旧 sql 相同的值。

【问题讨论】:

【参考方案1】:

我们不会公开返回与旧版 SQL 相同值的函数;它使用未记录的实现。使用标准 SQL 时最接近的等价物是 FARM_FINGERPRINT,它使用 open-source FarmHash library。

对于您提供的表达式,您可以改用ABS(FARM_FINGERPRINT('12345'))

【讨论】:

啊,理想情况下,当您希望用户从旧版迁移到标准版时,应该有类似的功能。如果没有标准 sql 中的类似实现,我将不得不在遗留 sql 中保留一些查询以及标准 sql 中的任何新内容。我希望谷歌不会很快放弃对旧版 sql 的支持。 只是为了澄清,这些散列 id 在使用中是永久性的,客户已经在使用它,所以现在不能改变,这就是我不能将该查询切换到具有不同散列的标准 sql 的原因算法 是的,这很不幸。如果FARM_FINGERPRINT 也可用于旧版 SQL,是否可以迁移? 是的,如果google在这两种sql中都提供了相同的hash函数,那么对于很多用户的迁移都是非常有帮助的,以后可以轻松迁移。 我代表您提交了a feature request。您可以对其加注星标以表达兴趣并获取更新。谢谢!

以上是关于如何将 ABS(HASH(...)) 从传统 sql 转换为标准 SQL的主要内容,如果未能解决你的问题,请参考以下文章

simhash算法

散列(hash)

散列(hash)

将Sonarqube从嵌入式H2切换到支持的数据库

UIWebView 从本地文件系统加载 HTML 文件

一致性hash