テーブルがORCの場合、show create table
を実行してから、結果のcreate table
ステートメントを実行するときに問題が発生します。
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
に変更するだけです。
しかし、同様の質問で答えが言ったように: Hiveの「InputFormat、OutputFormat」と「Storedas」の違いは何ですか? 。
理由がわかりません。
STORED AS
は、次の3つのことを意味します。
最後の2つだけを定義し、SERDEはHive.default.serdeで定義されます。
Hive.default.serde
デフォルト値:org.Apache.hadoop.Hive.serde2.lazy.LazySimpleSerDe
追加:Hive0.14とHive-5976
デフォルトのSerDeHiveは、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
でINPUTFORMAT
、OUTPUTFORMAT
、SERDE
を指定できます。 Hiveを使用すると、レコード形式をファイル形式から分離できます。 INPUTFORMAT
、OUTPUTFORMAT
、SERDE
のカスタムクラスを提供できます。詳細を参照してください: http://www.dummies.com/programming/big-data/hadoop/defining-table-record-formats-in-Hive/
または、たとえばSTORED AS ORC
またはSTORED AS TEXTFILE
と書くこともできます。 STORED AS ORCステートメントは、すでにINPUTFORMAT
、OUTPUTFORMAT
、およびSERDE
を処理します。これにより、完全修飾された長いJava INPUTFORMAT
、OUTPUTFORMAT
、SERDE
のクラス名を記述しないでください。STORED AS ORC
だけです。代わりに。