微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何处理列值中的分隔符?

如何解决如何处理列值中的分隔符?

我正在尝试将 CSV 文件数据加载到我的 Hive 表中,但它在一个列的值中有 delimiter(,) ,因此 Hive 将其作为分隔符并将其加载到新列中。我尝试使用转义序列 \ 但在这方面我也 \ (它不起作用并且总是在,之后在新列中加载数据。

我的 CSV 文件。:

        id,name,desc,per1,roll,age
        226,a1,"\"double bars","item1 and item2\"",0.0,10,25
        227,a2,"\"doubles","item2 & item3 item4\"",0.1,20,35
        228,a3,"\"double","item3 & item4 item5\"",0.2,30,45
        229,a4,"item5 & item6 item7\"",0.3,40,55

我已经更新了我的表格。:

    create table testing(id int,name string,desc string,uqc double,roll int,age int) 
    ROW   FORMAT SERDE 
    'org.apache.hadoop.hive.serde2.OpenCSVSerde'
     WITH SERDEPROPERTIES (
    "separatorChar" = ",","quoteChar" = '"',"escapeChar" = "\\" ) STORED AS textfile;

但我仍然在,之后获取不同列中的数据。

我在路径命令中使用加载数据。

解决方法

这是基于 RegexSerDe 创建表的方法。

每列在正则表达式中应该有对应的捕获组 ()。您可以使用 regex_replace 轻松调试正则表达式,而无需创建表:

select regexp_replace('226,a1,"\"double bars","item1 and item2\"",0.0,10,25','^(\\d+?),(.*?),"(.*)",([0-9.]*),([0-9]*),([0-9]*).*',--6 groups
                     '$1 $2 $3 $4 $5 $6'); --space delimited fields 

结果:

226 a1 "double bars","item1 and item2" 0.0 10 25

如果看起来不错,请创建表:

 create external table testing(id int,name string,desc string,uqc double,roll int,age int
                     ) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' 
WITH SERDEPROPERTIES ('input.regex'='^(\\d+?),([0-9]*).*')
location ....
TBLPROPERTIES("skip.header.line.count"="1")
;

阅读此article了解更多详情。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?