2017-01-25 10 views
1

Я новичок в таланте. Я пытаюсь читать данные из hbase и делать некоторые преобразования в данных в построителе выражений с помощью большой партии данных и записывать вывод в файл. enter image description hereИзвлечение строки строки из таблицы HBase в Talend

теперь я хочу, чтобы получить ключ строки таблицы и применять преобразования на нем, как показано ниже,

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

Здесь ключ является RowKey из Hbase таблицы, я рисую данные.

И im прикрепляет снимок вкладки отображения.

enter image description here

Так что, когда я в основном запустить свою работу, ключ таблицы Hbase должен быть подобран таким образом, что вышеописанное преобразование cast(cus.key as string) следует наносить на RowKey и хранится в виде идентификатора столбца.

Я хочу знать, есть ли у нас какой-либо простой способ получить rowkey из таблицы hbase?

Заранее спасибо.

+0

Я работал над проектом с hbase, и мы сделали это, чтобы вставить еще один столбец и поместить rowkey в., Чтобы вы могли использовать его как обычный столбец. –

+0

@ ThéoCapdet. Я хочу взять строку row из таблицы. мы должны делать это в таланте. –

+0

, когда вы загружаете таблицу hbase в первый раз, вам нужно создать столбец, в котором вы дублируете свою строку. –

ответ

1

Прежде всего, вам нужно создать специальную строку rowkey (в опции hbaseoutput) при загрузке данных в Hbase.

Вы можете использовать некоторое поле идентификатора, чтобы сделать его уникальным, как "key"+user_id.

Следуйте за этим: Here

В то же время, что вы делаете, что хранить такое же значение ("key"+user_id) в колонке, что вы называете row_key_technical (например)

Теперь вы можете использовать RowKey подобно нормальный столбец в вашей таблице. Таким образом, с помощью thbaseinput вы можете отыскать хранилище rowkey в техническом столбце и делать все, что хотите.

Вам нужно сделать это за два раза.

Я не уверен, что это единственное решение, но оно одно. У Мибе есть лучшее решение;).

+0

Вы хотите, чтобы я создал новую таблицу hbase из старой таблицы! это невозможно для меня. Я просто хочу получить ключ строки из таблицы hbase. –

+1

Я нашел обходное решение для извлечения ключа строки из таблицы hbase путем изменения кода класса hbaseInput в C: \ Program Files (x86) \ Talend-Studio \ studio \ plugins \ org.talend.designer.components.mrprovider_6.2.1. 20160704_1411 \ Components \ tHBaseInput –

1

Вы можете заставить свой компонент HbaseInput получить строку row таблицы Hbase. Выполните следующее, перейдите в место, где есть класс tHbaseInput.

C: \ Program Files (x86) \ Talend-Studio \ студия \ Plugins \ org.talend.designer.components.mrprovider_6.2.1.20160704_1411 \ Components \ tHBaseInput

И в tHBaseInput_mrcode_main_only Java реактивный класс, Там будет метод validateResult(), как показано ниже

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()%>")) 

После этого, удалите файл "ComponentsCache.javacache" в C: \ Program Files (x86) \ Talend-Studio \ студия \ configurat ион. И запустите открытую студию талантов. Теперь ваш компонент tHbaseInput будет извлекать ключ строки из таблицы Hbase. Это не рекомендуется для каждого случая, но если вы используете открытую студию talend для создания заданий и развертывания баннеров в другом месте, это может быть полезно.

Спасибо моему менеджеру проекта.