行格式 serde 是创建 Hive 表时要使用的强制参数吗

Posted

技术标签:

【中文标题】行格式 serde 是创建 Hive 表时要使用的强制参数吗【英文标题】:Is Row format serde a compulsory parameter to be used while creating Hive table 【发布时间】:2018-10-16 09:25:58 【问题描述】:

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

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'可用 而且我可以从兽人表中读取数据。

我的问题是tag Row format serde 'org.apache.hadoop.hive.contrib.serde2.ORCSerDe'有什么用

【问题讨论】:

【参考方案1】:

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

您可以使用自定义 SerDe 或使用本机 SerDe 创建表。一种 如果未指定 ROW FORMAT 或 ROW FORMAT,则使用本机 SerDe 已指定 DELIMITED。使用 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'

您可以使用“Stored as”或“Row Format Serde”语句。您可以参考以下文档了解更多详情:

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

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

【讨论】:

谢谢尼修。我现在都准备好了 精彩的解释!

以上是关于行格式 serde 是创建 Hive 表时要使用的强制参数吗的主要内容,如果未能解决你的问题,请参考以下文章

Hive with Regex SerDe 拆分行,每个单词成为一列

hive工程实践

用于 ORC 或 RC 格式的 Hive Json SerDE

用于ORC或RC格式的Hive Json SerDE

在 Hive 中使用 Regex Serde 创建表返回错误

HIVE Row Formats和SerDe