我怎么能忽略分号;在&当我从.csv文件创建Hive表时

时间:2014-12-23 21:05:13

标签: mysql csv hadoop hive

继续这个问题How can I make a Hive table from a .csv file which has one column with fields delimiited by semicolon ;

我的csv文件中的某些标题/发布商有"& amp&#34 ;;在它们中以及包含它们的行被误读,因为它们在&符号和分区末尾的分号上过早地被分割。

如何修改此代码:

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)之前对csv进行sanatize;但是可以告诉我如何在Hive或Hadoop的其他工具中做到这一点?

2 个答案:

答案 0 :(得分:0)

此帖子讨论了使用CSV时出现的类似问题和解决方案,引用的字符串包含逗号:http://dev.bizo.com/2010/11/csv-and-hive.html

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

答案 1 :(得分:0)

你能试试吗?

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