Row格式serde是创建Hive表时要使用的必需参数

问题描述 投票:0回答:1

我在文本文件的顶部创建了一个临时的hive表,如下所示:

CREATE EXTERNAL TABLE tc (fc String,cno String,cs String,tr String,at String,act String,wa String,dn String,pnm String,rsk String,ttp String,tte String,aml String,pn String,ttn String) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ‘,’ 
STORED AS TEXTFILE 
location '/home/hbaseuser/tc';

然后我创建了一个这样的ORC表:

CREATE EXTERNAL TABLE tc1 (fc String,cno String,cs String,tr String,at String,act String,wa String,dn String,pnm String,rsk String,ttp String,tte String,aml String,pn String,ttn String) 
Row format delimited 
Fields terminated by '\t'
STORED AS orc 
location '/user/hbaseuser/tc1';

然后我用这个命令将数据导入hive表:

insert overwrite table tc1 select * from table tc;

现在orc文件可以在'/user/hbaseuser/tc1'获得,我可以从orc表中读取。

我的问题是标签行格式serde 'org.apache.hadoop.hive.contrib.serde2.ORCSerDe'的用途是什么

hadoop hive
1个回答
1
投票

当指定ROW FORMAT Serde时,它会覆盖本机Serde并将其用于表创建。根据文件,

您可以使用自定义SerDe或使用本机SerDe创建表。如果未指定ROW FORMAT或指定了ROW FORMAT DELIMITED,则使用本机SerDe。使用SERDE子句创建具有自定义SerDe的表。

STORED AS ORC声明相当于写作

 ROW FORMAT SERDE   'org.apache.hadoop.hive.ql.io.orc.OrcSerde'  
 STORED AS INPUTFORMAT  
 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'   OUTPUTFORMAT  
 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'

您可以使用“存储为”或“行格式服务”语句。您可以参考以下文档以获取更多详细信息:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-RowFormats&SerDe

https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-HiveSerDe

© www.soinside.com 2019 - 2024. All rights reserved.