Можно ли обновить сложный тип данных в улье?пример: карта, массив, структура - PullRequest
0 голосов
/ 17 мая 2018

Интересно: возможно ли обновить сложный тип данных в улье?Например: map, array, struct Использование таблиц ACID и синтаксиса UPDATE?

например, у нас есть таблица:

CREATE TABLE complex_nested_types_update_array_map (
person_id int,
person_info MAP <STRING, ARRAY <STRING>>)
CLUSTERED BY (person_id) INTO 2 BUCKETS STORED AS ORC TBLPROPERTIES ("transactional"="true"); 

и вставка данных:

insert into table complex_nested_types_update_array_map 
SELECT 1, map('John', array("+44801123311", "+120342234", "+230342234", "+3303422434"));
insert into table complex_nested_types_update_array_map 
SELECT 2, map('Tomas', array("+380342234", "+230342234", "+230342234", "+530342234"));

Итак, мынаши данные в таблице:

select * from complex_nested_types_update_array_map order by person_id;

1   {"John":["+44801123311","+120342234","+230342234","+3303422434"]}
2   {"Tomas":["+380342234","+230342234","+230342234","+530342234"]}

Можно ли обновить определенный элемент массива без перезаписи всей строки?

Например:

UPDATE complex_nested_types_update_array_map SET
person_info = map('AAron', array("edited", "edited", "+230342234", "+3303422434"))
WHERE person_id = 2;

Обновлены данные:

select * from complex_nested_types_update_array_map order by person_id;

1   {"John":["+44801123311","+120342234","+230342234","+3303422434"]}
2   {"AAron":["edited","edited","+230342234","+3303422434"]}

Но можем ли мы обновить только [2] или только [3] элемент массива?

1 Ответ

0 голосов
/ 17 мая 2018

Использовать insert overwrite вариант.

insert overwrite table complex_nested_types_update_array_map 
select person_id,map('AAron', array("edited", "edited", "+230342234", "+3303422434")) as person_info
from complex_nested_types_update_array_map 
WHERE person_id = 2
union all
select person_id,person_info
from complex_nested_types_update_array_map 
where person_id<>2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...