HIVE_Hive Function_STR_TO_MAP 函數詳解

參考文章 :

https://blog.csdn.net/yuanyangsdo/article/details/64441165

 

本文主要講解下 HIVE 中 str_to_map 如何使用

 

函數介紹

 

我們先看下函數介紹:

map<string,string>

str_to_map(text[, delimiter1, delimiter2])

Splits text into key-value pairs using two delimiters. Delimiter1 separates text into K-V pairs, and Delimiter2 splits each K-V pair. Default delimiters are ',' for delimiter1 and '=' for delimiter2.

 

返回值類型  :

    map<string,string>

 

調用形式

str_to_map(text[, delimiter1, delimiter2])

 

函數介紹

Splits text into key-value pairs using two delimiters. Delimiter1 separates text into K-V pairs, and Delimiter2 splits each K-V pair. Default delimiters are ',' for delimiter1 and '=' for delimiter2.

 

Tips:

  delimiter1  第一個分割符指的是 多個 Key-Value 之間的分割符

  delimiter1 第二個分割符指的是  Key-Value 內部的分割符

 

案例

 

構造表 與 測試數據

USE data_warehouse_test;

CREATE TABLE IF NOT EXISTS explode_laterview_org(
	day1_num BIGINT
	,day2_num BIGINT
	,day3_num BIGINT
	,day4_num BIGINT
	,day5_num BIGINT
	,day6_num BIGINT
	,day7_num BIGINT
	,campaign_name STRING
	,campaign_id BIGINT
);


INSERT OVERWRITE TABLE explode_laterview_org VALUES 
(40, 20, 10, 4, 4, 2, 1, 'zoo', 2 )
,(100, 80, 53, 40, 7, 6, 5, 'moji', 3)
;

 

 

 

查詢 1

SELECT STR_TO_MAP(
                    CONCAT(
                        'day1_num=',CAST (day1_num AS STRING),
                        '&day2_num=',CAST (day2_num AS STRING),
                        '&day3_num=',CAST (day3_num AS STRING),
                        '&day4_num=',CAST (day4_num AS STRING),
                        '&day5_num=',CAST (day5_num AS STRING),
                        '&day6_num=',CAST (day6_num AS STRING),
                        '&day7_num=',CAST (day7_num AS STRING)
                    )
                ,'&', '=')
FROM explode_laterview_org
;

相當於是把每條記錄的 day1 -> day7 的留存構建了一個Map

 

結果

+----------------------------------------------------+
|                        _c0                         |
+----------------------------------------------------+
| {"day1_num":"40","day2_num":"20","day3_num":"10","day4_num":"4","day5_num":"4","day6_num":"2","day7_num":"1"} |
| {"day1_num":"100","day2_num":"80","day3_num":"53","day4_num":"40","day5_num":"7","day6_num":"6","day7_num":"5"} |
+----------------------------------------------------+
 

 

 

 

 

查詢2

對於 Map<String,String> 數據,可以通過  map_name['key_name']  獲取  Map 中指定 Key的 Value 數據。

 

示例: 

SELECT STR_TO_MAP(
					CONCAT(
						'day1_num=',CAST (day1_num AS STRING),
						'&day2_num=',CAST (day2_num AS STRING),
						'&day3_num=',CAST (day3_num AS STRING),
						'&day4_num=',CAST (day4_num AS STRING),
						'&day5_num=',CAST (day5_num AS STRING),
						'&day6_num=',CAST (day6_num AS STRING),
						'&day7_num=',CAST (day7_num AS STRING)
					)
				,'&', '=')['day1_num']
FROM explode_laterview_org
;

結果:

+------+
| _c0  |
+------+
| 40   |
| 100  |
+------+

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章