Существует таблица Hive, которая определяется thrift.
struct A {
1: optional map<i16, string> myMap;
}
Я попытался выполнить несколько запросов для поиска в этой таблице.
// this one gets an error:
select myMap[10] from A where myMap[10] is not null
Строка 1:74Тип ключа MAP не соответствует типу выражения индекса '10'
И следующие два возвращают правильные результаты.
// this one works well
select myMap[10S] from A where myMap[10S] is not null
// this one works well
select myMap[10Y] from A where myMap[10Y] is not null
Я знаю 10Y
означает tinyint
и 10S
означает smallint
, а i16
- smallint
.
Но почему Hive разыгрывает smallint
до tinyint
вместо int
?
Я думаю, это может привести к потере информации или переполнению номера.