Hive復合資料結構簡介

2021-09-02 05:26:57 字數 3871 閱讀 7784

一般情況下,數倉儲存的資料型別都是整型(bigint),字串型(string),浮點型(double),但是有些時候也需要用到一些復合資料結構來儲存資料,常用的復合資料結構有map,array,struct,本文將主要針對這三種資料型別做乙個介紹

型別定義方法

描述array

array < data_type >

array陣列,主要是是以陣列形式儲存可以通過欄位名[0]進行訪問,其中0表示的是陣列中的第一位,以此類推

mapmap < primitive_type, data_type >

map資料型別,主要是以k:v形式進行儲存可以通過欄位名[『key』]進行訪問,將返回這個key對應的value

struct

struct < col_name : data_type [comment col_comment], …>

struct結構體,主要以結構體形式進行儲存可以通過欄位名.列名進行訪問,其中列名就是定義中的col_name

# 建立資料庫表

create

table score

(name string

, score mapint>

)row format delimited

fields

terminated

by'\t'

collection items terminated

by','

map keys

terminated

by':'

;# 要入庫的資料

biansutao '數學':80

,'語文':89

,'英語':95

jobs '語文':60

,'數學':80

,'英語':99

# 入庫資料

load

data

local inpath '/home/hadoop/score.txt' overwrite into

table score;

# 查詢

hive>

select

*from score;

biansutao

jobs

time taken: 0.665 seconds

hive>

select name from score;

jobs

biansutao

time taken: 19.778 seconds

hive>

select t.score from score t;

time taken: 19.353 seconds

hive>

select t.score[

'語文'

]from score t;

6089

time taken: 13.054 seconds

hive>

select t.score[

'英語'

]from score t;

9995

time taken: 13.769 seconds

# 建立資料庫表,以array作為資料型別

create

table person(

name string

,work_locations array

)row format delimited

fields

terminated

by'\t'

collection items terminated

by','

;# 資料

biansutao beijing,shanghai,tianjin,hangzhou

linan changchu,chengdu,wuhan

# 入庫資料

load

data

local inpath '/home/hadoop/person.txt' overwrite into

table person;

# 查詢

hive>

select

*from person;

biansutao [

"beijing"

,"shanghai"

,"tianjin"

,"hangzhou"

]linan [

"changchu"

,"chengdu"

,"wuhan"

]time taken: 0.355 seconds

hive>

select name from person;

linan

biansutao

time taken: 12.397 seconds

hive>

select work_locations[0]

from person;

changchu

beijing

time taken: 13.214 seconds

hive>

select work_locations from person;

["changchu"

,"chengdu"

,"wuhan"][

"beijing"

,"shanghai"

,"tianjin"

,"hangzhou"

]time taken: 13.755 seconds

hive>

select work_locations[3]

from person;

null

hangzhou

time taken: 12.722 seconds

hive>

select work_locations[4]

from person;

null

null

time taken: 15.958 seconds

# 建立資料表

create

table test(

id int

,course struct>

)row format delimited

fields

terminated

by'\t'

collection items terminated

by','

;# 資料

1 english,

802 math,

893 chinese,

95# 入庫

load

data

local inpath '/home/hadoop/test.txt' overwrite into

table test;

# 查詢

hive>

select

*from test;

ok1

2

3

time taken: 0.275 seconds

hive>

select course from test;

time taken: 44.968 seconds

select t.course.course from test t;

english

math

chinese

time taken: 15.827 seconds

hive>

select t.course.score from test t;

8089

95time taken: 13.235 seconds

hive中的復合資料型別

array中的資料為相同型別,例如,假如array a中元素 a b c 則a 1 的值為 b 資料結構如下 zhangsan beijing,shanghai,tianjin,hangzhou wangwu shanghai,chengdu,wuhan,haerbin create table c...

復合資料型別

復合資料型別 作用 封裝資料 多種不同型別資料存放在一起 應存放在全域性,在訪問結構體中的變數時,應用stu.id stu.name 初始化的方式 在對陣列進行初始化時 strcpy stu.name,zhangsan 在對指標進行初始化時 char name 對name進行初始化 stu.name...

復合資料型別

一 struct結構體 封裝資料 存放多種不同的資料型別 struct的宣告放在全域性區 1.宣告和定義 宣告 struct student struct student stu array 3 int i for i 0 i 3 i for i 0 i 3 i include struct stu...