Hive Orc中varchar的列大小

时间:2019-03-29 05:36:30

标签: hive orc

我在蜂巢中的orc格式有问题。 我用不同的格式,默认文本和orc创建2个表。如下:

CREATE TABLE `test_varchar_1`(
  `name` varchar(1)
)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
;

CREATE TABLE `test_varchar_2`(
  `name` varchar(1)
)
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'
;

然后,插入表格:

insert into test_varchar_1
select 'hello' as name union all
select '你好' as name --two Chinese characters,means 'hello'
;

insert into test_varchar_2
select 'hello' as name union all
select '你好' as name --two Chinese characters,means 'hello'
;

然后,选择表格:

hive> select name from test_varchar_1;
OK
h
你

hive> select name from test_varchar_2;
OK
h
�

在test_varchar_1中,结果是一个字母和一个字符,看起来正确。但是test_varchar_2(使用orc),无法获取字符。 看起来是一些utf8编码问题,还是其他问题?

顺便说一句,当我创建表以orc格式使用varchar(3)时,我可以获取3个字母和1个字符。

# test_varchar_3 use orc format and `name` is varchar(3)
hive> select name from test_varchar_3;
OK
hel
你

我想像默认文本一样更改orc varchar,意味着1 varchar的大小可以获取1个字母或1个字符。我该如何更改。 谢谢!

0 个答案:

没有答案