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不显示的问题。