Hive 中'Stored as InputFormat, OutputFormat'和'Stored as'之间的差异



执行show create table时问题,然后执行结果create table语句,如果表为orc。


使用show create table,您得到了:

STORED AS INPUTFORMAT
  ‘org.apache.hadoop.hive.ql.io.orc.OrcInputFormat’
OUTPUTFORMAT
  ‘org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat’

但是,如果您使用这些子句创建表,然后选择时将获得铸造错误。错误喜欢:

异常失败 java.io.ioexception:java.lang.classcastException: org.apache.hadoop.hive.ql.io.orc.orcstruct不能施放到 org.apache.hadoop.io.binarycomparable


要解决此问题,只需将create table语句更改为STORED AS ORC

但是,正如答案在类似的问题中所说的那样:" inputformat,outputformat"&"存储为"在蜂巢中?。

我不知道原因。

STORED AS表示3件事:

  1. Serde
  2. inputformat
  3. outputformat

您仅定义了最后2个,而Serde将由 hive.default.serde

定义

hive.default.serde
默认值:org.apache.hadoop.hive.serde2.lazy.lazysimpleserde
添加:Hive 0.14与Hive-5976
默认的Serde Hive将用于未指定Serde的存储格式。
目前未指定SERDE的存储格式包括" textfile,rcfile"。

演示

hive.default.serde

set hive.default.serde;

hive.default.serde=org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

存储为ORC

create table mytable (i int) 
stored as orc;
show create table mytable;

请注意,Serde是'org.apache.hadoop.hive.ql.io.orc.OrcSerde'

CREATE TABLE `mytable`(
  `i` int)
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'
LOCATION
  'file:/home/cloudera/local_db/mytable'
TBLPROPERTIES (
  'COLUMN_STATS_ACCURATE'='{"BASIC_STATS":"true"}', 
  'numFiles'='0', 
  'numRows'='0', 
  'rawDataSize'='0', 
  'totalSize'='0', 
  'transient_lastDdlTime'='1496982059')

存储为inputformat ... outputformat ...

create table mytable2 (i int) 
STORED AS 
INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
;
show create table mytable2
;

请注意,Serde是'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'

CREATE TABLE `mytable2`(
  `i` int)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
  'file:/home/cloudera/local_db/mytable2'
TBLPROPERTIES (
  'COLUMN_STATS_ACCURATE'='{"BASIC_STATS":"true"}', 
  'numFiles'='0', 
  'numRows'='0', 
  'rawDataSize'='0', 
  'totalSize'='0', 
  'transient_lastDdlTime'='1496982426')

您在创建表时在STORED AS中指定INPUTFORMATSERDE,CC_11。Hive允许您将记录格式与文件格式分开。您可以为INPUTFORMATOUTPUTFORMATSERDE提供自定义类。请参阅详细信息:http://www.dummies.com/programming/big-data/hadoop/defining-table-record-formats-formats-in-hive/

另外,您可以简单地编写STORED AS ORCSTORED AS TEXTFILE。 存储为ORC语句已经关心INPUTFORMATOUTPUTFORMATSERDE。这使您不要为INPUTFORMATOUTPUTFORMATSERDE编写那些长期有资格的Java类名称。只是STORED AS ORC

最新更新