[author]: kwu
sqoop處理clob與blob欄位,在oracle中clob為大文字,blob儲存二進位制檔案。遇到這類字段匯入hive或者hdfs需要特殊處理。
1、oracle中的測試表
create table
t_lob
(a integer,
b clob,
c blob
)
測試資料
insert into t_lob (a, b, c) values (1, 'clob測試',to_blob('3456'));
2、sqoop指令碼
import
--connect
jdbc:oracle:thin:@localhost:1521/orcl
--username
wuke
--password
abcd1234
--table
bdc_test.t_lob
--columns
"a,b,c"
--target-dir
/tmp/t_lob
-m1
執行指令碼
sqoop --options-file ./importhdfs.opt
3、檢視生成的hdfs檔案
可以看出,clob的字段是匯入到hdfs上是正常顯示文字,blob是二進位制檔案匯出到hdfs上顯示為16進製制
16進製制轉換為string可採用如下方法,實際上通過移位操作來實現:
對於hive可以在入庫前轉換成string,或者直接入庫後使用udf來轉換package com.ganymede.test;
傳換成小寫格式 ,/** * 十六進製制的轉換操作
* @author ganymede
* */
public class hex ;
/*** 用於建立十六進製制字元的輸出的大寫字元陣列
*/private static final char digits_upper = ;
/*** 將位元組陣列轉換為十六進製制字元陣列
* * @param data
* byte
* @return 十六進製制char
*/public static char encodehex(byte data)
/*** 將位元組陣列轉換為十六進製制字元陣列
* * @param data
* byte
* @param tolowercase
*true
false
傳換成大寫格式* @return 十六進製制char
*/public static char encodehex(byte data, boolean tolowercase)
/*** 將位元組陣列轉換為十六進製制字元陣列
* * @param data
* byte
* @param todigits
* 用於控制輸出的char
* @return 十六進製制char
*/protected static char encodehex(byte data, char todigits)
return out;
} /**
* 將位元組陣列轉換為十六進製制字串
* * @param data
* byte
* @return 十六進製制string
*/public static string encodehexstr(byte data)
/*** 將位元組陣列轉換為十六進製制字串
* * @param data
* byte
* @param tolowercase
*
true
傳換成小寫格式 ,false
傳換成大寫格式* @return 十六進製制string
*/public static string encodehexstr(byte data, boolean tolowercase)
/*** 將位元組陣列轉換為十六進製制字串
* * @param data
* byte
* @param todigits
* 用於控制輸出的char
* @return 十六進製制string
*/protected static string encodehexstr(byte data, char todigits)
/*** 將十六進製制字元陣列轉換為位元組陣列
* * @param data
* 十六進製制char
* @return byte
* @throws runtimeexception
* 如果源十六進製制字元陣列是乙個奇怪的長度,將丟擲執行時異常
*/public static byte decodehex(char data)
byte out = new byte[len >> 1];
// two characters form the hex value.
for (int i = 0, j = 0; j < len; i++)
return out;
} /**
* 將十六進製制字元轉換成乙個整數
* * @param ch
* 十六進製制char
* @param index
* 十六進製制字元在字元陣列中的位置
* @return 乙個整數
* @throws runtimeexception
* 當ch不是乙個合法的十六進製制字元時,丟擲執行時異常
*/protected static int todigit(char ch, int index)
return digit;
} public static void main(string args)
}
Sqoop處理Clob與Blob欄位
author kwu sqoop處理clob與blob欄位,在oracle中clob為大文字。blob儲存二進位制檔案。遇到這類字段匯入hive或者hdfs須要特殊處理。1 oracle中的測試表 create table t lob a integer,b clob,c blob 測試資料 ins...
oracle中clob或blob處理
oracle中clob或blob處理 create table document id number 16 not null,content clob null 資料insert處理 try catch sqlexception e catch sqlexception ex finally fin...
JDBC處理大文字之clob
概念性的內容就不多說了,不懂得可以參考api。下面直接貼出來 如何將clob型別的文字存入資料庫 將clob型別的資料寫入資料庫中 param student return throws exception public static int addstudent student student t...