hive:为逗号分隔的文件创建表/数据类型语法

ui7jx7zq  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(482)

文本文件以逗号分隔。但是,其中一个列(例如:“issue”with value“other(phone,health club,etc)”也包含逗号。
问题:“问题”的数据类型应该是什么?我应该如何设置表的格式(行格式以结束符分隔),以便正确计算列(issue)中的逗号
我是这样安排的:

create table consumercomplaints (ComplaintID int,
                                  Product string,
                                  Subproduct string,
                                  Issue string,
                                  Subissue string,
                                  State string,
                                  ZIPcode int,
                                  Submittedvia string,
                                  Datereceived string,
                                  Datesenttocompany string,
                                  Company string,
                                  Companyresponse string,
                                  Timelyresponse string,
                                  Consumerdisputed string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
location '/user/hive/warehouse/mydb/consumer_complaints.csv';

示例数据--投诉id、产品、子产品、问题、子问题、状态、邮政编码、提交方式、接收日期、发送给公司的日期、公司、公司回复、及时回复?、消费者争议?943291,债务催收,继续尝试催收未欠债务,债务不是我的,mo,63123,网络,2014年7月18日,2014年7月18日,“增强型恢复公司”,以非货币救济方式关闭,是,943698,银行账户或服务,支票账户,存款和取款,ca,93030,网络,2014年7月18日,2014年7月18日,美国银行,进行中,是,943521,债务催收,,继续尝试收集未欠的债务,债务不是我的,哦,44116,网络,2014年7月18日,2014年7月18日,“vital solutions,inc.”,以解释结束,是,943400,债务收集,“其他(电话,健身俱乐部等)”,沟通策略,频繁或重复的电话,md,21133,网络,2014年7月18日,2014年7月18日,“the cbe group,inc.”,以解释结束,是,

h9vpoimq

h9vpoimq1#

我认为您需要使用control-a之类的控制字符来格式化输出数据。我不认为会有任何数据类型来支持这一点。或者您可以编写一个udf来加载数据并处理udf逻辑中的格式。

cbjzeqam

cbjzeqam2#

除了写一个serde,你可以做两件事,
在加载之前,使用一些字符对原始数据中的逗号进行转义。例如。 \ 然后用Hive create table 命令使用 row format delimited fields terminated by ',' escaped by**'\'** 您可以使用正则表达式来处理双引号中的逗号,因此首先要将正则表达式应用于数据,如hortonworks/apache手册所示, regexp_extract(col_value, '^(?:([^,]*)\,?){1}', 1) player_id source:https网址:www.archive.org/web/20171125014202/https://hortonworks.com/tutorial/how-to-process-data-with-apache-hive/ 确保您能够使用此表达式加载和查看数据(除非包含逗号)。然后修改表达式,使其包含逗号。你可以这样做, String s = "a,\"hi, I am here\",c,d,\"ahoy, mateys\""; String pattern ="^(?:([^\",]*|\"[^\"]*\"),?){4}"; p = Pattern.compile(pattern); Matcher m = p.matcher(s); if (m.find()) { System.out.println("YES-"+m.groupCount()); System.out.println("=>"+m.group(1)); } 通过将{4}改为{1},{2}。。。你可以得到各自的领域。

相关问题