Разместите несколько строк карты в одну строку карты - PullRequest
0 голосов
/ 05 августа 2020

У меня есть таблица ниже, из которой мне нужно получить отдельный account_id со всеми строками в оставшихся 2 столбцах как карту Пожалуйста, помогите мне исправить это, спасибо

Input

|  account_id    | fl_group_id          | fl_group_value          |
+----------------+----------------------+-------------------------+
| 1152956260987  | 10                   | 983                     |
| 1152956260987  | 12                   | 2144                    |
| 1152956260987  | 1                    | 82                      |

Ожидаемый результат

|  account_id    | account_flg
+----------------+----------------------
| 1152956260987  | {"10":"983","12":"2144","1":"82"} 

Я пробовал следующий запрос в улье

create table wf_test2 as select account_id, map(fl_group_id,fl_group_value) as account_flags from wf_test ;

select a.account_id,collect_set(a.account_flags)as account_flags from wf_test2 a where a.account_id='1152956260987' group by a.account_id ;

Но я получаю вывод как array<map<string,string>> вместо map<string,string>

| 1152956260987  | [{"10":"983"},{"12":"2144"},{"1":"82"}] |

Показать таблицу создания wf_test2

CREATE TABLE `wf_test2`(                           
   `account_id` string,                             
   `account_flags` map<string,string>)              
 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                                           
   'hdfs://hive/wf_test2'           
 TBLPROPERTIES (                                    
   'bucketing_version'='2',                         
   'transactional'='true',                          
   'transactional_properties'='default',            
   'transient_lastDdlTime'='1596648078') 

1 Ответ

0 голосов
/ 06 августа 2020

приведенный ниже подход может быть полезен в соответствии с комментариями @Hitobat в оболочке улья, используя репозиторий Maven brickhouse-0.6.0.jar - https://mvnrepository.com/artifact/com.klout/brickhouse

create table wf_test2 (account_id string, account_flags map<string,string>) row format delimited  fields terminated by ',' lines terminated by '\n' LOCATION '/stackoverflow/data/hive/dwh/wf_test2' stored as textfile;

insert overwrite table wf_test values ("1152956260987","10","983"),("1152956260987","12","2144"),("1152956260987","1","82");

select * from wf_test;

-- 1152956260987    10  983
-- 1152956260987    12  2144
-- 1152956260987    1   82

add jar file:///home/sathya/Downloads/brickhouse-0.6.0.jar;

create temporary function collect as 'brickhouse.udf.collect.CollectUDAF';

select account_id, collect(fl_group_id,fl_group_value) from wf_test group by account_id;

--- 1152956260987   {"10":"983","1":"82","12":"2144"}

create table wf_test2 (account_id string, account_flags map<string,string>) row format delimited  fields terminated by ',' lines terminated by '\n' stored as textfile;

insert overwrite table wf_test2 select account_id, collect(fl_group_id,fl_group_value) from wf_test group by account_id;

select * from wf_test2;

-- 1152956260987    {"10":"983","1":"82","12":"2144"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...