Hive的基本操作(查詢)

1、基礎查詢

基本語法

select 字段列表|表達式|子查詢
from(子查詢|視圖|臨時表|普通表)
where [not] 條件A and|or 條件B				--先:面向原始行進行篩選
group by 字段A[,字段B,...]					=> 分組【去重處理】
having 聚合條件(非原始字段條件)				--再:針對聚合后的字段進行二次篩選
order|sort|cluster by 字段A[,字段B,...]		--后:全局排序(非limit的最后一句)	走mapreduce
limit N(前N條記錄) | M(行號偏移量),N(記錄數)

1.where子句的條件格式

一:關系運算符
關系運算符:> , >= , < , <= , =【等值判斷】 , <>【不等于】
  • 延伸:between (>=)SMALL_VALUE and (<=)BIG_VALUE; 【面向于 數值或日期】
二:邏輯運算符
邏輯運算符:not【非】 , and【與】 , or【或】
  • 延伸
--if函數:
if(BOOLEN_EXPR,VALUE_IF_TRUE,VALUE_IF_FALSE_OR_NULL)案例:select user_id,`if`(order_amount < 1000,'low','high') as consumptionfrom test1wwhere user_gender = '女'limit 100;結果展示:user_id	consumption652,high376,high537,high280,high23,high--空值判斷:
1.nvl(VALUE_A,VALUE_B)	=>	VALUE_A為空值(null),則返回VALUE_B。否則返回VALUE_A
2.isnull(VAL)		=>	如果 VAL 為 null,則返回 1 。否則返回 0--case when函數:
case EXPR when V1 then VAL1 when V2 then VAL2 ... else VALN end <=> switch ... case
case when 條件1 then VAL1 when 條件2 then VAL2 ... else VALN end <=> if ... else if ...案例:select user_id,case when order_amount<1000 then '低消費人群' when order_amount<5000 then '中等消費人群' else '高消費人群' end as levelfrom test1wwhere user_gender = '女'limit 100;結果展示:user_id	level652,高消費人群376,高消費人群537,低消費人群280,中等消費人群...
三:通配符

模糊查詢

基本語法:like '% | _'	【模糊匹配】講解:% => 任意個任意符號_ => 一個任意符號案例:select "張無極" like '張%';		=> trueselect "張無極" like '張_';		=> false

正則匹配

基本語法:rlike '正則表達式'如:'^//d+$'案例:select "like" rlike '^[a-zA-Z]{2,4}$';	  =>true

2.排序

1order by 表達式[field|func|case...when...]    		---【全局排序】:性能差優化:在order by B 之前,可以先對數據進行 distribute by A 與 sort by B=> 先部分排序,后全局排序2、sort by FIELD_N 								  --在【每一個reducer端】排序解釋:當reducer 的數量為1時,等同于 order byFIELD_N 必須是select字段列表中的一員一般和 distribute by 配合使用3、cluster by 		--cluster by 字段A = distribute by 字段A + sort by 字段A

3.分組

1group by 表達式(field|func|case...when) 	--為了聚合而分組,否則類似去重(代替distinct)目的:按照某些條件對數據進行分組并進行聚合操作,使用 group by多分組:1.group by A,B,C 		grouping sets(B,(A,C),(B,C))	?  --指定多個【分組】為:B,(A,C),(B,C)2.group by cube(A,B,C) 		--排列組合后的所有分組:A,B,C,(A,B),(A,C),(B,C),(A,B,C)3.group by rollup(A,B,C)	--最左原則的所有分組:A,(A,B),(A,B,C)2、distribute by 表達式(field|func|case...when)目的:為了將數據分區,僅僅將數據分發到多個節點上并行處理,使用 distribute by解釋:1.不改變原始行數2.類似于 hadoop job 中的 Partitioner。 【默認是采用hash算法】3.指定按哪個字段的hashcode分區,配合【預先設置reducer數量】注意:distribute by【決定進哪個reducer】與sort by【在reducer中排序】一般搭配使用的distribute by通常使用在SORT BY語句之前

小型案例

with product_total as ( select order_item_product_id product_id,sum(order_item_subtotal) totalfrom cb_order_itemsgroup by order_item_product_id
)
select product_id,total
from product_total
distribute by product_id
sort by total desc;
多分組案例
1.grouping sets 案例:?create temporary table tmp_cb_order_ymbsc_sets asselect year,month,dept_id,cate_id,prod_idgrouping__id,sum(quantity) as quantity,round(sum(amount)) as amountfrom tmp_cb_order_ymbscgroup by year,month,dept_id,cate_id,prod_idgrouping sets(prod_id,(dept_id,cate_id),(year,month),(year,month,prod_id))order by grouping__id;-------------------------------------尋找哪幾組【去重】:select grouping__idfrom tmp_cb_order_ymbsc_setsgroup by grouping__id;--------------------------------------- grouping__id:6 :	year,month,prod_id7 :	year,month25 : dept_id,cate_id 	30 : prod_id2.cube 案例:【不常用】selectyear(order_date) as year,month(order_date) as month,day(order_date) as day,count(*) as count,grouping__idfrom cb_ordersgroup by cube (year(order_date),month(order_date),day(order_date))order by grouping__id;3.rollup 案例:【不常用】selectyear(order_date) as year,month(order_date) as month,day(order_date) as day,count(*) as count,grouping__idfrom cb_ordersgroup by rollup (year(order_date),month(order_date),day(order_date))order by grouping__id;

2、子查詢

基本語法

select 			可以出現子查詢(查某個字段值,與主查詢存在邏輯主外鍵關系)
from 			可以出現子查詢(數據表的子集 select F1,...,FN from T where ... group by ...)
where 			可以出現子查詢(FIELD in|=|>= (select ONLY_ONE_FIELD_IN ...))
group by FIELD|substr(FIELD,0,4),...
having 			可以出現子查詢(FIELD in|=|>= (select ONLY_ONE_FIELD_IN ...))
order by FIELD|substr(FIELD,0,4),...

常用語法【from子查詢】

select 字段列表|表達式|子查詢
from(select 字段列表|表達式|子查詢					 ---先進行內部的查詢from TABLEwhere [not] 條件A and|or 條件B...
)												---后進行外部的查詢
where [not] 條件A and|or 條件B						--后=>先:面向原始行進行篩選
group by 字段A[,字段B,...]	
order by 字段A[,字段B,...]							--后=>再:針對聚合后的字段進行二次篩選
limit N(前N條記錄) | M(行號偏移量),N(記錄數)		--后=>后:全局排序(非limit的最后一句)

3、CTE

基本語法

with 
SUB_ALIA as(...),
SUB_ALTER as(select...from SUB_ALIA...)
select...

小型案例

withtotal_amount as(select sum(order_amount) totalfrom hive_internal_par_regex_test1wwhere year>=2016group by user_gender, user_idhaving total>=20000),level_amount as(select round(total/10000) as levelfrom total_amount)
select level,count(*) as level_count
from level_amount
group by level;結果展示:level level_count2,1623,1254,265,5

4、聯合查詢

數據準備

Class表:
+-------+---------+
|classId|className|
+-------+---------+
|      1|  yb12211|
|      2|  yb12309|
|      3|  yb12401|
+-------+---------+Student表:
+-----+-------+
| name|classId|
+-----+-------+
|henry|      1|
|ariel|      2|
| jack|      1|
| rose|      4|
|jerry|      2|
| mary|      1|
+-----+-------+

三種主要形式

一:內連接【inner join】

兩集合取交集

select A.內容,....,B.內容,...                              =>字段別名:提高篩選的性能
from TABLE_A as A												
inner join TABLE_B as B
on A.主鍵=B.外鍵 (and A.fa = VALUE...)  多表√ 兩表√        	=>表進行合并時進行【連接條件】
where A.fa = VALUE;                     兩表√             =>合并后進行【條件篩選】
group by ...
having ...
order by ...
limit ...

小型案例

select * from Student S
inner join Class C
on S.classId = C.classId結果展示:+-----+-------+-------+---------+| name|classId|classId|className|+-----+-------+-------+---------+|henry|      1|      1|  yb12211||ariel|      2|      2|  yb12309|| jack|      1|      1|  yb12211||jerry|      2|      2|  yb12309|| mary|      1|      1|  yb12211|+-----+-------+-------+---------+
二:外連接
左外連接【left join】

兩個集合取左全集,右交集

select A.內容,....,B.內容,...                              	     =>字段別名:提高篩選的性能
from TABLE_A as A                 									【A為主表】
left [outer] join TABLE_B as B		    							【B為從表】
on A.主鍵|外鍵=B.外鍵|主鍵 (and A.fa = VALUE...)    多表√ 兩表√     =>表進行合并時進行【連接條件】
where A.fa = VALUE;                                 兩表√        =>合并后進行【條件篩選】
group by ...
having ...
order by ...
limit ...

小型案例

select * from Student S
left join Class C
on S.classId = C.classId結果展示:+-----+-------+-------+---------+| name|classId|classId|className|+-----+-------+-------+---------+|henry|      1|      1|  yb12211||ariel|      2|      2|  yb12309|| jack|      1|      1|  yb12211|| rose|      4|   null|     null||jerry|      2|      2|  yb12309|| mary|      1|      1|  yb12211|+-----+-------+-------+---------+
右外連接【right join】

兩集合取右全集,左交集

select A.內容,....,B.內容,...                              		=>字段別名:提高篩選的性能
from TABLE_A as A                 										【A為主表】
right [outer] join TABLE_B as B		    								【B為從表】
on A.主鍵|外鍵=B.外鍵|主鍵 (and A.fa = VALUE;)    多表√ 兩表√      =>表進行合并時進行【連接條件】
where A.fa = VALUE;                               兩表√         =>合并后進行【條件篩選】
group by ...
having ...
order by ...
limit ...

小型案例

select * from Student S
right join Class C
on S.classId = C.classId結果展示:+-----+-------+-------+---------+| name|classId|classId|className|+-----+-------+-------+---------+| mary|      1|      1|  yb12211|| jack|      1|      1|  yb12211||henry|      1|      1|  yb12211||jerry|      2|      2|  yb12309||ariel|      2|      2|  yb12309|| null|   null|      3|  yb12401|+-----+-------+-------+---------+
全外連接【full join】

兩集合取左右全集

select A.內容,....,B.內容,...                              		 =>字段別名:提高篩選的性能
from TABLE_A as A                 										【A為主表】
full [outer] join TABLE_B as B		    								【B為從表】
on A.主鍵|外鍵=B.外鍵|主鍵 (and A.fa = VALUE;)    多表√ 兩表√       =>表進行合并時進行【連接條件】
where A.fa = VALUE;                               兩表√          =>合并后進行【條件篩選】
group by ...
having ...
order by ...
limit ...

小型案例

select * from Student S
full join Class C
on S.classId = C.classId結果展示:+-----+-------+-------+---------+| name|classId|classId|className|+-----+-------+-------+---------+|henry|      1|      1|  yb12211|| jack|      1|      1|  yb12211|| mary|      1|      1|  yb12211|| null|   null|      3|  yb12401|| rose|      4|   null|     null||ariel|      2|      2|  yb12309||jerry|      2|      2|  yb12309|+-----+-------+-------+---------+
三:交叉連接【cross join】

兩集合取笛卡爾積

select A.內容,....,B.內容,...                              		 =>字段別名:提高篩選的性能
from TABLE_A as A                 										【A為主表】
cross join TABLE_B as B		    										【B為從表】
on A.主鍵|外鍵=B.外鍵|主鍵 (and A.fa = VALUE;)    多表√ 兩表√       =>表進行合并時進行【連接條件】
where A.fa = VALUE;                               兩表√          =>合并后進行【條件篩選】
group by ...
having ...
order by ...
limit ...

小型案例

select * from Student S
cross join Class C
on S.classId = C.classId結果展示:+-----+-------+-------+---------+| name|classId|classId|className|+-----+-------+-------+---------+|henry|      1|      1|  yb12211||henry|      1|      2|  yb12309||henry|      1|      3|  yb12401||ariel|      2|      1|  yb12211||ariel|      2|      2|  yb12309||ariel|      2|      3|  yb12401|| jack|      1|      1|  yb12211|| jack|      1|      2|  yb12309|| jack|      1|      3|  yb12401|| rose|      4|      1|  yb12211|| rose|      4|      2|  yb12309|| rose|      4|      3|  yb12401||jerry|      2|      1|  yb12211||jerry|      2|      2|  yb12309||jerry|      2|      3|  yb12401|| mary|      1|      1|  yb12211|| mary|      1|      2|  yb12309|| mary|      1|      3|  yb12401|+-----+-------+-------+---------+

5、聯合查詢

何為聯合查詢?

  • 縱向拼接表,高變大

  • 查詢字段的【數量】與【類型】必須相同,字段名是以【第一張表為準】。

union與union all的區分

  • union:合并后刪除重復項(去重)

  • union all:合并后保留重復項 ?

小型案例

數據準備

語句

select age,job from bank_client_info_3
union all
select age,job from bank_client_info_3;

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

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

相關文章

JMeter案例分享:通過數據驗證的錯誤,說說CSV數據文件設置中的線程共享模式

前言 用過JMeter參數化的小伙伴&#xff0c;想必對CSV Data Set Config非常熟悉。大家平時更關注變量名稱&#xff0c;是否忽略首行等參數&#xff0c;其余的一般都使用默認值。然而我最近遇到一個未按照我的預想讀取數據的案例&#xff0c;原因就出在最后一個參數“線程共享模…

深度學習中激活函數的演變與應用:一個綜述

摘要 本文全面回顧了深度學習中激活函數的發展歷程,從早期的Sigmoid和Tanh函數,到廣泛應用的ReLU系列,再到近期提出的Swish、Mish和GeLU等新型激活函數。深入分析了各類激活函數的數學表達、特點優勢、局限性以及在典型模型中的應用情況。通過系統的對比分析,本文探討了激…

樹莓派配置vsftpd主動模式

sudo apt-get install vsftpd /etc/vsftpd.conf anonymous_enableNO # 禁用匿名用戶 local_enableYES # 允許本地用戶登錄 write_enableYES # 允許修改權限 #chroot_local_userYES # 將用戶限制在其主目錄 systemctl restart vsftpd sudo adduser ftpuser sudo pa…

詳解MySQL中的遞歸查詢

MySQL中的遞歸查詢主要通過WITH RECURSIVE語句來實現&#xff0c;這在處理具有層級關系或樹形結構的數據時非常有用。下面將通過一個具體的例子來詳細解釋如何在MySQL中使用遞歸查詢。 示例場景 假設我們有一個部門表&#xff08;departments&#xff09;&#xff0c;其中包含…

昇思訓練營打卡第二十五天(RNN實現情感分類)

RNN&#xff0c;即循環神經網絡&#xff08;Recurrent Neural Network&#xff09;&#xff0c;是一種深度學習模型&#xff0c;特別適用于處理序列數據。以下是對RNN的簡要介紹&#xff1a; RNN的特點&#xff1a; 記憶性&#xff1a;與傳統的前饋神經網絡不同&#xff0c;R…

老板新招的牛人,竟然用1天搭建了一套完整的倉庫管理系統!

倉儲管理系統是什么&#xff1f; 倉儲管理系統&#xff08;WMS&#xff09;是一個全面的軟件解決方案&#xff0c;旨在幫助企業優化倉庫管理流程、管理和控制日常倉庫運營。通過數學模型和信息手段&#xff0c;對倉庫管理的各個環節進行優化和調控&#xff0c;涵蓋了從貨物入庫…

使用網關和Spring Security進行認證和授權

個人名片 &#x1f393;作者簡介&#xff1a;java領域優質創作者 &#x1f310;個人主頁&#xff1a;碼農阿豪 &#x1f4de;工作室&#xff1a;新空間代碼工作室&#xff08;提供各種軟件服務&#xff09; &#x1f48c;個人郵箱&#xff1a;[2435024119qq.com] &#x1f4f1…

jquery發送jsonp請求

使用 jQuery 發送 JSONP 請求相對來說比較簡單&#xff0c;以下是示例代碼&#xff1a; $.ajax({url: "http://example.com/data",dataType: "jsonp",jsonp: "callback",jsonpCallback: "myCallback" }).done(function(response) {//…

Linux命令更新-sort 和 uniq 命令

簡介 sort 和 uniq 都是 Linux 系統中常用的文本處理命令。 sort 命令用于對文件內容進行排序。 uniq 命令用于去除文件中重復出現的行。 1. sort 命令 命令格式 sort [選項] [文件]選項&#xff1a; -n: 按照數字進行排序 -r: 反向排序 -c: 統計每個元素出現的次數 -…

怎么錄制視頻?電腦錄制,試試這3種方法

在數字化快速發展的時代&#xff0c;視頻已經成為我們傳遞信息、分享生活、表達情感的重要載體。每一個人都希望自己能夠掌握視頻錄制技巧&#xff0c;輕松駕馭影像的力量&#xff0c;創造出屬于自己的視覺盛宴。 那么&#xff0c;怎么錄制視頻呢&#xff1f;首先選擇一款好用…

vue腳手架配置代理請求

在 Vue 腳手架中&#xff0c;可以通過配置vue.config.js文件來設置代理請求&#xff0c;以解決跨域問題或實現其他代理需求。以下是兩種常見的配置方式&#xff1a; 方法一&#xff1a; 在vue.config.js中添加如下配置&#xff1a; module.exports {devServer: {proxy: http…

《信息與電腦(理論版)》是什么級別的期刊?是正規期刊嗎?能評職稱嗎?

問題解答 問&#xff1a;《信息與電腦(理論版)》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知網收錄的正規學術期刊。 問&#xff1a;《信息與電腦(理論版)》級別&#xff1f; 答&#xff1a;省級。主管單位&#xff1a;北京電子控股有限責任公司 主辦…

AI安全入門-人工智能數據與模型安全

參考 人工智能數據與模型安全 from 復旦大學視覺與學習實驗室 文章目錄 0. 計算機安全學術知名公眾號1. 概述數據安全模型安全 3. 人工智能安全基礎3.1 基本概念攻擊者攻擊方法受害者受害數據受害模型防御者防御方法威脅模型目標數據替代數據替代模型 3.2 威脅模型3.2.1 白盒威…

實踐致知第16享:設置Word中某一頁橫著的效果及操作

一、背景需求 小姑電話說&#xff1a;現在有個word文檔,里面有個表格太長&#xff08;如下圖所示&#xff09;&#xff0c;希望這一個設置成橫的&#xff0c;其余頁還是保持豎的&#xff01; 二、解決方案 1、將鼠標放置在該頁的最前面閃爍&#xff0c;然后選擇“頁面”》“↘…

Python面經

文章目錄 Python基本概念1. Python是**解釋型**語言還是**編譯型**語言2. Python是**面向對象**語言還是面向過程語言3. Python基本數據類型4.append和 extend區別5.del、pop和remove區別6. sort和sorted區別介紹一下Python 中的字符串編碼is 和 的區別*arg 和**kwarg作用淺拷…

Electron 進程間通信

文章目錄 渲染進程到主進程&#xff08;單向&#xff09;渲染進程到主進程&#xff08;雙向&#xff09;主進程到渲染進程 &#xff08;單向&#xff0c;可模擬雙向&#xff09; 渲染進程到主進程&#xff08;單向&#xff09; send &#xff08;render 發送&#xff09;on &a…

【Stable Diffusion】(基礎篇三)—— 圖生圖基礎

圖生圖基礎 本系列筆記主要參考B站nenly同學的視頻教程&#xff0c;傳送門&#xff1a;B站第一套系統的AI繪畫課&#xff01;零基礎學會Stable Diffusion&#xff0c;這絕對是你看過的最容易上手的AI繪畫教程 | SD WebUI 保姆級攻略_嗶哩嗶哩_bilibili 本文主要講解如何使用S…

客戶端與服務端之間的通信連接

目錄 那什么是Socket? 什么是ServerSocket? 代碼展示&#xff1a; 代碼解析&#xff1a; 補充&#xff1a; 輸入流&#xff08;InputStream&#xff09;&#xff1a; 輸出流&#xff08;OutputStream&#xff09;&#xff1a; BufferedReader 是如何提高讀取效率的&a…

K8s集群初始化遇到的問題

kubectl describe pod coredns-545d6fc579-s9g5s -n kube-system 找到原因1&#xff1a;CoreDNS Pod 處于 Pending 狀態的原因是集群中的節點都帶有 node.kubernetes.io/not-ready 污點 journalctl -u kubelet -f 14:57:59.178592 3553 remote_image.go:114] "PullIma…

《簡歷寶典》12 - 簡歷中“項目經歷”,內功學習 - 下篇

這一小節呢&#xff0c;我們繼續說簡歷中 “項目經歷” 的一些內功心法。因為項目經歷比較核心&#xff0c;所以說完了&#xff0c;內功呢&#xff0c;我們會著重說一下 實戰部分。 目錄 1 所用技術的考慮 2 自我成長的突出 3 綜合使用STAR法則 4 小節 1 所用技術的考慮 …