如何将 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的主要内容,如果未能解决你的问题,请参考以下文章