在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不顯示的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章