[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可採用例如以下方法,實際上通過移位操作來實現:
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) }
對於hive能夠在入庫前轉換成string。或者直接入庫後使用udf來轉換
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...