使用Hive Sed命令加载数据

时间:2014-11-12 21:42:26

标签: hadoop sed hive

我有这种格式的数据。

"123";"mybook1";"2002";"publisher1";
"456";"mybook2;the best seller";"2004";"publisher2";
"789";"mybook3";"2002";"publisher1";

字段用“”括起来并用;书名也可能包含';'介于两者之间。

您能告诉我如何将这些数据从文件加载到配置表

我现在使用的以下查询现在显然无效;

create table books (isbn string,title string,year string,publisher string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\;'

如果可能,我希望将userid和year字段存储为Int。请帮忙

另外我不想使用regexserde命令。 如何使用unix的sed命令清理数据并获取输出。

我试着了解sed命令并找到了替换选项。所以我可以删除“双引号。但我怎么能处理额外的;在数据中间的半冒号

请帮忙

2 个答案:

答案 0 :(得分:0)

我认为您可以使用sed进行预处理,然后使用MetadataTypedColumnsetSerDe WITH SERDEPROPERTIES

sed -r ':a; s/^([^"]*("[^"]*"[^"]*)*);/\1XXXXX/g; t a; s/;/ /g; s/XXXXX/;/g' file

sed与引号对匹配,以避免处理引号之间的内容,这些引号将分号的占位符放在引用文本之外。然后它从书名文本中删除;并用空格替换它们并放回引号外的分号。

有关如何使用Hive加载数据的更多信息,请参阅此处,其中包括MetadataTypedColumnsetSerDe WITH SERDEPROPERTIES

的示例

https://svn.apache.org/repos/asf/hive/trunk/serde/README.txt

答案 1 :(得分:0)

create external table books (isbn int,title string,year int,publisher string)

     row format SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH

     SERDEPROPERTIES ('separatorChar' = '\;' , 'quoteChar' = '\"' ) location 'S3 

    path/HDFS path for the file';