摸魚大數據——Hive表操作——復雜類型

1、hvie的SerDe機制

其中ROW FORMAT是語法關鍵字,DELIMITED和SERDE二選其一。本次我們主要學習DELIMITED關鍵字相關知識點
如果使用delimited: 表示底層默認使用的Serde類:LazySimpleSerDe類來處理數據。
如果使用serde:表示指定其他的Serde類來處理數據,支持用戶自定義SerDe類。

Hive默認的序列化類: LazySimpleSerDe
包含4種子語法,分別用于指定字段之間、集合元素之間、map映射 kv之間、換行的分隔符號。
在建表的時候可以根據數據的類型特點靈活搭配使用。
COLLECTION ITEMS TERMINATED BY '分隔符' : 指定集合類型(array)/結構類型(struct)元素的分隔符
MAP KEYS TERMINATED BY '分隔符' : 表示映射類型(map)鍵值對之間用的分隔

2、復雜類型
復雜類型建表格式: 
...
[row format delimited] # hive的serde機制[fields terminated by '字段分隔符'] # 自定義字段分隔符固定格式[collection ITEMS terminated by '集合分隔符'] # 自定義array同類型集合和struct不同類型集合[map KEYS terminated by '鍵值對分隔符'] # 自定義map映射kv類型[lines terminated by '\n'] # # 默認即可
...;
?
hive復雜類型: array struct map
?
array類型: 又叫做數組類型。用來存儲相同類型的數據集合建表指定類型:  array<元素的數據類型>取值: 字段名[索引/下標/角標]。索引是從0開始獲取長度: size(字段名)判斷是否包含某個數據: array_contains(字段名)
?
struct類型:又叫做結構類型。可以存儲不同了類型的數據集合建表指定類型: struct<字段名稱1:數據類型,字段名稱2:數據類型...>取值: 字段名.key鍵的名稱map類型: 又叫做映射類型。存儲的是key-value鍵值對數據建表指定類型: map<key的類型,value的類型>取值: 字段名[key的名稱]獲取長度: size(字段名),實際獲取的是key-value鍵值對的對數獲取所有key: map_keys(字段名)獲取所有value: map_values(字段名)

3、array示例

需求: 已知data_for_array_type.txt文件,存儲了學生以及居住過的城市信息,要求建hive表把對應的數據存儲起來

use day07;
?
-- 創建表
create table array_tb(name string,work_location array<string>
)
row format delimited fields terminated by '\t'
collection items terminated by ','; -- 指定array數組中元素間的分隔符
?
?
-- load加載數據
load data inpath '/dir/data_for_array_type.txt' into table array_tb;
?
-- 驗證數據
select * from array_tb;
?
-- array專有的操作
-- 函數:具備特殊功能的代碼,例如size
-- size(work_location) 統計數組中有多少個元素。該案例中也就是統計你去多少個城市工作過
select name,size(work_location) as city_cnt from array_tb;
?
-- 數組字段名稱[索引/下標/角標]。索引是從0開始
select name,work_location[-1] from array_tb;
select name,work_location[0] from array_tb; -- 取數組中的第一個元素
select name,work_location[1] from array_tb; -- 取數組中的第二個元素
select name,work_location[10] from array_tb; -- 如果根據索引取不到對應的元素,那么返回的是null空值。null值(你沒有去參加考試)和0(參加考試,但是考了0分)是不一樣
?
-- 判斷數組中是否存在某個元素/數據
-- array_contains:是一個函數,用來判斷元素在數組中是否存在。如果存在返回true;如果不存在返回false
select name,array_contains(work_location,"chengdu") from array_tb;

4、struct示例

需求: 已知data_for_struct_type.txt文件存儲了用戶姓名和年齡基本信息,要求建hive表把對應的數據存儲起來

use day07;
?
-- 創建表
create external table singer_struct(id int,info struct<name:string,num:int>
)row format delimited fields terminated by '#'
collection items terminated by ':';-- 指定struct中元素間的分隔符
?
-- 加載數據
load data inpath '/dir/data_for_struct_type.txt' into table singer_struct;
?
-- 驗證數據
select * from singer_struct;
?
-- struct中特有的操作
-- 如果想要看struct中的具體信息,需要通過 struct字段名稱.key鍵
select id,info.name,info.num from singer_struct;
select id,info.name,info.num,info.aaaa from singer_struct;
?
-- struct中不支持size()函數
-- select id,size(info) from singer_struct;

原因: 如果訪問struct中不存在的key會報如上的問題。

5、map示例

需求: 已知data_for_map_type.txt文件存儲了每個學生詳細的家庭信息,要求建hive表把對應數據存儲起來

use day07;
?
-- 創建表
create table star_map(id int,name string,family map<string,string>, -- 前面的string是key的數據類型,后面的string是value的數據類型age int
)row format delimited fields terminated by ',' -- 指定字段間的分隔符
collection items terminated by '#' -- 指定map中key-value鍵值對間的分隔符
map keys terminated by ':'; -- 指定key-value鍵值對里面的分隔符
?
-- load導入數據到Hive表中
load data inpath '/dir/data_for_map_type.txt' into table star_map;
?
-- 數據驗證
select * from star_map;
?
-- map數據類型的特殊操作
select id,name,age,family['father'] as father,family['mother'] as mother from star_map;
?
-- 獲取map中所有key的信息
select id,name,age,map_keys(family) as keys from star_map;
?
-- 獲取map中所有key的信息,之后,再通過array獲取數據的方式,獲取指定索引的元素值
select id,name,age,map_keys(family),map_keys(family)[1] as keys from star_map;
?
?
-- 獲取map中所有value的信息
select id,name,age,map_values(family) as keys from star_map;
-- 獲取map中所有value的信息,之后,再通過array獲取數據的方式,獲取指定索引的元素值
select id,name,age,map_values(family),map_values(family)[2] as keys from star_map;
?
-- size函數:在map中,是用來獲取key-value鍵值對的對數
select id,name,age,size(family) from star_map;
?
-- array_contains函數
select id,name,age,map_keys(family),array_contains(map_keys(family),"brother") from star_map;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18849.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18849.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18849.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【python 進階】 繪圖

1. 將多個柱狀繪制在一個圖中 import seaborn as sns import matplotlib.pyplot as plt import numpy as np import pandas as pd# 創建示例數據 categories [A, B, C, D, E] values1 np.random.randint(1, 10, sizelen(categories)) values2 np.random.randint(1, 10, siz…

代碼隨想錄35期Day53-Java

Day53題目 LeetCode.1143最長公共子序列 核心思想:這道題是我動態規劃的啟蒙題目,已經做了很多遍了,dp數組的變化方法是:相同則是左上角1, 不相同則是上和左中的最大值 class Solution {public int longestCommonSubsequence(String text1, String text2) {int[][] dp new …

前端Vue自定義輪播圖組件的設計與實現

摘要 隨著技術的發展&#xff0c;前端開發的復雜性日益增加。傳統的整塊應用開發方式在面對頻繁的功能更新和修改時&#xff0c;往往導致整體邏輯的變動&#xff0c;從而增加了開發和維護的難度。為了應對這一挑戰&#xff0c;組件化開發應運而生。本文將以Vue中的自定義輪播圖…

GEE 利用增強的Sentinel-2像元物候特征精確提取水稻分布

題目&#xff1a;An enhanced pixel-based phenological feature for accurate paddy ricemapping with Sentinel-2 imagery in Google Earth Engine 期刊&#xff1a;ISPRS Journal of Photogrammetry and Remote Sensing&#xff08;IF:14.9&#xff09; 第一作者&#xff1a…

HiWoo Box工業4G網關

在飛速發展的工業4.0時代&#xff0c;數據已成為驅動工廠智能化、自動化的核心力量。而如何將這些散布在工廠各個角落的數據高效、安全地匯集起來&#xff0c;成為企業提升生產效率、降低運營成本的關鍵。今天&#xff0c;我們將為您介紹一款4G網關產品——HiWoo Box&#xff0…

揭秘SQL中的公用表表達式:數據查詢的新寵兒

歡迎來到我的博客&#xff0c;代碼的世界里&#xff0c;每一行都是一個故事 揭秘SQL中的公用表表達式&#xff1a;數據查詢的新寵兒 前言公用表表述的概述非遞歸CTE的作用遞歸CTE的作用CTE性能優化 前言 你是否曾經為SQL查詢的復雜性而困擾不已&#xff1f;尤其是那些讀寫層子…

服務器數據恢復—RAID5陣列崩潰如何恢復上層OA和oracle數據庫的數據?

服務器數據恢復環境&故障&#xff1a; 某公司的一臺服務器中的raid5磁盤陣列有兩塊磁盤先后掉線&#xff0c;服務器崩潰。故障服務器的操作系統為linux&#xff0c;操作系統部署了oa&#xff0c;數據庫為oracle。oracle數據庫已經不再對該oa系統提供后續支持&#xff0c;用…

圖形學初識--矩陣和向量

文章目錄 前言正文向量什么是向量&#xff1f;向量涉及哪些常見計算&#xff1f;1、取模2、歸一化3、向量加法4、向量減法5、向量與標量乘6、向量點乘&#xff08;內積&#xff09;7、向量投影 向量有哪些基本應用&#xff1f; 矩陣什么是矩陣&#xff1f;矩陣涉及哪些常見計算…

數據庫中的六大鎖

目錄 一、死鎖 二、鎖的區間劃分 1、間隙鎖&#xff08;Gap Locks&#xff09; 2、臨鍵鎖&#xff08;Next-key Locks&#xff09; 三、鎖的粒度劃分 1、表級鎖&#xff08;Table-level lock&#xff09; 2、行級鎖&#xff08;Record Locks&#xff09; 3、頁級鎖 四、…

一分鐘教你學浪app視頻怎么緩存

你是否在學浪app上苦苦尋找如何緩存視頻的方法&#xff1f;你是否想快速、輕松地觀看自己喜歡的視頻內容&#xff1f;那么&#xff0c;讓我們一起探索一分鐘教你如何緩存學浪app視頻的技巧吧&#xff01; 學浪下載工具我已經打包好了&#xff0c;有需要的自己下載一下 學浪下…

【JavaScript】ECMAS6(ES6)新特性概覽(二):解構賦值、擴展與收集、class類全面解析

&#x1f525; 個人主頁&#xff1a;空白詩 &#x1f525; 熱門專欄&#xff1a;【JavaScript】 文章目錄 &#x1f33f; 引言五、 Destructuring Assignment - 解構賦值&#xff0c;數據提取的藝術 &#x1f3a8;&#x1f4cc; 數組解構&#x1f4cc; 對象解構&#x1f4cc; 特…

動態規劃之單詞拆分

這次分享一道關于動態規劃的leetcode&#xff0c;單詞拆分。 單詞拆分 給你一個字符串 s 和一個字符串列表 wordDict 作為字典。如果可以利用字典中出現的一個或多個單詞拼接出 s 則返回 true。注意&#xff1a;不要求字典中出現的單詞全部都使用&#xff0c;并且字典中的單詞…

【技術】漢諾塔的遞歸問題解析及多語言實現

漢諾塔的遞歸問題解析及多語言實現 漢諾塔&#xff08;Hanoi Tower&#xff09;問題是一個非常經典的遞歸問題。它起源于一個古老的傳說&#xff1a;有三個柱子和64個大小不一的金盤&#xff0c;開始時這些金盤按從小到大的順序放在柱子A上&#xff0c;目標是在柱子B上按同樣的…

Java——Java開發環境

一、JDK 1、什么是JDK JDK&#xff08;Java Development Kit&#xff0c;Java 開發工具包&#xff09;是用于開發 Java 應用程序的核心工具包。它包含了編寫、編譯、調試和運行 Java 程序所需的一切工具和庫。JDK 是每個 Java 開發者必備的工具。 2、JDK 主要組件 JDK主要包…

HNU-計算機體系結構-實驗3-緩存一致性

計算機體系結構 實驗3 計科210X 甘晴void 202108010XXX 文章目錄 計算機體系結構 實驗31 實驗目的2 實驗過程2.0 預備知識2.0.1 多cache一致性算法——監聽法2.0.1.1 MSI協議2.0.1.2 MESI協議2.0.1.3 本題講解 2.0.2 多cache一致性算法——目錄法2.0.2.1 有中心的目錄法2.0.2…

A2B V2.0協議學習筆記(非正式版本)

一、說明 A2B全稱是 Automotive Audio Bus 汽車音頻總線,主要是解決傳統音頻總線線多、線重、成本貴等問題。 A2B V2.0總線相對V1.0主要變化點: 速率提升,高達98.304Mbps,全雙工模式 編碼方式,由之前的曼徹斯特編碼變為QPSK(正交相移鍵控)編碼,每個符合2bit數據,因此…

隨手記:多行文本域存數據有換行,回顯數據換行展示

1.在新增的時候存儲數據 <el-input type"textarea"v-model"XXXX"></el-input> 2.詳情頁返回的數據&#xff1a; replace一頓操作確實復雜 最快的方法直接寫個樣式:style"white-space: pre-line" 即可行內或者class樣式都可以 …

B2126 連續出現的字符

連續出現的字符 題目描述 給定一個字符串&#xff0c;在字符串中尋找第一個連續出現次數不低于 k k k 次的字符。 輸入格式 2 2 2 行。第 1 1 1 行是 k k k&#xff1b;第 2 2 2 行是僅包含大小寫字母的字符串。 輸出格式 字符串中第一個連續出現次數不低于 k 次的字符…

Python面試寶典:Python中與動態規劃和排序算法相關的面試筆試題(1000加面試筆試題助你輕松捕獲大廠Offer)

Python面試寶典:1000加python面試題助你輕松捕獲大廠Offer【第二部分:Python高級特性:第十二章:高級數據結構和算法:第二節:Python中實現各類高級數據結構與算法三】 第十二章:高級數據結構和算法第二節:Python中實現各類高級數據結構與算法2.3、python中與動態規劃和排…

網頁如何給js后臺傳遞數字類型參數

網頁無法通過get方法傳遞數字參數給js后臺&#xff0c;就是網頁端寫的是數字參數&#xff0c;傳遞給后臺也變成了數字字符串。而js對數字類型和字符串類型是不相同的。由于我們的代碼是通過中間件掛載接口的&#xff0c;通過joi庫檢查參數。 const Joi require(joi); //注意&…