HiveSQL中複雜資料型別操作

2021-10-24 15:34:17 字數 4049 閱讀 6371

hivesql執行優化引數配置

hivesql常用資料處理語句

hivesql中複雜資料型別操作

hive有三種複雜資料型別array、map和struct,複雜資料型別允許任意層次的巢狀。

目錄

array型別

map型別

struct型別

name與locations之間製表符分隔,locations中元素之間逗號分隔,資料樣本集為:

zhangsan      beijing,shanghai,tianjin,hangzhou

lisi                 changchu,chengdu,wuhan,beijing

建表語句

create table hive_array(name string, work_locationsarray)

row format delimited fields terminated by '\t'

collection items terminated by ',';

匯入資料

load data local inpath '/home/zhangfei/data/work_locations.txt' overwrite into table hive_array;

常用查詢

select * from hive_array;

zhangsan      ["beijing","shanghai","tianjin","hangzhou"]

lisi                 ["changchu","chengdu","wuhan","beijing"]

array_contains常與where子句連用

select name, work_locations[0] location from hive_array;

--取array的第乙個元素  work_locations[0],同樣是採用下標的方式,下標從0開始

select name, size(work_locations) location from hive_array;

--取array的長度size(work_locations)

select * from hive_array where array_contains(work_locations,'tianjin');

--取判斷為ture的資料 array_contains(work_locations,'tianjin')

select explode(work_locations) from hive_array ;

--explode()會將陣列元素展開展示

注意:explode()函式只是生成了乙個資料的展示方式,無法在表中產生乙個新的資料列,即select name,explode(work_locations) from hive_array 會報錯的

資料格式

欄位與字段分隔符: 「,」;需要map欄位之間的分隔符:"#";map內部k-v分隔符:":"

zhangsan,  father:xiaoming     #mother:xiaohuang  #brother:xiaoxu,28

lisi,             father:mayun         #mother:huangyi     #brother:guanyu,22

wangwu,    father:wangjianlin  #mother:ruhua        #sister:jingtian,29

mayun,      father:mayongzhen#mother:angelababy,26

建表語句

create table hive_map(

id int, name string, members map, age int

)row format delimited

fields terminated by ','

collection items terminated by '#'  ---條目分隔符

map keys terminated by ':'

;  ---k-v分隔符

匯入資料

load data local inpath '/home/zhangfei/data/hive_map.txt' overwrite into table hive_map;

常用查詢

select * from hive_map;

zhangsan           28

lisi                           22

wangwu            29

mayun               26

查詢語句

select id, name, members['father'] father, members['mother'] mother, age from hive_map;

select id, name, map_keys(members) as relation from hive_map;

select id, name, map_values(members) as relation from hive_map;

select id,name,size(members) num from hive_map;

select * from hive_map where array_contains(map_keys(members), 'brother');

select id,name, members['brother'] brother from hive_map where array_contains(map_keys(members), 'brother');

資料格式

說明:字段之間#分割,第二個字段之間冒號分割

192.168.1.1 # zhangsan:40

192.168.1.2 # lisi:50

192.168.1.3 # wangwu:60

192.168.1.4 # zhaoliu:70

建表語句

create table hive_struct(

ip string, info struct

)row format delimited

fields terminated by '#'

collection items terminated by ':';

匯入資料

load data local inpath '/home/zhangfei/data/hive_struct.txt' into table hive_struct;

常用查詢

select * from hive_struct;

ip                      info

192.168.1.1    

192.168.1.2    

192.168.1.3    

192.168.1.4    

可直接通過.訪問資料

select ip, info.name from hive_struct;

192.168.1.1     zhangsan

192.168.1.2     lisi

192.168.1.3     wangwu

192.168.1.4     zhaoliu

複雜資料型別

1 在c語言中,除了之前學到的基本資料型別 整型,浮點型,字元型 外,還有指標型別和構造型別 結構型,聯合型,列舉型 2 結構體型別,用於把不同型別的資料組合成乙個集合體,宣告格式 struct 結構名 例如 includestruct students void main 結構體的特點是 表示更豐...

複雜資料型別

1結構體 相當於是高階語言裡的類,但是他沒有方法,也就是行為,只有屬性,也就是成員,結構體相當於是自定義類 宣告struct students 當我們需要使用結要用結構體裡的類的屬性時,我們需要通過 運算子來進行呼叫,比如 students.age 2列舉它被用來存放固定的不可改變的型別,比如說,四...

複雜資料型別

1 定義形式 指向的內容的型別 指標名 2 存在空指標 3 指標變數存的是位址。提到指標便會有乙個指向關係。4 指標可以動態申請陣列new。使用後可以delete 5 陣列名是乙個常指標。它指向的位址不再改變。6 指標 指標有當前指向的位置,也就是指標存的位址,加乙個此指標所指向的內容的位元組數大小...