我有这种格式的数据。
"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命令并找到了replace选项。所以我可以去掉“双引号”。但我如何处理额外的;数据中间的分号
请帮忙
2条答案
按热度按时间hyrbngr71#
我想你可以用
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
68de4m5k2#