Sqoop处理clob包含换行符的情况
概要描述
CLOB字段从Oracle导入到inceptort时,如果CLOB中有换行符,在导入hdfs的时候,数据文件条数会对不上,这里提供demo及解决方案。
详细说明
1. 创建oracle原表,clob列包含换行符
--创建表
DROP TABLE tmp_clob;
CREATE TABLE tmp_clob (name VARCHAR2(200),age NUMBER, c_clob CLOB);
--插入包含换行符的数据
DECLARE
my_clob CLOB;
BEGIN
DBMS_LOB.CREATETEMPORARY(my_clob, TRUE);
DBMS_LOB.WRITE(my_clob, 12801, 1, RPAD('111111' || CHR(10), 12801, '1'));
INSERT INTO tmp_clob (name,age,c_clob) VALUES ('zhangsan',18,my_clob);
COMMIT;
END;
SELECT CASE WHEN INSTR(c_clob, CHR(10)) > 0 THEN 'EXITS' ELSE 'NOT EXISTS' END AS newline_check from tmp_clob; --EXISTS
2. 使用TDH-Client客户端集成的sqoop命令将oracle数据导入到hdfs路径下
sqoop import
--connect jdbc:oracle:thin:@172.22.23.9:1521/helowin
--username lkw
--password 123456
--table lkw.tmp_clob
--columns "name,age,c_clob"
--split-by age -m 4
--target-dir /tmp/dst_clob10
--fields-terminated-by "01"
--hive-drop-import-delims
--null-string 'N'
--null-non-string 'N'
从HDFS路径中查看导入的文件,可以看到有2条数据
[root@kv1~]# hdfs dfs -ls /tmp/dst_clob10
2024-04-16 14:56:50,742 INFO util.KerberosUtil: Using principal pattern: HTTP/_HOST
Found 2 items
-rw-r--r-- 3 hdfs hadoop 0 2024-04-16 14:55 /tmp/dst_clob10/_SUCCESS
-rw-r--r-- 3 hdfs hadoop 12814 2024-04-16 14:55 /tmp/dst_clob10/part-m-00000
[root@kv1~]# hdfs dfs -cat /tmp/dst_clob10/part-m-00000 | wc -l
2024-04-16 15:15:54,513 INFO util.KerberosUtil: Using principal pattern: HTTP/_HOST
2
这里如果通过创建inceptor外表的方式能看到数据换行
DROP TABLE IF EXISTS test_clob01;
CREATE EXTERNAL TABLE test_clob01
(NAME STRING ,AGE INT,C_CLOB BINARY)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '001'
LOCATION '/tmp/dst_clob10/';
解决方案
sqoop import
--connect jdbc:oracle:thin:@172.22.23.9:1521/helowin
--username lkw
--password 123456
--table lkw.tmp_clob
# 添加如下这行
--map-column-java c_clob=String
--columns "name,age,c_clob"
--split-by age -m 4
--target-dir /tmp/dst_clob12
--fields-terminated-by "01"
# !!!注意:这里必须要把`--hive-drop-import-delims`写上去
--hive-drop-import-delims
--null-string 'N'
--null-non-string 'N'
[root@kv1~]# hdfs dfs -ls /tmp/dst_clob12/
2024-04-16 15:15:45,446 INFO util.KerberosUtil: Using principal pattern: HTTP/_HOST
Found 2 items
-rw-r--r-- 3 hdfs hadoop 0 2024-04-16 15:15 /tmp/dst_clob12/_SUCCESS
-rw-r--r-- 3 hdfs hadoop 12813 2024-04-16 15:15 /tmp/dst_clob12/part-m-00000
[root@kv1~]# hdfs dfs -cat /tmp/dst_clob12/part-m-00000 | wc -l
2024-04-16 15:15:54,513 INFO util.KerberosUtil: Using principal pattern: HTTP/_HOST
1
Sqoop import参数选项 --hive-drop-import-delims
对CLOB中换行符是没有效果的,需要显示添加--map-column-java CLOB列名=String
,这样--hive-drop-import-delims
才能去除CLOB中的换行符。
阅读剩余
版权声明:
作者:admin
链接:https://9923456.xyz/400.html
文章版权归作者所有,未经允许请勿转载。
THE END