Hive文字列は複雑なフォーマットデータに変わります。

2092 ワード

1、文字列をmapに変換する
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)