sql—从配置单元表或unix中删除垃圾字符

tyg4sfes  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(351)

我们在配置单元中有如下所示的表,我们正在从配置单元数据生成平面文件,同时我们正在生成我们发现在如下所示的数据中有垃圾字符我们在许多列中有许多字符有谁能帮助我们从配置单元表或unix文件中删除这些垃圾字符?
ÿ,ä,í,ã
这里的问题相同的数据需要发送下游当他们加载到那里的数据库,它显示为双美元,但我们设计了代码双美元作为列分隔符。

iovurdzv

iovurdzv1#

基本概念

hive> select regexp_replace('Hÿelloä íworlãd','[^a-zA-Z ]','');
OK
Hello world

演示

从整个表中删除不需要的字符并将其导出到文件。

create table t (i int,s1 string,s2 string);
insert into t values (1,'Hÿelloä','íworlãd'),(2,'ãGããood','Byÿe');

select * from t;

+---+---------+---------+
| i | s1      | s2      |
+---+---------+---------+
| 1 | Hÿelloä | íworlãd |
| 2 | ãGããood | Byÿe    |
+---+---------+---------+
create external table t_ext (rec string) 
row format delimited 
fields terminated by '0' 
location '/user/hive/warehouse/t'
;
insert overwrite local directory '/tmp/t_ext'
select  regexp_replace(regexp_replace(rec,'[^a-zA-Z0-9 \\01]',''),'\\x01','<--->') 
from    t_ext
;
! ls /tmp/t_ext
;
000000_0
! cat /tmp/t_ext/000000_0
;
1<--->Hello<--->world
2<--->Good<--->Bye
z9smfwbn

z9smfwbn2#

只要您的表只包含“基本”类型(没有结构、数组、Map等),这种方法就可以工作。
我真的把信封推到这里了。

演示

create table t (i int, dt date, str string, ts timestamp, bl boolean);

insert into t select 1,current_date,'Hello world',current_timestamp,true;

select * from t;

+-----+------------+-------------+-------------------------+------+
| t.i |    t.dt    |    t.str    |          t.ts           | t.bl |
+-----+------------+-------------+-------------------------+------+
|   1 | 2017-03-14 | Hello world | 2017-03-14 14:37:28.889 | true |
+-----+------------+-------------+-------------------------+------+
select  regexp_replace
        (   
            printf(concat('%s',repeat('$$%s',field(unhex(1),*,unhex(1))-2)),*)
           ,'(\\$\\$)|[^a-zA-Z0-9 -]'
           ,'$1'
        )

from    t
;

1$$2017-03-14$$hello world$$2017-03-14 143728.889$$真实

相关问题