我有这种格式的数据。
"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 '\;'
如果可能的话,我希望将用户 ID 和年份字段存储为 Int。请帮忙
我也不想使用 regexserde 命令。
如何使用 unix 中的 sed 命令清理数据并获取输出。
我试图了解 sed 命令并找到了替换选项。所以我可以删除 "双引号。但是我该如何处理额外的 ; 数据中间的分号
请帮忙
最佳答案
我认为您可以使用 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
关于hadoop - 使用 Hive Sed 命令加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26897155/