Sqoop處理Clob與Blob欄位

2021-07-03 12:38:40 字數 3186 閱讀 1199

[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...