Я пытаюсь передать свои данные, находящиеся в базе данных оракула, в мою таблицу 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);
}
}