使用hivesed命令加载数据

zpgglvta  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(258)

我有这种格式的数据。

"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选项。所以我可以去掉“双引号”。但我如何处理额外的;数据中间的分号
请帮忙

hyrbngr7

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

68de4m5k

68de4m5k2#

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';

相关问题