2017-01-25 2 views
1

나는 재능있는 초보자입니다. hbase에서 데이터를 읽고 빅 데이터 배치를 사용하여 표현식 작성기의 데이터를 변환하고 파일에 출력을 쓰려고합니다. enter image description hereTalend의 HBase 테이블에서 행 키 검색

는 지금은

여기
(concat('-',cast(cus.key as string))) as id 

키 내가 데이터를 그리기있어 HBase를 테이블의 rowkey이며, 테이블의 행 키를 얻을 아래처럼의 변형을 적용 할.

그리고 매핑 탭의 스냅 샷을 첨부합니다. 기본적으로 내가 내 일을 실행하면 위의 변환 cast(cus.key as string)가 rowkey에 적용 열 ID로 저장해야합니다 있도록

enter image description here

은 그래서, HBase를 테이블의 키를 포착해야한다.

hbase 테이블에서 행키를 가져 오는 쉬운 방법이 있는지 알고 싶습니다.

미리 감사드립니다.

+0

나는 hbase를 사용하여 프로젝트에서 작업했습니다. 우리가 한 것은 다른 열을 삽입하고 행키를 넣는 것입니다. 따라서 일반 열처럼 사용할 수 있습니다. –

+0

@ ThéoCapdet table에서 행키를 가져오고 싶습니다. 어떻게합니까? 우리는 재능에서 그것을해야만합니다. –

+0

hbase 테이블을 처음으로로드 할 때, 내부에 행키를 복사 할 컬럼을 만들어야합니다. –

답변

1

먼저 Hbase에서 데이터를로드 할 때 (hbaseoutput 옵션에서) 사용자 정의 행 키를 만들어야합니다.

고유 한 ID 필드를 사용하여 "key"+user_id과 같이 고유하게 만들 수 있습니다.

이 따르 Here

당신이 그렇게 동시에, 당신은 row_key_technical (예를 들어) 이름 열에서 같은 값 ("key"+user_id) 이제

를 저장하면 같은 rowkey을 사용할 수 있습니다 귀하의 테이블에 정상적인 열. 따라서베이스 라인을 사용하여 기술 칼럼에서 rowkey 스토어를 검색하고 원하는 모든 작업을 수행 할 수 있습니다.

두 번에해야합니다.

이것이 유일한 해결책이 아닌 것은 확실하지만 그 중 하나입니다. Mybe 누군가가 더 나은 솔루션을 가지고;).

+0

이전 테이블에서 새로운 hbase 테이블을 만들길 원합니다 !! 이것은 나를 위해 가능하지 않습니다. 그냥 hbase 테이블에서 행 키를 검색하고 싶습니다. –

+1

C : \ Program Files (x86) \ Talend-Studio \ studio \ plugins \ org.talend.designer.components.mrprovider_6.2.1에서 hbaseInput 클래스의 코드를 변경하여 hbase 테이블에서 행 키를 검색 할 수있는 임시 해결책을 찾았습니다. 20160704_1411 \ components \ tHBaseInput –

1

HbaseInput 구성 요소가 Hbase 테이블의 행 키를 가져 오도록 할 수 있습니다. 다음을 수행하여 tHbaseInput 클래스가있는 위치로 이동하십시오.

C : \ 프로그램 파일 (86) \ Talend - 스튜디오 \ 스튜디오 \ 플러그인 \ org.talend.designer.components.mrprovider_6.2.1.20160704_1411 \ 구성 요소가

그리고에서 tHBaseInput

\ tHBaseInput_mrcode_main_only 자바 제트 클래스는 가,

public boolean validateResult(org.apache.hadoop.hbase.client.Result result, 
        <%=recordStruct%> value) throws IOException { 
       org.apache.hadoop.hbase.io.ImmutableBytesWritable rowKey = new org.apache.hadoop.hbase.io.ImmutableBytesWritable(); 
       rowKey.set(result.getRow()); 
       lastSuccessfulRow = rowKey.get(); 

       byte[] rowResult = null; 
       String temp = null; 

       <% 
       for (int i = 0; i < mapping.size(); i++) { 
        Map<String, String> map = mapping.get(i); 
        String family_column= map.get("FAMILY_COLUMN"); 
        IMetadataColumn column = mainColumns.get(i); 
        String columnName = column.getLabel(); 
        String defaultValue = column.getDefault(); 
        String typeToGenerate = JavaTypesManager.getTypeToGenerate(column.getTalendType(), column.isNullable()); 
        JavaType javaType = JavaTypesManager.getJavaTypeFromId(column.getTalendType()); 
        String patternValue = column.getPattern() == null || column.getPattern().trim().length() == 0 ? null : column.getPattern(); 
        boolean isPrimitiveType = JavaTypesManager.isJavaPrimitiveType(javaType, column.isNullable()); 
        String toAssign = "value." + columnName; 

        %> 

        rowResult = result.getValue(
          org.apache.hadoop.hbase.util.Bytes.toBytes(<%=family_column%>), 
          org.apache.hadoop.hbase.util.Bytes.toBytes("<%=column.getOriginalDbColumnName()%>")); 
        temp = org.apache.hadoop.hbase.util.Bytes.toString(rowResult); 

Modify the above method to below 

public boolean validateResult(org.apache.hadoop.hbase.client.Result result, 
      <%=recordStruct%> value) throws IOException { 
     org.apache.hadoop.hbase.io.ImmutableBytesWritable rowKey = new org.apache.hadoop.hbase.io.ImmutableBytesWritable(); 
     rowKey.set(result.getRow()); 
     lastSuccessfulRow = rowKey.get(); 

     byte[] rowResult = null; 
     String temp = null; 
     value.key = org.apache.hadoop.hbase.util.Bytes.toString(lastSuccessfulRow); 
     <% 
     for (int i = 0; i < mapping.size(); i++) { 
      Map<String, String> map = mapping.get(i); 
      String family_column= map.get("FAMILY_COLUMN"); 
      IMetadataColumn column = mainColumns.get(i); 
      String columnName = column.getLabel(); 
      String defaultValue = column.getDefault(); 
      String typeToGenerate = JavaTypesManager.getTypeToGenerate(column.getTalendType(), column.isNullable()); 
      JavaType javaType = JavaTypesManager.getJavaTypeFromId(column.getTalendType()); 
      String patternValue = column.getPattern() == null || column.getPattern().trim().length() == 0 ? null : column.getPattern(); 
      boolean isPrimitiveType = JavaTypesManager.isJavaPrimitiveType(javaType, column.isNullable()); 
      String toAssign = "value." + columnName; 

      %> 
      if(!"key".equalsIgnoreCase("<%=column.getOriginalDbColumnName()%>")) 

이 일단 완료 이하와 같은 방법 validateResult() 할 파일 "ComponentsCache.javacache"C에서 삭제합니다 : \의 Program Files (x86) \ Talend - 스튜디오 \ 스튜디오 \ configurat 이온. talend open studio를 다시 시작하십시오. 이제 tHbaseInput 구성 요소가 Hbase 테이블에서 행 키를 가져옵니다. 모든 경우에 권장되는 것은 아니지만 talend open studio를 사용하여 작업을 생성하고 다른 곳에서 jar를 배포하는 경우 유용 할 수 있습니다.

내 프로젝트 관리자에게 감사드립니다.

관련 문제