成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你知道Hive統(tǒng)計(jì)函數(shù)count(*)為什么不走M(jìn)R嗎?

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
用insert into 的方式插入到Hive表數(shù)據(jù)時(shí),元數(shù)據(jù)會(huì)記錄插入的數(shù)量,為了優(yōu)化查詢,無條件count(*)查詢時(shí)直接查元數(shù)據(jù)中記錄的numRows字段,導(dǎo)致結(jié)果不準(zhǔn)確。

問題

Hive執(zhí)行count(*)不走M(jìn)R呢?

先說結(jié)論:如果表數(shù)據(jù)是insert進(jìn)表的,count(*)統(tǒng)計(jì)時(shí),帶where條件執(zhí)行時(shí)候Hive會(huì)執(zhí)行MR,如果不帶where條件,Hive會(huì)從元數(shù)據(jù)庫(kù)表metastore.TABLE_PARAMS中直接獲取numRows字段的值獲取記錄數(shù)。下面創(chuàng)建表進(jìn)行驗(yàn)證,在驗(yàn)證時(shí)發(fā)現(xiàn)了Hive在無條件count(*)統(tǒng)計(jì)中的一個(gè)bug,bug現(xiàn)象也會(huì)下面驗(yàn)證。

創(chuàng)建測(cè)試表

create database testdb;
use testdb;
--測(cè)試hive
create table test(
id int comment 'id'
)comment '測(cè)試hive'
insert into test values('1001');
select count(*) from test ;
select count(*) from test where id>=1001;

hive表存儲(chǔ)位置

表描述信息

hdfs上生成了數(shù)據(jù)

數(shù)據(jù)內(nèi)容

從上面兩個(gè)圖上可以看到建表后插入一條記錄,會(huì)在metastore.TABLE_PARAMS 表中記錄該表的信息,并且用numRows記錄該表的數(shù)量,查看HDFS該表所在的路徑生成了000000_0的文件,下載下來查看確實(shí)是1001。

執(zhí)行count(*)

不帶where條件執(zhí)行:查詢非常快,也并沒有走M(jìn)R。

不帶where條件執(zhí)行結(jié)果

帶where條件執(zhí)行:查詢比較慢,且走了MR。

可以驗(yàn)證Hive不帶where條件的執(zhí)行不走M(jìn)R,而是直接從元數(shù)據(jù)里獲取表的行數(shù),這也算是一種優(yōu)化,畢竟Hive存儲(chǔ)的數(shù)據(jù)大多是T+1的數(shù)據(jù),數(shù)據(jù)寫入后一般不會(huì)改變。

Hive的一個(gè)bug

本地創(chuàng)建一個(gè)ids.txt文件,通過hadoop fs -put 命令上傳到表映射路徑/user/hive/warehouse/testdb.db/test上。

創(chuàng)建文件并上傳到表路徑。

hdfs文件下載并查看結(jié)果

執(zhí)行不帶where條件的count(*)結(jié)果就是錯(cuò)誤的,而帶where條件的是正確的。

然后通過Hive執(zhí)行帶條件和不帶條件的查詢結(jié)果發(fā)現(xiàn),不帶where條件中的查詢結(jié)果是1,而帶where條件的結(jié)果是3,說明直接通過hadoop fs -put把文件上傳到路徑的方式會(huì)導(dǎo)致Hive在沒有條件的統(tǒng)計(jì)下結(jié)果是錯(cuò)誤的,也側(cè)面證明了無條件的count(*)是從元數(shù)據(jù)庫(kù)直接取的數(shù)據(jù),而用select * 查詢時(shí)結(jié)果卻是正確的。

解決方法

要解決上面問題,可以使用Load data指令導(dǎo)入數(shù)據(jù),但是有如下幾點(diǎn)要注意:

  • 有LOCAL表示從本地文件系統(tǒng)加載,文件會(huì)被拷貝到HDFS中。
  • 無LOCAL表示從HDFS中加載數(shù)據(jù),文件直接被移動(dòng),而不是拷貝。
  • OVERWRITE 表示是否覆蓋表中數(shù)據(jù)(或指定分區(qū)的數(shù)據(jù)),沒有OVERWRITE 會(huì)直接APPEND,而不會(huì)濾重。
  • 如果加載同樣文件名的文件,會(huì)被自動(dòng)重命名。

load data

用load data指令上傳完數(shù)據(jù)后,再次用無條件的count(*)統(tǒng)計(jì)結(jié)果,發(fā)現(xiàn)Hive又走了MR統(tǒng)計(jì),并且結(jié)果是正確的。

總結(jié)

用insert into 的方式插入到Hive表數(shù)據(jù)時(shí),元數(shù)據(jù)會(huì)記錄插入的數(shù)量,為了優(yōu)化查詢,無條件count(*)查詢時(shí)直接查元數(shù)據(jù)中記錄的numRows字段,導(dǎo)致結(jié)果不準(zhǔn)確。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2024-04-03 09:23:31

ES索引分析器

2020-11-17 08:30:06

LinuxSwapping 設(shè)計(jì)

2024-01-09 07:29:05

Argo代碼庫(kù)應(yīng)用程序

2023-11-02 10:22:29

gRPC后端通信

2024-10-09 08:19:35

2020-04-16 11:19:55

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)層

2025-06-05 01:11:00

2024-10-12 14:58:07

2023-06-26 08:20:02

openapi格式注解

2023-03-09 08:23:07

序列化?接口方法

2023-09-08 08:35:42

層疊樣式表CSS

2021-02-20 08:21:18

Hive動(dòng)態(tài)分區(qū)

2023-08-30 07:27:39

2022-09-28 18:16:34

JavaJDK

2018-10-28 15:40:23

Python編程語言

2014-07-15 11:05:30

黑莓

2020-04-01 17:50:02

Python編程語言

2021-11-12 05:59:23

容災(zāi)備份5G

2023-12-20 08:23:53

NIO組件非阻塞

2024-04-30 09:02:48

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 中文字幕一区二区三区四区五区 | 91精品国产乱码久久久久久久 | 国产亚洲精品精品国产亚洲综合 | 免费在线黄| 99爱在线视频 | 91高清视频 | 男人天堂国产 | 成人精品鲁一区一区二区 | 国产视频中文字幕在线观看 | 亚洲一区二区三区视频 | 特级生活片 | 精品国产欧美一区二区三区成人 | 天天干视频网 | 色婷婷久久久久swag精品 | 一区二区亚洲 | 在线播放中文字幕 | 国产精品一区网站 | 精品视频一区二区三区在线观看 | 久久久久久国模大尺度人体 | 久久www免费视频 | 香蕉久久av | 欧美www在线观看 | 色www精品视频在线观看 | 正在播放亚洲 | 国产视频中文字幕 | 欧美亚洲国产日韩 | 孕妇一级毛片 | 伊人春色在线观看 | 日一区二区 | 天天草天天爱 | 成人a免费 | 欧美电影网| 欧美一级欧美三级在线观看 | 精品九九久久 | 久久i| 91精品国产91 | 成人欧美一区二区三区在线观看 | 中文在线播放 | 国产亚洲精品久久久久久牛牛 | 免费观看毛片 | 久久99久久99精品免视看婷婷 |