Hive 特殊的數據類型 Array、Map、Struct

Array

數組類型,存儲數據類型一致的列表數據。

我們可以使用 array 方法來創建一個數組,如下所示:

select array(1,2,3,4,5);

在這里插入圖片描述

如果其中的數據類型不一致,那么它會轉換成統一的數據類型(前提是能夠進行轉換):

-- 同時存在整型和字符型 會統一轉換為整型
select array(1,"1",2,3,4,5);

在這里插入圖片描述

Array 數據類型的使用

創建測試表:

create table if not exists array_test(
users array<string>
)
row format delimited fields terminated by '\t';

插入一些測試數據:

insert into table array_test values(array("Jack","Mary","Lily"));

查詢表數據:

select * from array_test;

在這里插入圖片描述

獲取數組中的數據

selectusers,users[0] first_col,users[10] null_col
fromarray_test;

在這里插入圖片描述

獲取數組值的方式和我們在 Java 中一樣,采用下標的方式訪問,當訪問的下標超過數組的長度時,并不會報錯,它會返回 null 值。

如果想要判斷數組中是否存在某個值,可以使用 array_contains 方法:

selectusers,array_contains(users,"Jack") is_save_Jack,array_contains(users,"Tom") is_save_Tom
fromarray_test;

在這里插入圖片描述

Map

Map 是 KV 鍵值對類型,其中存儲的字段數量可多可少,但是 KV 鍵值對的數據類型必須提前確定。

同樣,在 Hive 中也提供了創建 Map 鍵值對的方法 map,如下所示:

select map(1,2,3,4);

在這里插入圖片描述

它會將前面的數據當作 Key,后面的數據當作 Value,兩兩組合,形成 Map 集合。

如果其中的數據類型不一致,它同樣會轉換成統一的數據類型:

-- 同時存在整型和字符型 會統一轉換為整型
select map(1,2,3,"4");

在這里插入圖片描述
這里值 Value 中存在整型和字符型數據類型不統一的情況,它會統一將值 Value 都轉換成字符型。

如果無法形成兩兩組合的鍵值對,則會直接報錯:

select map(1,2,3,4,5);

在這里插入圖片描述

Map 數據類型的使用

創建測試表:

create table if not exists map_test(
users map<string,string>
)
row format delimited fields terminated by '\t';

往剛剛創建的表中插入一些測試數據:

insert into table map_test values (map("name","Mary","age","20")),(map("name","Jack","age","21"));

查詢表數據:

select * from map_test;

在這里插入圖片描述

獲取 Map 中的數據

selectusers,users["name"],users["age"]
frommap_test;

在這里插入圖片描述

如果獲取一個不存在的鍵時,它會返回 null 值:

selectusers,users["ggg"]
frommap_test;

在這里插入圖片描述

在查詢時,需要注意,Map 會區分鍵的大小寫:

selectusers,users["Name"],users["AGE"]
frommap_test;

在這里插入圖片描述

如果想要獲取所有的鍵或者值,可以使用 map_keys() 或者 map_values()

selectusers,map_keys(users),map_values(users)
frommap_test;

在這里插入圖片描述

Struct

Struct 是結構體數據類型,其中存儲對象的相關信息,例如:用戶ID、用戶名、賬號、密碼等

Struct 中的數據數量以及類型都必須是確定的。

在 Hive 中提供了創建 Struct 鍵值對的方法 struct,如下所示:

select struct(1,2,3,4);

在這里插入圖片描述
它會將所有的參數都當作為值,由系統自動生成鍵名。

如果想要用戶來設置鍵名,那么可以使用另一個方法 named_struct

select named_struct(1,2,3,4);

和 Map 一樣,它會將前面的數據當作 Key,后面的數據當作 Value,兩兩組合,形成結構體。

如果其中的數據類型不一致,它同樣會轉換成統一的數據類型:

-- 同時存在整型和字符型 會統一轉換為整型
select named_struct(1,2,3,"4");

在這里插入圖片描述

這里值 Value 中存在整型和字符型數據類型不統一的情況,它會統一將值 Value 都轉換成字符型。

Struct 數據類型的使用

創建測試表:

create table if not exists struct_test(
users struct<id:int,name:string,age:int>
)
row format delimited fields terminated by '\t';

往剛剛創建的表中插入一些測試數據:

insert into table struct_test values (named_struct("id",1001,"name","Mary","age",20)),(named_struct("id",1002,"name","Jack","age",21)),(named_struct("id",1003,"name","Tom","age",20));

如果數據的類型與定義的類型產生沖突,它會直接報錯。

查詢表數據:

select * from struct_test;

在這里插入圖片描述

獲取 Struct 中的數據

selectusers,users.id,users.name,users.age
fromstruct_test;

在這里插入圖片描述

如果獲取一個不存在的鍵時,它會直接報錯:

selectusers,users.ggg
fromstruct_test;

在這里插入圖片描述

在查詢時,需要注意,它和 Map 不同,忽略大小寫:

selectusers,users.ID,users.NaME,users.Age
fromstruct_test;

在這里插入圖片描述

嵌套使用

在 Hive 中,我們可以嵌套使用特殊的數據類型。

創建測試表:

create table if not exists test(
users array<struct<id:int,name:string>>
)
row format delimited fields terminated by '\t';

插入一些測試數據:

insert into table test values(array(named_struct("id",1001,"name","Jack")));

查詢表數據:

select * from test;

在這里插入圖片描述
獲取嵌套格式中的數據

其實和前面一樣,每層使用各自的訪問方式就行了。

selectusers,users[0].id,users[0].name
fromtest;

在這里插入圖片描述

其余格式之間的嵌套這里就不再說明了,同學們可以自己嘗試。

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

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

相關文章

力扣HOT100 - 322. 零錢兌換

解題思路&#xff1a; 動態規劃 class Solution {public int coinChange(int[] coins, int amount) {int[] dp new int[amount 1];Arrays.fill(dp, amount 1);dp[0] 0;for (int i 1; i < amount; i) {for (int j 0; j < coins.length; j) {if (coins[j] < i) …

word內容wxml轉化html標簽對照表

1. 標簽 w:document document 文檔w:bodybody文檔的主體w:sectPrsection——w:pp/div段落w:rspan行內元素w:ttext文本w:tbltable表格w:trtr表格行w:tctd單元格w:brbr換行w:hyperlinka超鏈接w:roundrectdiv/canvas塊w:pictimg圖片w:inlinespan行元素w:oMathmath公式w:subsub下標…

寵物管理系統帶萬字文檔

文章目錄 寵物管理系統一、項目演示二、項目介紹三、19000字論文參考四、部分功能截圖五、部分代碼展示六、底部獲取項目源碼和萬字論文參考&#xff08;9.9&#xffe5;帶走&#xff09; 寵物管理系統 一、項目演示 寵物管理系統 二、項目介紹 基于springbootvue的前后端分離…

如何讓Linux系統崩潰?

如何使 Linux 系統崩潰 警告 下面的代碼行是 Bash shell 的一個簡短而甜蜜的 fork 炸彈。分叉炸彈之所以有效&#xff0c;是因為它能夠產生無限數量的進程。最終&#xff0c;Linux無法處理所有這些&#xff0c;并且會崩潰。 fork 炸彈的一大優點是你不需要 root 權限即可執行它…

Vu2之使用provide與inject調用方法案例

Vu2之使用provide與inject調用方法案例 文章目錄 Vu2之使用provide與inject調用方法案例1. 祖先組件使用provide提供方法2. 后代組件使用inject注入并調用方法 在Vue 2中&#xff0c;provide和inject是用于在組件之間傳遞數據的一種高級技術。雖然它們通常用于傳遞數據&#xf…

【scikit-learn001】邏輯回歸(Logistic Regression)ML模型實戰及經驗總結(更新中)

1.一直以來想寫下基于scikit-learn訓練AI算法的系列文章&#xff0c;作為較火的機器學習框架&#xff0c;也是日常項目開發中常用的一款工具&#xff0c;最近剛好擠時間梳理、總結下這塊兒的知識體系。 2.熟悉、梳理、總結下scikit-learn框架邏輯回歸&#xff08;Logistic Regr…

新串口通道打通紀實

在計算機系統中&#xff0c;串口是“古老”的通信方式&#xff0c;和它同時代的“并口”通信方式已經消失了。但它仍然頑強的存活著&#xff0c;主要原因是在開發和調試底層軟件時還經常用到串口。 正因為有這樣的需求&#xff0c;幽蘭代碼本是支持串口的&#xff0c;而且有兩種…

vue中父子組件如何相互調用方法

Vue 中父子組件如何相互調用方法 在 Vue 中&#xff0c;父子組件可以通過以下方法相互調用方法&#xff1a; 父組件調用子組件方法 通過 props: 父組件向子組件傳遞一個 prop&#xff0c;該 prop 是一個函數&#xff0c;子組件可以調用它來觸發父組件的方法。通過 refs: 父組…

【現代C++】概念的使用

現代C&#xff08;特別是C20及以后的版本&#xff09;引入了概念&#xff08;Concepts&#xff09;&#xff0c;這是一種指定模板參數必須滿足的約束的方式。概念使得模板代碼更清晰&#xff0c;更容易理解和使用&#xff0c;并且能在編譯時提供更好的錯誤信息。以下是C概念的關…

UStaticMesh幾何數據相關(UE5.2)

UStaticMesh相關類圖 UStaticMesh的數據構成 UStaticMesh的FStaticMeshSourceModel UStaticMesh的Mesh幾何元數據來自于FStaticMeshSourceModel&#xff0c; 一級Lod就存在一個FStaticMeshSourceModel. FStaticMeshSourceModel幾何數據大致包含以下幾類: Vertex(點), VertexI…

【scikit-learn005】支持向量機(Support Vector Machines, SVM)ML模型實戰及經驗總結(更新中)

1.一直以來想寫下基于scikit-learn訓練AI算法的系列文章&#xff0c;作為較火的機器學習框架&#xff0c;也是日常項目開發中常用的一款工具&#xff0c;最近剛好擠時間梳理、總結下這塊兒的知識體系。 2.熟悉、梳理、總結下scikit-learn框架支持向量機&#xff08;Support Vec…

Maven(項目管理和LINUX)

目錄 一、整合IDEA 二、POM模型 三、依賴和繼承關系 依賴&#xff08;Dependency&#xff09; 依賴的基本結構 依賴傳遞性 依賴管理 繼承&#xff08;Inheritance&#xff09; 繼承的基本結構 繼承的特性 四、插件的使用 五、私服的使用 一、整合IDEA 在Maven項目…

基于springboot的醫院管理系統源碼數據庫

基于springboot的醫院管理系統源碼數據庫 隨著信息互聯網信息的飛速發展&#xff0c;醫院也在創建著屬于自己的管理系統。本文介紹了醫院管理系統的開發全過程。通過分析企業對于醫院管理系統的需求&#xff0c;創建了一個計算機管理醫院管理系統的方案。文章介紹了醫院管理系…

玩轉Matlab-Simscape(初級)- 06 - 基于Solidworks、Matlab Simulink、COMSOL的協同仿真(理論部分2)

** 玩轉Matlab-Simscape&#xff08;初級&#xff09;- 06 - 基于Solidworks、Matlab Simulink、COMSOL的協同仿真&#xff08;理論部分2&#xff09; ** 目錄 玩轉Matlab-Simscape&#xff08;初級&#xff09;- 06 - 基于Solidworks、Matlab Simulink、COMSOL的協同仿真&am…

風電功率預測 | 基于GRU門控循環單元的風電功率預測(附matlab完整源碼)

風電功率預測 風電功率預測 | 基于GRU門控循環單元的風電功率預測(附matlab完整源碼)完整代碼風電功率預測 | 基于GRU門控循環單元的風電功率預測(附matlab完整源碼) 完整代碼 clc; clear close allX = xlsread(風電場預測.xlsx)

python數據分析——seaborn繪圖2

參考資料&#xff1a;活用pandas庫 # 導入庫 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns tipspd.read_csv(r"...\seaborn常用數據案例\tips.csv") print(tips.head()) 1、成對關系表示 當數據大部分是數據時&#xff0c;可以使用…

分享一個基于Qt的Ymodem的上位機(GitHub開源)

文章目錄 1.項目地址2.Ymodem 協議介紹3.文件傳輸過程4.使用5.SecureCRT 軟件也支持Ymodem6.基于PyQt5的Ymodem界面實現案例 1.項目地址 https://github.com/XinLiGH/SerialPortYmodem 基于VS2019 Qt5.15.2 編譯&#xff0c;Linux下編譯也可以&#xff0c;這里不做說明。 2.…

Python | Leetcode Python題解之第89題格雷編碼

題目&#xff1a; 題解&#xff1a; class Solution:def grayCode(self, n: int) -> List[int]:ans [0] * (1 << n)for i in range(1 << n):ans[i] (i >> 1) ^ ireturn ans

如何在云電腦實現虛擬應用—數據分層(應用分層)技術簡介

如何在云電腦實現虛擬應用—數據分層&#xff08;應用分層&#xff09;技術簡介 近幾年虛擬化市場實現了非常大的發展&#xff0c;桌面虛擬化在企業中應用越來越廣泛&#xff0c;其擁有的如下優點得到大量企業的青睞&#xff1a; 數據安全不落地。在虛擬化環境下面數據保存在…