我正在尝试使用Sqoop将我在oracle数据库中的数据传输到我的HBase表。我使用Java Sqoop客户端成功地做到了这一点。
但是在这种情况下,我只进行传输并始终使用hbase_row_key作为" COL1,COL2和#34;。
现在我想做的是在我输入hbase表中的数据之前,我想决定hbase_row_key应该是" COl1,COL2"如果存在COL2,如果不存在,则hbase_row_key应为"" COl1,COL3" (假设COL3始终存在)。
我认为使用自定义映射器而不是默认映射器应该这样做,但我不知道如何使用Sqoop。如何在将数据插入HBase之前使Sqoop使用自定义映射器 在这方面的任何帮助将受到高度赞赏。 再次感谢!.. 下面是我的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);
}
}
答案 0 :(得分:0)
通过编写自定义PutTransformer,查看http://sqoop.apache.org/docs/1.4.6/SqoopDevGuide.html#_hbase_serialization_extensions中指定的扩展HBase代码。