tft每日頭條

 > 科技

 > 請簡述hive 與傳統數據庫的區别

請簡述hive 與傳統數據庫的區别

科技 更新时间:2024-12-16 08:34:33

hive是基于Hadoop的一個數據倉庫工具,主要是用來進行數據的提取、轉化和加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。hive數據倉庫工具能将結構化的數據文件映射為一張數據庫表,并提供SQL查詢功能,能将SQL語句轉變成MapReduce任務來執行。它與關系型數據庫的SQL略有不同,但支持了絕大多數的語句。

在學習hive sql之前,我們需要對hive中常用的數據類型有一個基本的了解,這對于後面的學習會起到很大的幫助作用,如:建表、函數的使用、自定義函數等都需要考慮數據類型。

hive sql中的數據類型從大類上可分為如下兩類:基本數據類型和複雜數據類型。

其中基本數據類型和大多數關系型數據庫相近。

接下來我會詳細介紹hive sql中常用數據類型:

1、基本數據類型:

這裡主要對hive中常用的基本數據類型進行介紹,具體會從範圍和用途進行介紹。

(1)數值型:

數值型又可分為整數型和浮點型。

大類

類型

範圍

用途描述

整數型

tinyint

-128 ~ 127

1byte,有符号整數。

int

-2^32~ 2^32-1

4byte,有符号整數。

bigint

-2^64~ 2^64-1

8byte,有符号整數。

浮點型

float

-3.40E 38~ 3.40E 38

4byte,單精度,浮點數值。

double

-1.79E 308~ 1.79E 308

8byte,雙精度,浮點數值。

decimal(size,d)

高精度浮點型

任意精度,有符号小數。

說明:

1)DECIMAL(n,m)代表最多n位數字,m位小數;

2)如果沒有指定參數,那麼默認是DECIMAL(10,0),即沒有小數位。

(2)字符串型:

類型

用途描述

示例

char

固定長度的字符串,最大255。

"a",'b'

varchar

可變長度的字符串。

"a",'b'

string

可變長度的字符串。

"a",'b'

說明:hive中的string類型相當于mysql數據庫中的varchar類型,是一個可變的字符串數據類型。

(3)日期和時間型:

日期和時間型主要分為date(日期)和timestamp(時間戳)。

類型

用途描述

示例

timestamp

時間戳,納秒精度

1625733394

date

日期

"2021-07-09",'2021-07-09'

(4)布爾型:

在實際中,有時候需要對一個屬性進行判斷為“是”或“否”,這個時候就可以用到布爾類型的數據類型了。

類型

範圍

用途描述

boolean

布爾類型(取值範圍:true,false)

true/false

(5)其他類型:

類型

用途描述

binary

字節數組

2、複雜數據類型:

hive中常用的複雜數據類型有以下三類:ARRAY(數組)、MAP(鍵-值) 和 STRUCT(結構體)。

(1)array:

array表示一組相同數據類型的集合,索引從0開始,可以通過索引訪問數據。

例如:字段name的數據類型為數組array,數據[‘A’, ‘D’]可以通過索引獲取值,name[0]的值為A,name[1]的值為B。

語法:

array<data_type>

案例:獲取數組array類型的字段中的數據。

一、生成數據,以便用代碼實現:

1、創建表:

create table temp.user_address_temp(name string,address array<string>) row format delimited fields terminated by '\t' collection items terminated by ',';

說明:collection items terminated by ',' 指定數組中每個元素的分隔符;

2、插入數據,以便校驗結果:

insert into table temp.user_address_temp select '小希', ARRAY('深圳', '武漢', '北京') union all select '可可', ARRAY('北京', '天津') union all select '丸子', ARRAY('杭州', '南京') ;

3、查看表中的數據:

select * from temp.user_address_temp;

結果如下:

請簡述hive 與傳統數據庫的區别(數據分析sql入門篇-hive)1

二、查看結果,獲取數組字段中的數據,具體如下:

方法:通過訪問數組的序号可以獲取數組中對應位置的數據。

這裡分别獲取數組address中的第一個、第二個、第三個數據:

代碼如下:

select name, address[0] as first_values, -- address中的第一個數據 address[1] as second_values, -- address中的第二個數據 address[2] as third_values -- address中的第三個數據 from temp.user_address_temp ;

結果如下:

請簡述hive 與傳統數據庫的區别(數據分析sql入門篇-hive)2

說明:由于“可可”和“丸子”的地址中隻有兩個值,故取地址中的第三個位置的值時為空。

(2)map:

MAP是一組鍵-值對,key—value。

例如:字段tmp的數據類型為字典map,map('A', 1, 'B', 2)在表中的數據{'A':1, 'B':2}可以通過訪問key來獲取對應的value的值,tmp['A']的值為1。

語法:

map<primitive_type, data_type>

說明:

1)通過key可以訪問到value;

2)key不能重複,相同的key會相互覆蓋,value可以有相同的值;

3)primitive_type表示鍵的數據類型,data_type表示值的數據類型。

案例:獲取字典map類型字段中value的值。

一、生成數據,以便用代碼實現:

1、創建表:

create table temp.user_score_temp(name string,score map<string,int>) row format delimited fields terminated by '\t' collection items terminated by ',' map keys terminated by ':';

說明:

1)collection items terminated by ',' 指定map集合中每個元素之間的分隔符,一組key-value;

2)map keys terminated by ':' 指定每一個元素中key和value之間的分隔符。

2、插入數據,以便校驗結果:

insert into table temp.user_score_temp select '小希', MAP('數學', 89, '英語', 92) union all select '可可', MAP('語文', 79, '英語', 82) union all select '丸子', MAP('數學', 79, '英語', 68, '化學', 82) ;

3、查看表中的數據:

select * from temp.user_score_temp ;

請簡述hive 與傳統數據庫的區别(數據分析sql入門篇-hive)3

二、查看結果,獲取字典map類型字段中value的值,具體如下:

方法:可以通過取字典map類型字段的key來獲取value的值。

這裡分别獲取字典類型字段score中的數學與英語的成績數據:

代碼如下:

select name, score['數學'] as math_score, score['英語'] as english_score from temp.user_score_temp ;

結果如下:

請簡述hive 與傳統數據庫的區别(數據分析sql入門篇-hive)4

如果要獲取語文、化學成績,方法一樣的,隻要改一下score['a']中的a的值就可以了。

(3)struct:

struct是結構體,通過相關的不同類型的數據來描述一個數據對象。

例如:如果字段tmp的數據類型是struct{first string, last string},那麼第1個元素可以通過字段tmp.first來獲取。

語法:

struct<col_name1 : data_type1 [comment col_comment], col_name2 : data_type2 [comment col_comment], ...>

說明:

1)struct類型的字段,字段中各屬性的數據類型可以不同;

2)每個屬性所對應列的數據類型是一樣的。

案例:獲取struct類型字段中的元素。

一、生成數據,以便用代碼實現:

1、創建表:

create table temp.stu_info_temp(id int, info struct<name:string, address:string, age:int>) row format delimited fields terminated by '\t' collection items terminated by ',';

說明:collection items terminated by ',' 指定struct集合中每個元素之間的分隔符。

2、插入數據,以便校驗結果:

-- 方法1:使用insert into方法插入數據 insert into table temp.stu_info_temp select 1001, named_struct('name', '小希', 'address', '南京', 'age', 22) union all select 1002, named_struct('name', '丸子', 'address', '杭州', 'age', 20) union all select 1003, named_struct('name', '可可', 'address', '上海', 'age', 21) ; -- 方法2:使用load data加載數據 準備數據文件 struct.txt: id info 1001 小希,南京,22 1002 丸子,杭州,20 1003 可可,上海,21 加載數據: load data local inpath '/root/struct.txt' into table stu_info_temp;

注:這裡插入數據的時候用的是named_struct,如果使用struct會導緻和之前的字段中定義的屬性名無法對應。

3、查看表中的數據:

select * from temp.stu_info_temp ;

二、查看結果,獲取struct類型字段中的元素,通過.符号方法,具體如下:

方法:可以通過.符号方法訪問元素。

這裡分别獲取info中的姓名、地址和年齡的數據:

代碼如下:

select id, info.name as name, info.address as address, info.age as age from temp.stu_info_temp ;

結果如下:

請簡述hive 與傳統數據庫的區别(數據分析sql入門篇-hive)5

關于複雜數據類型這塊就介紹這麼多了,文章中給出了語法解釋和使用方法,也可以參考相應的案例進行學習。後面我會對複雜數據類型中數據的轉換相關的函數進行介紹,以便大家可以更好的進行數據的獲取和清洗,開展數據分析工作,敬請期待呀。

寄語:

我愛生活,喜歡記錄生活中的點滴;

我愛向日葵,喜歡看着她朝着太陽微笑的樣子,甚是可愛溫暖。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved