Hive文字列は複雑なフォーマットデータに変わります。
1、文字列をmapに変換する
strto_map(text[、delimiter 1、delimiter 2])は、2つのセパレータを使用してテキストをキーペアに分割します。Delimiter 1はテキストをK-Vペアに分け、Delimiter 2は各K-Vペアを分割します。delimiter 1のデフォルトのセパレータは''であり、delimiter 2のデフォルトのセパレータは'='である。例:
分割文字列関数:split文法: スプリット(string str、strigpat)の戻り値: array説明:pat文字列でstrを分割すると、分割された文字列配列が返されます。
例:
collectset関数:この関数の役割は、あるフィールドの値を小計し、Arayタイプフィールドを生成することです。
strto_map(text[、delimiter 1、delimiter 2])は、2つのセパレータを使用してテキストをキーペアに分割します。Delimiter 1はテキストをK-Vペアに分け、Delimiter 2は各K-Vペアを分割します。delimiter 1のデフォルトのセパレータは''であり、delimiter 2のデフォルトのセパレータは'='である。例:
select str_to_map('aaa:11&bbb:22', '&', ':');
select str_to_map('aaa:11&bbb:22', '&', ':')['aaa'];
select str_to_map('device_ds:2&uid_cnt:1','&',',') -- , Null
総合使用モデル:select a1.appkey,a1.appsource,index_key,index_value
from tab_sum a1
lateral view explode(str_to_map(concat('device_ds:',a1.device_ds_cnt,'&','uid_cnt:',a1.uid_cnt),'&',':')) mid_list_tab as index_key,index_value;
2、文字列をarrayに変換する分割文字列関数:split文法: スプリット(string str、strigpat)の戻り値: array説明:pat文字列でstrを分割すると、分割された文字列配列が返されます。
例:
select split('aaa:11:bbb:22',':');
["aaa","11","bbb","22"]
select split('aaa:11:bbb:22',':')[0];
aaa
3、文字フィールドをまとめ直してアラーにするcollectset関数:この関数の役割は、あるフィールドの値を小計し、Arayタイプフィールドを生成することです。
drop table if exists xxxxx_tabletest;
CREATE TABLE xxxxx_tabletest(
id string,
name string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'field.delim'=',',
'line.delim'='
',
'serialization.format'=',');
insert into xxxxx_tabletest(id,name)
values
('1','A'),
('1','C'),
('1','B'),
('2','B'),
('2','C'),
('2','D'),
('3','B'),
('3','C'),
('3','D');
select id,collect_set(name) from xxxxx_tabletest group by id;
OK
1 ["A","C","B"]
2 ["B","C","D"]
3 ["B","C","D"]
Time taken: 36.966 seconds, Fetched: 3 row(s)