hadoop - 使用 Hive Sed 命令加载数据

标签 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 '\;'

如果可能的话,我希望将用户 ID 和年份字段存储为 Int。请帮忙

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

我试图了解 sed 命令并找到了替换选项。所以我可以删除 "双引号。但是我该如何处理额外的 ; 数据中间的分号

请帮忙

最佳答案

我认为您可以使用 sed 进行预处理然后使用 MetadataTypedColumnsetSerDe WITH SERDEPROPERTIESsed -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/

相关文章:

java - 检测到 Sqoop 套接字超时 : Read timed out while reading data from Mainframe and insert into Hive

hadoop - 编译语句时出错:失败:ParseException行2:0无法识别表名中 'tblemployees' '[' 'empid'附近的输入

hadoop - 如何通过扩展 MetaStoreEventListener 编写 Hive 钩子(Hook)来访问元数据级别的事件变化

Hadoop Map-Reduce : what you can tell about a state: mappers: 80%, reducer :20%

hadoop - 这是正确的 apache spark 使用场景吗?

regex - bash 。如何在标签之间获取多行文本

sed - 使用 sed 替换/使用 TAB

hadoop - 在 mapreduce 中使用键值对的重要性是什么?

hadoop - 确定 Hive 表中的桶数

bash - 将文本从一个文件插入到另一个文件的开头 - bash