文本文件以逗号分隔。但是,其中一列ex:" 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,Web,07/18 / 2014,07 / 18/2014," Enhanced Recovery Company,LLC&#34 34;关闭非货币救济,是的, 943698,银行账户或服务,支票账户,存款和取款,CA,93030,网址,07/18 / 2014,07 / 18/2014,美国。 Bancorp,正在进行中,是的, 943521,债务催收,续集试图收回欠债的债务,债务不是我的,OH,44116,Web,07/18 / 2014,07 / 18/2014," Vital Solutions,Inc。& #34;,结束解释,是的, 943400,债务催收,"其他(电话,健身俱乐部等)",沟通策略,频繁或重复呼叫,MD,21133,Web,07/18 / 2014,07 / 18/2014, " CBE集团公司",结束并解释,是,
答案 0 :(得分:0)
我认为您需要通过某些控制字符(如Control-A)格式化输出数据。我不认为会有任何数据类型来支持这一点。或者,您可以编写UDF来加载数据并处理UDF逻辑中的格式化。
答案 1 :(得分:0)
如果没有写一个serde,你可以做两件事,
使用某个字符在加载前转义原始数据中的逗号。例如\
然后使用create table
row format delimited fields terminated by ',' escaped by **'\'**
命令
你可以使用一个正则表达式来处理双引号中的逗号,
所以首先你应用一个正则表达式数据,如hortonworks / apache手册中所示,
regexp_extract(col_value, '^(?:([^,]*)\,?){1}', 1) player_id
来源:http://hortonworks.com/hadoop-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},...您可以获得相应的字段。