2017-10-24 1 views

답변

2

타임 스탬프는 열에 바인딩되며 행에는 바인딩되지 않습니다. 따라서 타임 스탬프로 필터링하면 행의 일부 열만 반환됩니다.

당신이 테이블 t1이있는 경우 : 당신이 타임 스탬프를 필터링 할 수 있습니다

ROW    COLUMN+CELL 
ID1    column=d:actif, timestamp=25, value=false 
ID1    column=d:name, timestamp=22, value="Sudipto" 
ID1    column=m:lastMaj, timestamp=25, value=25 
ID2    column=d:actif, timestamp=24, value=false 
ID2    column=m:lastMaj, timestamp=24, value=24 

:

scan 't1', { TIMERANGE => [0, 25] } 

을하지만 당신 만 반환합니다

ROW    COLUMN+CELL 
ID1    column=d:actif, timestamp=26, value=false 
ID1    column=m:lastMaj, timestamp=26, value=26 
ID2    column=d:actif, timestamp=24, value=false 
ID2    column=m:lastMaj, timestamp=24, value=24 

그래서 당신이 열을 잃게 :

ROW    COLUMN+CELL 
ID1    column=d:name, timestamp=22, value="Sudipto" 

그러나 모든 열을 원한다면 해결책이 있습니다. 메타 데이터 (여기에서 m : lastMaj)로 필터링 할 수 있습니다. 이 lastMaj 데이터는 행의 열을 수정할 때마다 업데이트되어야합니다. 난 개질 때 여기

  • 은 난 후 모든 행을 얻고 싶은 경우

  • (둘 다 25의 타임 스탬프를 가지고) "D : ACTIF를", 또한 "lastMaj m"변형 특정 타임 스탬프, 난 그냥 "m : lastMaj 타임 스탬프"에 행을 필터링합니다.

  • 명령

    은 될 수 쉘에서 값으로 스캔하기 : 당신의 코멘트 Tremo에 대한

    import org.apache.hadoop.hbase.filter.CompareFilter 
    import org.apache.hadoop.hbase.filter.SingleColumnValueFilter 
    import org.apache.hadoop.hbase.filter.SubstringComparator 
    import org.apache.hadoop.hbase.util.Bytes 
    scan 't', { FILTER => 
        SingleColumnValueFilter.new(
         Bytes.toBytes('m'), 
         Bytes.toBytes('lastMaj'), 
         CompareFilter::CompareOp.valueOf('GREATER'), 
         Bytes.toBytes('25')) 
    } 
    
+0

감사합니다. hbase shell에서 필터를 사용하는 방법에 대한 예제를 제공해 주시겠습니까? –

관련 문제