2015-08-11 1 views
0

Я пытаюсь передать свои данные, находящиеся в базе данных оракула, в мою таблицу HBase с использованием Sqoop. Я успешно могу это сделать, используя Java Sqoop client.Изменение данных при импорте из Oracle в HBase с использованием Sqoop

Однако в этом случае я выполняю только передачу и всегда использую hbase_row_key как «COL1, COL2».

Теперь я хочу сделать это до того, как я поместил данные в таблицу hbase, я хочу выбрать hbase_row_key, который должен быть «COl1, COL2», если присутствует COL2, если он отсутствует, hbase_row_key должен быть «" CO1, COL3 "(при условии, что COL3 всегда присутствует).

Я думаю, что использование пользовательского сопоставления вместо картографирования по умолчанию должно это сделать, но я не уверен, как это сделать с Sqoop. Как заставить Sqoop использовать пользовательский mapper перед вставкой . данные в HBase
Любая помощь в этом отношении будут высоко оценены Еще раз спасибо ..
Ниже мой Java sqoop код клиента:.!

import com.cloudera.sqoop.SqoopOptions; 
import com.cloudera.sqoop.tool.ImportTool; 

public class TestSqoopClient { 

    public static void main(String[] args) throws Exception { 
    SqoopOptions options = new SqoopOptions(); 
    options.setConnectString("my_database_connection_tring"); 
    options.setUsername("my_user"); 
    options.setPassword("my_password"); 
    options.setNumMappers(2);   // Default value is 4 
    //options.setSqlQuery("SELECT * FROM user_logs WHERE $CONDITIONS limit 10"); 
    options.setTableName("my_tablename"); 
    options.setWhereClause("my_where_condition"); 
    options.setSplitByCol("my_split_column"); 

    // HBase options 
    options.setHBaseTable("my_hbase_table_name"); 
    options.setHBaseColFamily("my_column_family"); 
    options.setCreateHBaseTable(false); // Create HBase table, if it does not exist 
    options.setHBaseRowKeyColumn("COL1,COL2"); 

    int ret = new ImportTool().run(options); 

} 

}

ответ