#hive #orc
#улей #orc
Вопрос:
У меня проблема с форматом orc в hive. Я создаю 2 таблицы с разным форматом, текстом по умолчанию и orc. следующим образом:
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'
;
затем выберите tables:
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 или что-то еще?
Кстати, когда я создаю таблицу, используя varchar (3) в формате orc, я могу извлечь 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 переменной может содержать 1 букву или 1 символ.как я могу это изменить?
Спасибо!
Комментарии:
1. почему вы хотите использовать
varchar
тип данных с форматом ORC, а не string?2. @GaurangShah Я использую sqoop для импорта из mysql, типом данных которого является varchar. sqoop автоматически создает таблицу hive, например, используя hive varchar(50) для соответствия mysql varchar(50). итак, вот моя проблема. не удается получить 50 символов в таблице hive с помощью orc.
3. используйте
--map-column-java column_name=column_type
для сопоставления вашего столбца со строковым типом данных.4. @GaurangShah это работает. но так много таблиц и так много полей переменной. Я хочу простой способ.