我有这种格式的数据。
"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命令并找到了替换选项。所以我可以删除“双引号。但我怎么能处理额外的;在数据中间的半冒号
请帮忙
答案 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';