大數據(4.3)Hive基礎查詢完全指南:從SELECT到復雜查詢的10大核心技巧

目錄

      • 背景
      • 一、Hive基礎查詢核心語法
        • 1. 基礎查詢(SELECT & FROM)
        • 2. 條件過濾(WHERE)
        • 3. 聚合與分組(GROUP BY & HAVING)
        • 4. 排序與限制(ORDER BY & LIMIT)
      • 二、復雜查詢實戰技巧
        • 1. 多表關聯(JOIN)
        • 2. 子查詢(Subquery)
        • 3. 集合操作(UNION & UNION ALL)
        • 4. 窗口函數(ROW_NUMBER)
      • 三、10大實戰案例
        • 案例1:查詢最新分區數據
        • 案例2:統計每日活躍用戶數
        • 案例3:查詢銷售額最高的商品類別
        • 案例4:分頁查詢(模擬OFFSET)
        • 案例5:處理NULL值(COALESCE)
        • 案例6:時間范圍查詢
        • 案例7:正則表達式過濾(RLIKE)
        • 案例8:動態分區插入查詢結果
        • 案例9:分桶表JOIN優化
        • 案例10:復雜嵌套查詢
      • 四、避坑指南
        • 1. 常見錯誤
        • 2. 性能優化
        • 3. 數據格式陷阱
      • 五、總結
        • 實踐
        • 大數據相關文章(推薦)

背景

在大數據處理中,Hive作為?基于Hadoop的數據倉庫工具?,通過類SQL語法(HiveQL)實現了對海量數據的便捷分析。掌握Hive基礎查詢語句是數據工程師的核心技能,涉及以下場景:

  1. 數據篩選?:通過SELECT、WHERE快速提取目標數據。
  2. 聚合分析?:利用GROUP BY、HAVING實現數據統計。
  3. 多表操作?:通過JOIN關聯不同數據源,UNION合并數據集。
  4. 結果優化?:結合分區、分桶設計提升查詢性能。

本文將通過?語法解析、10個實戰案例及避坑指南?,系統講解Hive基礎查詢的核心操作。

一、Hive基礎查詢核心語法

1. 基礎查詢(SELECT & FROM)
-- 查詢所有字段  
SELECT * FROM employee;  -- 查詢指定字段并重命名  
SELECT emp_id AS id, emp_name, salary * 0.9 AS tax_salary  
FROM employee;  
2. 條件過濾(WHERE)
-- 數值條件  
SELECT * FROM sales WHERE amount > 1000;  -- 字符串條件(LIKE)  
SELECT * FROM user WHERE name LIKE 'John%';  -- 多條件組合(AND/OR)  
SELECT * FROM logs  
WHERE status = 'ERROR' AND (url LIKE '/api/%' OR url LIKE '/admin/%');  
3. 聚合與分組(GROUP BY & HAVING)
-- 統計每個部門的平均薪資  
SELECT dept_id, AVG(salary) AS avg_salary  
FROM employee  
GROUP BY dept_id  
HAVING AVG(salary) > 5000;  
4. 排序與限制(ORDER BY & LIMIT)
-- 按薪資降序排序,取前10條  
SELECT emp_name, salary  
FROM employee  
ORDER BY salary DESC  
LIMIT 10;  

二、復雜查詢實戰技巧

1. 多表關聯(JOIN)
-- 內連接(獲取員工及其部門信息)  
SELECT e.emp_name, d.dept_name  
FROM employee e  
JOIN department d ON e.dept_id = d.dept_id;  -- 左外連接(保留未匹配部門的員工)  
SELECT e.emp_name, d.dept_name  
FROM employee e  
LEFT JOIN department d ON e.dept_id = d.dept_id;  
2. 子查詢(Subquery)
-- 查詢薪資高于部門平均薪資的員工  
SELECT emp_name, salary  
FROM employee  
WHERE salary > (  SELECT AVG(salary)  FROM employee  GROUP BY dept_id  HAVING dept_id = employee.dept_id  
);  
3. 集合操作(UNION & UNION ALL)
-- 合并兩個表的數據(去重)  
SELECT product_id FROM orders_2022  
UNION  
SELECT product_id FROM orders_2023;  -- 合并數據(保留重復)  
SELECT product_id FROM orders_2022  
UNION ALL  
SELECT product_id FROM orders_2023;  
4. 窗口函數(ROW_NUMBER)
-- 按部門分組,為每個員工生成薪資排名  
SELECT emp_name, dept_id, salary,  ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS rank  
FROM employee;  

三、10大實戰案例

案例1:查詢最新分區數據
SELECT * FROM logs  
WHERE dt = '2023-10-01'  
LIMIT 100;  
案例2:統計每日活躍用戶數
SELECT dt, COUNT(DISTINCT user_id) AS active_users  
FROM user_activity  
GROUP BY dt;  
案例3:查詢銷售額最高的商品類別
SELECT category, SUM(amount) AS total_sales  
FROM sales  
GROUP BY category  
ORDER BY total_sales DESC  
LIMIT 1;  
案例4:分頁查詢(模擬OFFSET)
SELECT * FROM employee  
ORDER BY emp_id  
LIMIT 10 OFFSET 20;  -- 第3頁(每頁10條)  
案例5:處理NULL值(COALESCE)
SELECT emp_name, COALESCE(salary, 0) AS salary  
FROM employee;  
案例6:時間范圍查詢
SELECT * FROM logs  
WHERE log_time BETWEEN '2023-10-01 00:00:00' AND '2023-10-01 23:59:59';  
案例7:正則表達式過濾(RLIKE)
SELECT * FROM user  
WHERE email RLIKE '^[a-zA-Z0-9._%+-]+@gmail\\.com$';  
案例8:動態分區插入查詢結果
INSERT INTO TABLE logs_partitioned  
PARTITION (dt)  
SELECT ip, url, dt FROM raw_logs;  
案例9:分桶表JOIN優化
SELECT a.user_id, b.order_amount  
FROM user_bucketed a  
JOIN orders_bucketed b  
ON a.user_id = b.user_id;  
案例10:復雜嵌套查詢
SELECT dept_id, emp_name  
FROM employee  
WHERE dept_id IN (  SELECT dept_id  FROM department  WHERE location = 'Shanghai'  
);  

四、避坑指南

1. 常見錯誤

?忽略NULL值?:聚合函數(如COUNT)默認排除NULL,需用COUNT(*)統計所有行。
?分區過濾失效?:未在WHERE中指定分區字段導致全表掃描。
?JOIN數據傾斜?:大表JOIN小表未使用MapJoin優化,導致性能問題。

2. 性能優化

?使用分區字段過濾?:減少數據掃描量。
?**避免SELECT ***?:僅查詢必要字段,降低IO開銷。
?啟用向量化查詢?:SET hive.vectorized.execution.enabled=true;

3. 數據格式陷阱

?TEXTFILE性能低?:優先使用ORC/Parquet列式存儲。
?壓縮算法選擇?:ORC表推薦使用SNAPPY壓縮。

五、總結

查詢場景推薦語法優化建議
簡單數據篩選SELECT + WHERE結合分區字段過濾
聚合統計GROUP BY + HAVING預聚合中間結果
多表關聯JOIN 或 MAPJOIN小表加載到內存
分頁查詢LIMIT + OFFSET避免深分頁(使用ROW_NUMBER)
復雜邏輯子查詢或CTE(Common Table Expression)拆分步驟提升可讀性
實踐
  1. 數據格式?:優先使用ORC/Parquet存儲格式。
  2. 分區設計?:按時間、地域等業務邏輯分區。
  3. 避免全表掃描?:在WHERE中明確分區條件。
大數據相關文章(推薦)
  1. 架構搭建:
    中小型企業大數據平臺全棧搭建:Hive+HDFS+YARN+Hue+ZooKeeper+MySQL+Sqoop+Azkaban 保姆級配置指南

  2. 大數據入門:大數據(1)大數據入門萬字指南:從核心概念到實戰案例解析

  3. Yarn資源調度文章參考:大數據(3)YARN資源調度全解:從核心原理到萬億級集群的實戰調優

  4. Hive函數匯總:Hive函數大全:從核心內置函數到自定義UDF實戰指南(附詳細案例與總結)

  5. Hive函數高階:累積求和和滑動求和:Hive(15)中使用sum() over()實現累積求和和滑動求和

  6. Hive面向主題性、集成性、非易失性:大數據(4)Hive數倉三大核心特性解剖:面向主題性、集成性、非易失性如何重塑企業數據價值?

  7. Hive核心操作:大數據(4.2)Hive核心操作實戰指南:表創建、數據加載與分區/分桶設計深度解析

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

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

相關文章

Synopsys:設計對象

相關閱讀 Synopsyshttps://blog.csdn.net/weixin_45791458/category_12812219.html?spm1001.2014.3001.5482 對于Synopsys的EDA工具(如Design Compiler、PrimeTime、IC Compiler)等,設計對象(Design Objects)是組成整個設計的抽象表示&…

【愚公系列】《高效使用DeepSeek》053-工藝參數調優

??【技術大咖愚公搬代碼:全棧專家的成長之路,你關注的寶藏博主在這里!】?? ??開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主! ?? 江湖人稱"愚公搬代碼",用七年如一日的精神深耕技術領域,以"…

深度學習篇---模型訓練(1)

文章目錄 前言一、庫導入與配置部分介紹 二、超參數配置簡介 三、模型定義1. 改進殘差塊2. 完整CNN模型 四、數據集類五、數據加載函數六、訓練函數七、驗證函數八、檢查點管理九、主函數十、執行入口十一、關鍵設計亮點總結1.維度管理2.數據標準化3.動態學習率4.梯度剪裁5.檢查…

題解:AT_abc241_f [ABC241F] Skate

一道經典的 bfs 題。 提醒:本題解是為小白專做的,不想看的大佬請離開。 這道題首先一看就知道是 bfs,但是數據點不讓我們過: 1 ≤ H , W ≤ 1 0 9 1\le H,W\le10^9 1≤H,W≤109。 那么我們就需要優化了,從哪兒下手…

【含文檔+PPT+源碼】基于微信小程序的鄉村振興民宿管理系統

項目介紹 本課程演示的是一款基于微信小程序的鄉村振興民宿管理系統,主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 1.包含:項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 2.帶你從零開始部署運行本套系統 3.該…

STM32定時器通道1-4(CH1-CH4)的引腳映射關系

以下是 STM32定時器通道1-4(CH1-CH4)的引腳映射關系的詳細說明,以常見型號為例。由于不同系列/型號差異較大,請務必結合具體芯片的參考手冊確認。 一、STM32F1系列(如STM32F103C8T6) 1. TIM1(高級定時器) 通道默認引腳重映射引腳(部分/完全)備注CH1PA8無互補輸出CH1…

bge-m3+deepseek-v2-16b+離線語音能力實現離線文檔向量化問答語音版

ollama run deepseek-v2:16b ollama pull bge-m3 1、離線聽寫效果的大幅度提升。50M 1.3G(每次初始化都會很慢)---優化到首次初始化使用0延遲響應。 2、文檔問答歷史問題處理與優化,文檔問答離線策略討論與參數暴露。 3、離線大模型答復中斷…

前端界面在線excel編輯器 。node編寫post接口獲取文件流,使用傳參替換表格內容展示、前后端一把梭。

首先luckysheet插件是支持在線替換excel內容編輯得但是瀏覽器無法調用本地文件,如果只是展示,讓后端返回文件得二進制文件流就可以了,直接使用luckysheet展示。 這里我們使用xlsx-populate得node簡單應用來調用本地文件,自己寫一個…

JavaScript學習20-Event事件對象

1.屬性 即點擊誰就打印出來誰 2.方法 未添加stopPropagatio方法: 添加stopPropagatio方法后:

FreeRTOS 啟動過程中 SVC 和 PendSV 的工作流程?

在 FreeRTOS 的啟動過程中,SVC(Supervisor Call) 和 PendSV(Pendable Service Call) 是兩個關鍵的系統異常,分別用于 首次任務啟動 和 任務上下文切換。它們的協作確保了從內核初始化到多任務調度的平滑過渡。以下是詳細的工作流程分析(以 ARM Cortex-M 為例): 1. SVC…

[自制調試工具]構建高效調試利器:Debugger 類詳解

一、引言 在軟件開發的漫漫征程中,調試就像是一位忠誠的伙伴,時刻陪伴著開發者解決代碼里的各類問題。為了能更清晰地了解程序運行時變量的狀態,我們常常需要輸出各種變量的值。而 Debugger 類就像是一個貼心的調試助手,它能幫我…

foobar2000 VU Meter Visualisation 插件漢化版 VU表

原英文插件點此 界面展示 下載 https://wwtn.lanzout.com/iheI22ssoybi 安裝方式 解壓安裝文件,文件名為:foo_vis_vumeter-0.10.2_CHINIESE.fb2k-component

消息中間件對比與選型指南:Kafka、ActiveMQ、RabbitMQ與RocketMQ

目錄 引言 消息中間件的定義與作用 消息中間件在分布式系統中的重要性 對比分析的四種主流消息中間件概述 消息中間件核心特性對比 消息傳遞模型 Kafka:專注于發布-訂閱模型 ActiveMQ:支持點對點和發布-訂閱兩種模型 RabbitMQ:支持點…

liunx輸入法

1安裝fcitx5 sudo apt update sudo apt install fcitx fcitx-pinyin 2配置為默認輸入法 設置-》系統-》區域和語言 點擊系統彈出語言和支持選擇鍵盤輸入法系統 3設置設置 fcitx-configtool 如果沒顯示需要重啟電腦 4配置fcitx 把搜狗輸入法放到第一位(點擊下面…

WindowsPE文件格式入門05.PE加載器LoadPE

https://bpsend.net/thread-316-1-1.html LoadPE - pe 加載器 殼的前身 如果想訪問一個程序運行起來的內存,一種方法就是跨進程讀寫內存,但是跨進程讀寫內存需要來回調用api,不如直接訪問地址來得方便,那么如果我們需要直接訪問地址,該怎么做呢?.需要把dll注進程,注進去的代碼…

QGIS中第三方POI坐標偏移的快速校正-百度POI

1.百度POI: name,lng,lat,address 龍記黃燜雞米飯(共享區店),121.908315,30.886636,南匯新城鎮滬城環路699弄117號(A1區110室) 好福記黃燜雞(御橋路店),121.571409,31.162292,滬南路2419弄26號1層B間 御品黃燜雞米飯(安亭店),121.160322,31.305977,安亭鎮新源路792號…

SQL的調優方案

一、前言 SQL調優是提升數據庫性能的關鍵手段。需結合索引優化、SQL語句優化、執行計劃分析及數據庫架構設計等多方面綜合處理。 二、索引優化 創建合適索引 高頻查詢字段:對WHERE、JOIN、ORDER BY涉及的字段創建索引,尤其是區分度高的字段&#xff08…

【項目管理】第一部分 信息技術 1/2

相關文檔,希望互相學習,共同進步 風123456789~-CSDN博客 概要 知識點: 現代化基礎設施、數字經濟、工業互聯網、車聯網、智能制造、智慧城市、數字政府、5G、常用數據庫類型、數據倉庫、信息安全、網絡安全態勢感知、物聯網、大數…

【玩泰山派】1、mac上使用串口連接泰山派

文章目錄 前言picocom工具連接泰山派安裝picocom工具安裝ch340的驅動串口工具接線使用picocom連接泰山派 參考 前言 windows上面有xshell這個好用的工具可以使用串口連接板子,在mac上好像沒找到太好的工具,只能使用命令行工具去搞了。 之前查找說mac上…

【C++奇遇記】C++中的進階知識(繼承(一))

🎬 博客主頁:博主鏈接 🎥 本文由 M malloc 原創,首發于 CSDN🙉 🎄 學習專欄推薦:LeetCode刷題集 數據庫專欄 初階數據結構 🏅 歡迎點贊 👍 收藏 ?留言 📝 如…