繁体   English   中英

我如何忽略分号; 在&中,当我从.csv文件创建Hive表时

[英]How can I ignore the semicolon ; in the & when I am creating a Hive table from a .csv file

继续从这个问题开始, 我如何从.csv文件中创建一个Hive表,该文件具有一列,字段由分号代替;

我的csv文件中的某些标题/发布者带有“&amp”; 它们和包含它们的行被误读,因为它们在与号代码中以及每个字段的末尾在分号上过早地分裂了。

如何修改此代码:

CREATE TABLE books (ISBN STRING, Title STRING, Author STRING, Year STRING, Publisher STRING)
  ROW FORMAT DELIMITED FIELDS TERMINATED BY "\;";
LOAD DATA INPATH '/path/to/my/datafile' INTO TABLE books;

所以它不这样做吗?

我的csv文件中有问题的行示例为:

 0743403843;"Decipher";"Stel Pavlou";"2002";"Simon & Schuster (Trade Division)"

由于发布者列未被正确读取。

我了解我可以先手动清除(&amp); 但是可以告诉我如何在Hive或Hadoop的其他工具中做到这一点吗?

这篇文章讨论了使用CSV和带引号的字符串包含逗号时的类似问题和解决方案: http : //dev.bizo.com/2010/11/csv-and-hive.html

看起来可以将它们链接到的CSV-Serde配置为备用分隔符,因此它也应适用于您的格式。

你可以试试这个吗?

hive> CREATE TABLE test_regex(
    >     isbn STRING,
    >     title STRING,
    >     author STRING,
    >     year STRING,
    >     publisher STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' 
    >     WITH SERDEPROPERTIES ("input.regex" = 
    >     "(.*)\;\"(.*)\"\;\"(.*)\"\;\"(.*)\"\;\"(.*)\"",
    >     "output.format.string" = "%1$s %2$s %3$s %4$s %5s")
    >     STORED AS TEXTFILE;
OK
Time taken: 4.139 seconds

hive> load data local inpath 'input.csv' overwrite into table test_regex;
OK
Time taken: 0.393 seconds


hive> select isbn,publisher from test_regex;
ISBN    Publisher
0002005018  HarperFlamingo Canada
0399135782  Putnam Pub Group
0743403843  Simon & Schuster (Trade Division)
Time taken: 4.522 seconds

hive> select *from test_regex;
OK
ISBN    Title   Author  Year    Publisher
0002005018  Clara Callan    Richard Bruce Wright    2001    HarperFlamingo Canada
0399135782  The Kitchen God's Wife  Amy Tan 1991    Putnam Pub Group
0743403843  Decipher    Stel Pavlou 2002    Simon & Schuster (Trade Division)
Time taken: 0.253 seconds

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM