SQOOP 导入:删除 ORACLE CLOB 数据类型中的 pilcrow
Posted
技术标签:
【中文标题】SQOOP 导入:删除 ORACLE CLOB 数据类型中的 pilcrow【英文标题】:SQOOP Import : remove pilcrow in ORACLE CLOB data type 【发布时间】:2021-08-15 18:05:01 【问题描述】:我正在使用 sqoop 将 ORACLE 表导入 Hive (Hadoop)。 但是 ORACLE 表中的某些字段是带有“pilcrow”(¶) 的 CLOB 类型。 我想删除这些“枕头”(段落符号)。 有没有人有办法直接在sqoop命令或者sql里面做这个?
感谢您的帮助。
【问题讨论】:
我过去遇到过类似的问题,使用不同的 ASCII 扩展字符。对我来说最好的方法是创建一个函数来替换 clob 字符串中的这些字符并在您在 sqoop 中使用的 select 语句中调用该函数,或者使用该函数创建一个带有 select 的视图,然后在视图上运行 sqoop。如果你有兴趣,我可以提供一个clob函数的例子 @RobertoHernandez,如果你能做到(提供该功能或示例),我将不胜感激。谢谢。 我发布我的答案。如果您支持它,我将不胜感激。谢谢 【参考方案1】:正如我在 cmets 中告诉您的,让我向您展示一种实现此目的的方法,即使用 Oracle 中的函数替换 CLOB 字段中的任何字符
在下面的演示中,我使用 Oracle 12cR2 和 AL32UTF8 作为字符集。
SQL> create table dptos ( c1 number , c2 number , c3 clob );
Table created.
SQL> insert into dptos values ( 1 , 1, 'Clob Example with Ascii extended character € here' );
1 row created.
SQL> commit ;
Commit complete.
SQL> select * from dptos ;
C1 C2
---------- ----------
C3
--------------------------------------------------------------------------------
1 1
Clob Example with Ascii extended character € here
我的函数将模式(可以是字符或 ascii 函数)替换为另一个字符串或什么都没有
CREATE OR REPLACE FUNCTION CLOBREPLACE (p_input CLOB
, p_pattern VARCHAR2
, p_substitute CLOB)
RETURN CLOB
IS
C_MAXLEN CONSTANT NUMBER := 32000;
v_fclob CLOB := p_input;
v_foffset INTEGER;
v_fchunk CLOB;
BEGIN
IF LENGTH (p_substitute) > C_MAXLEN
THEN
v_foffset := 1;
v_fclob := REPLACE (v_fclob, p_pattern, '###CLOBREPLACE###');
<<replace_by_loop>>
WHILE v_foffset <= LENGTH (p_substitute)
LOOP
v_fchunk :=
SUBSTR (p_substitute, v_foffset, C_MAXLEN)
|| '###CLOBREPLACE###';
v_fclob := REGEXP_REPLACE (v_fclob, '###CLOBREPLACE###', v_fchunk);
v_foffset := v_foffset + C_MAXLEN;
END LOOP replace_by_loop;
v_fclob := REGEXP_REPLACE (v_fclob, '###CLOBREPLACE###', '');
ELSE
v_fclob := REPLACE (v_fclob, p_pattern, p_substitute);
END IF;
RETURN v_fclob;
END clobreplace;
/
让我们检查一下
SQL> select c1 , c2, clobreplace ( c3 , '€' , 'Euros' ) from dptos ;
C1 C2
---------- ----------
CLOBREPLACE(C3,'€','EUROS')
--------------------------------------------------------------------------------
1 1
Clob Example with Ascii extended character Euros here
如果您在从 sqoop 调用函数时遇到问题,您始终可以使用 select 创建一个视图,然后在该视图上运行 sqoop。
【讨论】:
以上是关于SQOOP 导入:删除 ORACLE CLOB 数据类型中的 pilcrow的主要内容,如果未能解决你的问题,请参考以下文章