2012-12-13 2 views
1

BigShery의 HASH 함수 뒤에 CityHash의 어떤 버전이 숨겨져 있습니까? 항상 최신 버전입니까 (오늘 v1.1) 또는 고정 버전입니까?해시 함수의 일관성

이제 약간의 배경색. 큰 데이터 세트를 저장하기 위해 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 이외에 고정 된 (또는 이전 버전과 호환되는) 해시 함수에 액세스 할 수 있습니까? 예를 들어 SHA, MD 등의 번호 하나 또는 고정 된 버전의 CityHash.

감사합니다.

답변

2

BigHery에서 사용되는 CityHash는 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

오! 훌륭합니다. 그러나 BigQuery [참조 설명서] (https://developers.google.com/bigquery/docs/query-reference)에서 'SHA1'(또는 'TO_BASE64')에 대한 개별 참조가 누락 되었습니까? 아니면 숨겨진 기능입니까? 그렇다면 숨겨진 진술 목록을 얻을 수 있습니까? – Olivier

+0

아니요, 문서에 sha1 또는 to_base64에 대한 참조가 없었습니다. 이들은 '아직 문서화되어 있지 않으므로'귀하의 책임하에 사용하십시오. 일부 '숨겨진'진술은 공개적으로 공개하기 전에 테스트하는 기능 일 수 있습니다. 그 중 일부는 아직 문서화하지 못했습니다. –

+0

160 비트 해시 값을 저장하기 위해 어떤 BigQuery 레코드 유형을 추천 하시겠습니까? 거기에 비밀 이진 데이터 유형이 있습니까? – cce