日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

学习笔记Hive(八)—— 查询优化

發(fā)布時(shí)間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习笔记Hive(八)—— 查询优化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、視圖

1.1、Hive的視圖

  • 視圖是基于數(shù)據(jù)庫(kù)的基本表進(jìn)行創(chuàng)建的一種偽表,數(shù)據(jù)庫(kù)中儲(chǔ)存視圖的定義,不存數(shù)據(jù)項(xiàng),數(shù)據(jù)項(xiàng)仍然存在基本表中它可作為一個(gè)抽象層,將數(shù)據(jù)發(fā)布給下游用戶。
  • 目前 Hive 版本支持邏輯視圖,不支持物理視圖。所以 Hive 的數(shù)據(jù)倉(cāng)庫(kù)目錄查找不到視圖,但可在 Mysql 的元數(shù)據(jù)庫(kù)中查找到。
  • 視圖只能查詢,不能進(jìn)行數(shù)據(jù)的插入和修改,可以提高數(shù)據(jù)的安全性。
  • 在創(chuàng)建視圖時(shí)候視圖就已經(jīng)固定,對(duì)基表的后續(xù)更改(如添加列)將不會(huì)反映在視圖。
  • view定義中若包含了ORDER BY/LIMIT語(yǔ)句,則當(dāng)查詢視圖時(shí)也進(jìn)行ORDER BY/LIMIT語(yǔ)句操作,view當(dāng)中定義的優(yōu)先級(jí)更高。

1.2、引用視圖的優(yōu)點(diǎn)

  • 使用視圖降低查詢復(fù)雜度
  • 使用視圖來(lái)限制基于條件過(guò)濾的數(shù)據(jù)

1.3、視圖創(chuàng)建和應(yīng)用

1.3.1、了解顧客需求

1.3.2、創(chuàng)建視圖

CREATE VIEW [IF NOT EXISTS] [db_name.]view_name -- 視圖名稱 [(column_name [COMMENT column_comment], ...) ] --列名 [COMMENT view_comment] --視圖注釋 [TBLPROPERTIES (property_name = property_value, ...)] --額外信息 AS SELECT ...;

1.3.3、查看與刪除視圖

1、查看某個(gè)視圖

desc view_name;

2、查看某個(gè)視圖詳細(xì)信息

desc formatted view_name;

3、刪除視圖

DROP VIEW [IF EXISTS] [db_name.]view_name;

任務(wù)1

將以下嵌套查詢中的嵌套子查詢變成視圖

select t.types,t.goods,t.t_g_count from (select c.types,c.goods,count(1) t_g_count,row_number() over(partition by c.types order by count(1) desc) rank from(select a.*,b.types from goodsorder a left outer join goodstypes b on a.goods=b.goods) c group by c.types,c.goods) t where rank<=10




結(jié)果(部分):


二、索引

2.1、Hive的索引

  • Hive沒(méi)有主鍵概念,但可以建立索引,索引的設(shè)計(jì)目標(biāo)是提高表某些列的查詢速度。
  • 在指定列上建立索引,會(huì)產(chǎn)生一張索引表,里面的字段包括:索引列的值、該值對(duì)應(yīng)的HDFS文件路徑、該值在文件中的偏移量。
  • 在查詢涉及到索引字段時(shí),首先到索引表查找索引列值對(duì)應(yīng)的HDFS文件路徑及偏移量,這樣就避免了全表掃描。

索引表:


2.2、索引的優(yōu)點(diǎn)

  • 可以避免全表掃描和資源浪費(fèi)
  • 可以加快含有g(shù)roup by的語(yǔ)句的查詢速度

2.3、索引創(chuàng)建和應(yīng)用

2.3.1、創(chuàng)建索引

CREATE INDEX index_name --索引名稱 ON TABLE base_table_name (col_name, ...) --建立索引的列 AS index_type --索引類型 [WITH DEFERRED REBUILD] --重建索引 [IDXPROPERTIES (property_name=property_value, ...)] --索引額外屬性 [IN TABLE index_table_name] --索引表的名字 [ [ ROW FORMAT ...] STORED AS ... | STORED BY ... ] --索引表行分隔符 、 存儲(chǔ)格式 [LOCATION hdfs_path] --索引表存儲(chǔ)位置 [TBLPROPERTIES (...)] --索引表表屬性 [COMMENT "index comment"]; --索引注釋

2.3.2、自動(dòng)使用索引

(創(chuàng)建索引之前設(shè)置)

SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat; SET hive.optimize.index.filter=true; SET hive.optimize.index.filter.compact.minsize=0;

2.3.3、查看和刪除索引

1、顯示表上所有列的索引

SHOW FORMATTED INDEX ON table_name;

2、刪除索引

DROP INDEX [IF EXISTS] index_name ON table_name;

任務(wù)2

1、為goodsorders id字段創(chuàng)建索引

2、查詢id=10的顧客的訂單

3、按照id分組統(tǒng)計(jì)每個(gè)顧客購(gòu)買商品數(shù)量


三、存儲(chǔ)格式

3.1、文件存儲(chǔ)格式

  • 指Hive表數(shù)據(jù)存儲(chǔ)的格式
  • 默認(rèn)是文本文件格式
  • 有行存儲(chǔ)和列存儲(chǔ)

3.2、存儲(chǔ)格式設(shè)置

STORED AS (TextFile|RCFile|SequenceFile|ORC|Parquet) 存儲(chǔ)格式存儲(chǔ)方式壓縮方式特點(diǎn)
textFile按行存儲(chǔ)Gzip,Bzip2存儲(chǔ)空間消耗比較大,并且壓縮的text 無(wú)法分割和合并 查詢的效率最低,可以直接存儲(chǔ),加載數(shù)據(jù)的速度最高
SequenceFile按行存儲(chǔ)NONE,RECORD,BLOCK。Record壓縮率低,一般建議使用BLOCK壓縮存儲(chǔ)空間消耗最大,壓縮的文件可以分割和合并 查詢效率高,需要通過(guò)text文件轉(zhuǎn)化來(lái)加載
RCFile按列存儲(chǔ)存儲(chǔ)空間小,查詢的效率高 ,需要通過(guò)text文件轉(zhuǎn)化來(lái)加載,加載的速度低。壓縮快 快速列存取。讀取全量數(shù)據(jù)的操作 性能可能比sequencefile沒(méi)有明顯的優(yōu)勢(shì)
ORCFile按列存儲(chǔ)zlib(default),snappy壓縮快,快速列存取 ,效率比rcfile高,是rcfile的改良版本,不支持其他的查詢引擎, 比如impala
parquet按列存儲(chǔ)Parquet壓縮比較低,查詢效率較低,不支持update、insert和ACID.但是Parquet支持Impala查詢引擎

默認(rèn)是TextFile存儲(chǔ)格式

Impala是CloudParquet和ORC有很多相似之處, 但是Parquet更有意成為hadoop上通用的存儲(chǔ)格式. 它可以與impala, Spark, Pig等引擎結(jié)合使用. 它可以指定每一列的壓縮方式, 從而實(shí)現(xiàn)更高效的壓縮. Parquet旨在設(shè)計(jì)為支持復(fù)雜嵌套數(shù)據(jù)的存儲(chǔ), 比如json


任務(wù)3

數(shù)據(jù)(person.parquet):

1,Tom,23 2,Kate,24 3,Betty,22 4,Ketty,23 5,Jhon,21

1、創(chuàng)建表person,設(shè)置表的數(shù)據(jù)存儲(chǔ)格式為parquet

2、將user.parquet文件存入表中

3、查詢數(shù)據(jù)

總結(jié)

以上是生活随笔為你收集整理的学习笔记Hive(八)—— 查询优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。