2012-12-13 30 views
1

一个非常简单的问题:这CityHash的版本背后隐藏的BigQuery的HASH功能?它总是最新的(今天v1.1),或者说是一个固定的版本?一致性HASH函数

现在,研究背景的一点点。我打算严重依赖BigQuery来存储大量数据。从这些数据,第一次,我想计算一些散列值并将其存储(如hashed_value = HASH(CONCAT(column_0, column_1)))。到现在为止还挺好。 在第二时间,我想与作为SELECT something FROM [mytable] WHERE hashed_value = HASH(CONCAT('12345', 'foobar'))这样的请求检索与给定散列值的行。 我的问题在于,它在CityHash网页上指定这些功能不应该向后兼容。所以,如果BigQuery的总是依赖于最新版本的CityHash,我将不能够根据下一个CityHash更新后的一些计算列的散列值来获取我的数据。而对于我的应用程序,我的大型数据库将基本上变得无用。

如果是的话,将有可能给访问固定(或向后兼容)散列函数,除了HASH?例如SHAMD等等,或者甚至是固定版本的CityHash。

谢谢。

回答

2

CityQuery在BigQuery中使用的版本是 http://code.google.com/p/cityhash/ 看着历史,它的价值看起来可能会随着时间而改变。这可能是一个好问题: https://groups.google.com/forum/?fromgroups#!forum/cityhash-discuss

BigQuery应该支持一致的散列。我们确实支持sha1,但现在由于编码问题,结果无法使用。但是,您可以执行SELECT TO_BASE64(SHA1(CONCAT('12345', 'foobar')))

请注意,我们很可能会在不久的将来更改SHA1以自动对base64进行编码结果。我提交了一个内部错误来做出这个改变。

+0

哦!那很棒。但我错过的离散参考大量查询[参考手册]'SHA1'(或'TO_BASE64')(https://developers.google.com/bigquery/docs/query-reference)?或者他们只是隐藏的功能?如果是这样,是否有可能获得这些隐藏报表的清单? – Olivier

+0

不,在我们的文档中没有提到sha1或to_base64。这些'尚未记录',因此'使用风险自负'。一些“隐藏的”声明可能是我们在公开发布前测试的功能。其中一些我们还没有得到记录。 –

+0

您会推荐什么BigQuery记录类型来存储160位散列值?有没有一个秘密的二进制数据类型? – cce