2017-04-03 14 views
0

HBase를 테이블에 독일어 텍스트를 넣어 다음내가 수행하여 독일어 문자열을 추가하여 테이블을 업데이트하려고

scan 'table:data_validation_test' 
ROW         COLUMN+CELL                        
58e1f4200f23e474ca2d7f3a   column=urlbody:data, timestamp=1491215905923, value=Ausl\xC3\xB6ser          
58e1f4200f23e474ca2d7f3a   column=urlbody:id, timestamp=1491215697534, value=58e1f4200f23e474ca2d7f3a 

내가 할 수 없습니다 : put'table:data_validation_test','58e1f4200f23e474ca2d7f3a','urlbody:data','Auslöser' 은 내가이 테이블을 스캔에 얻을 것이 이것이다 hbase에서 인코딩 문자열을 설정하는 방법을 찾으십시오. Hbase에있는 문자열을 어떻게 얻을 수 있습니까?

답변

1

이것은 단지 scan 명령의 출력 문제입니다 (get에서도 마찬가지 임). 실제로 문자열이 올바르게 저장됩니다. O (\xC3\xB6)이 2 바이트, \xC3\xB6 읽을 문자로 표시 할 수 없습니다에 인코딩되어 있기 때문에

이 여기에 발생합니다. HBase에서 기본 유형은 Array[Byte]입니다. 당신 (HBase와 쉘 내부) JRuby를를 사용하여 문자열 값을 얻기 위해 시도하는 경우

:

다음
include Java 
import org.apache.hadoop.hbase.HBaseConfiguration 
import org.apache.hadoop.hbase.client.HTable 
import org.apache.hadoop.hbase.client.Get 
import org.apache.hadoop.hbase.util.Bytes 

config = HBaseConfiguration.create 
htable = HTable.new(conf, 'table:data_validation_test') 
result = htable.get(Get.new('58e1f4200f23e474ca2d7f3a'.to_java_bytes)) 

puts Bytes.toString(result.getValue('urlbody'.to_java_bytes, 'data'.to_java_bytes)) 

, 당신의 값이 제대로 표시되어야합니다.