Sqoop處理Clob與Blob欄位

2021-09-07 05:59:51 字數 2924 閱讀 3735

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