在mysql/oracle新建列将现有几列连接起来作为其值以用sqoop导入到hbase时作为rowkey

在上一篇文章:

sqoop之从oracle导入hbase的问题与sqoop hbase 需要注意的一个问题

的最后我提出了一个待研究的问题:

对rdbms,如mysql中的一个表,假设有四列,由于hbase的rowkey设计好了会极大提高查询效率,一般将其rowkey用mysql中的三列组合起来,即假设mysql表中为:姓名,出生年月,地点,工资。可以令rowkey为姓名_出生年月_地点,如何实现呢,只需要在现有mysql表中,新建一列rowkey,执行一个update 语句

update mysqltable set rowkey=姓名_出生年月_地点

然后在sqoop import 进hbase时 制定rowkey  --hbase -row-key  rowkey

 

之所以将其当作问题,因为我在oracle下用 + 不能直接连接,

表名为testrowkey,列为 (id int, name varchar(10), address varchar(10),sola int, age int, rowkey varchar(50)),执行下面语句出错

update test set rowkey=name+address;

经过一番查找,在http://www.xker.com/page/e2011/0310/100428.html上找到相关东西

原来可以用concat连接两列字段,mysql,oracle,sqlserver里分别是以下句子来执行连接

•MySQL: CONCAT()
•Oracle: CONCAT(), ||
•SQL Server: +

而我之前用过sqlserver的+。
CONCAT() 的语法如下:
CONCAT(字串1, 字串2, 字串3, ...): 将字串1、字串2、字串3,等字串连在一起。请注意,Oracle的CONCAT()只允许两个参数;换言之,一次只能将两个字串串连起来。不过,在Oracle中,我们可以用'||'来一次串连多个字串。

经过实验,oracle中的||可以连接多个字符串(包含int型的值),我用

update testrowkey
set rowkey=name||'_'||address||'_'||sola

然后select,OK了。

解决了之后的rowkey问题。

还一个待解决的,sqoop import  …………--hive-import后 hive 中show tables不显示的问题。

你可能感兴趣的:(Sqoop,Hadoop,Hbase)