主頁 > 資料庫 > Hive執行計劃之hive依賴及權限查詢和常見使用場景

Hive執行計劃之hive依賴及權限查詢和常見使用場景

2023-06-08 09:35:52 資料庫

目錄
  • 概述
  • 1.explain dependency的查詢與使用
  • 2.借助explain dependency解決一些常見問題
    • 2.1.識別看似等價的SQL代碼實際上是不等價的:
    • 2.2 通過explain dependency驗證將過濾條件在不同位置的查詢區別
  • 3.查看SQL操作涉及到的相關權限資訊

概述

Hive查看執行計劃的命令中還有兩個不怎么常用但很重要的命令,接下來詳細介紹一下,

有一個問題:如何在hiveSQL執行之前就探查到這段邏輯的血緣依賴關系?

hive血緣是很多生產級數倉必須要提供的功能,大多數解決方案都是使用hive hooks的方法通過SQL執行后決議得到hive表的依賴關系

這個方案能細粒度到欄位級依賴,屬于很完善的一個解決方案,但有很多場景我們需要在SQL執行之前就得到依賴關系,那么如何解決的呢?

1.explain dependency的查詢與使用

explain dependency 提供了這樣的一個解決方案,它可以查詢一段SQL需要的資料來源,以JSON的形式展現結果資料,里面主要包含兩部分內容:

  • input_tables:描述一段SQL依賴的資料來源表,里面存盤的是hive表名的串列,格式如下:

    {"tablename":"庫名@表名","tabletype":"表的型別(外部表/內部表)"}

  • input_partitions:描述一段SQL依賴的資料來源表磁區,里面存盤的是磁區名稱的串列,格式如下:

    {"partitionName":"庫名@表名@磁區列=磁區列的值"}

    如果查詢的表為非磁區表,則顯示為空,

可以通過以下例子來進行比對,其中例1是查詢非磁區普通表SQL的explain dependency,例2是查詢磁區表SQL的explain dependency,

例1 使用explain dependency查看SQL非磁區普通表,

explain dependency
-- 統計年齡小于30歲各個年齡里,昵稱里帶“小”的人數
select age,count(0) as num from temp.user_info_all_no
where age < 30 and nick like '%小%'
group by age;

輸出結果內容:

{"input_tables":[{"tablename":"temp@user_info_all_no","tabletype":"MANAGED_TABLE"}],"input_partitions":[]}

例2 使用explain dependency查看SQL查詢磁區表,

explain dependency
-- 統計年齡小于30歲各個年齡里,昵稱里帶“小”的人數,其中ymd欄位為磁區欄位
select age,count(0) as num from temp.user_info_all where ymd >= '20230501'
and age < 30 and nick like '%小%'
group by age;

輸出結果內容:

{"input_tables":[{"tablename":"temp@user_info_all","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"temp@user_info_all@ymd=20230501"},{"partitionName":"temp@user_info_all@ymd=20230502"},{"partitionName":"temp@user_info_all@ymd=20230503"},{"partitionName":"temp@user_info_all@ymd=20230504"},{"partitionName":"temp@user_info_all@ymd=20230505"},{"partitionName":"temp@user_info_all@ymd=20230529"}]}

2.借助explain dependency解決一些常見問題

explain dependency的使用場景有以下幾個:

場景一,快速排除,快速排除因為讀不到相應磁區的資料而導致任務資料輸出例外,例如,在一個以天為磁區的任務中,上游任務因為生產程序不可控因素出現例外或者空跑,導致下游任務引發例外,通過這種方式,可以快速查看SQL讀取的磁區是否出現例外,

場景二,理清表的輸入,幫助理解程式的運行,特別是有助于理解有多重子查詢,多表連接的依賴輸入,

場景三,提前通過決議hiveSQL腳本進行血緣依賴決議,用于一些定制化資料平臺工具開發中的血緣構建,

explain dependency的使用能幫助開發者解決哪些問題呢?

2.1.識別看似等價的SQL代碼實際上是不等價的:

對于接觸SQL不久的程式員來說,很多人容易將

select * from a left join b on a.no=b.no and a.f>1 and a.f<3;

這段邏輯等價于 select * from a left join b on a.no=b.no where a.f>1 and a.f<3;

這兩段的邏輯的區別是在多表left join的時候where 后加條件是否等價與on后面加條件,

我們通過實體來看看其中的區別:

例3 使用explain dependency識別看似等價的SQL代碼,

-- 代碼1
explain dependency
select a.uid from temp.user_info_all a
left outer join temp.user_act_info b
on a.uid = b.uid and a.ymd = b.ymd and a.ymd >= '20230501' and a.ymd <= '20230502';

-- 代碼2
explain dependency
select a.uid from temp.user_info_all a
left outer join temp.user_act_info b
on a.uid = b.uid and a.ymd = b.ymd 
where a.ymd >= '20230501' and a.ymd <= '20230502';

輸出結果內容:

// 代碼1輸出結果
{"input_tables":[{"tablename":"temp@user_info_all","tabletype":"MANAGED_TABLE"},{"tablename":"temp@user_act_info","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"temp@user_info_all@ymd=20230430"},{"partitionName":"temp@user_info_all@ymd=20230501"},{"partitionName":"temp@user_info_all@ymd=20230502"},{"partitionName":"temp@user_info_all@ymd=20230503"},{"partitionName":"temp@user_info_all@ymd=20230504"},{"partitionName":"temp@user_info_all@ymd=20230505"},{"partitionName":"temp@user_info_all@ymd=20230529"},{"partitionName":"temp@user_act_info@ymd=20230501"},{"partitionName":"temp@user_act_info@ymd=20230502"},{"partitionName":"temp@user_act_info@ymd=20230503"},{"partitionName":"temp@user_act_info@ymd=20230606"}]}

// 代碼2輸出結果
{"input_tables":[{"tablename":"temp@user_info_all","tabletype":"MANAGED_TABLE"},{"tablename":"temp@user_act_info","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"temp@user_info_all@ymd=20230501"},{"partitionName":"temp@user_info_all@ymd=20230502"},{"partitionName":"temp@user_act_info@ymd=20230501"},{"partitionName":"temp@user_act_info@ymd=20230502"}]}

通過以上輸出結果可以看出,上面例子里的兩段SQL其實并不等價,在left join(left outer join)的連接條件中加入非等值的過濾條件后,這里特指作用于a表,也就是連接的基表,并沒有將左外連接的左右兩個表按照過濾條件進行過濾,左外連接在執行時會讀取所有磁區資料,然后進行關聯資料過濾操作,

left outer join 針對左表非等值條件on和where查詢資料on條件查詢資料大于where條件查詢資料,

下面查看left outer join對右表的過濾條件實體:

例4 使用explain dependency識別left outer join 右表過濾非等值條件區別

-- 代碼1
explain dependency
select a.uid from temp.user_info_all a
left outer join temp.user_act_info b
on a.uid = b.uid and a.ymd = b.ymd and b.ymd >= '20230501' and b.ymd <= '20230502';

-- 代碼2
explain dependency
select a.uid from temp.user_info_all a
left outer join temp.user_act_info b
on a.uid = b.uid and a.ymd = b.ymd 
where b.ymd >= '20230501' and b.ymd <= '20230502';

輸出結果內容:

// 代碼1輸出結果,on后跟非等值條件
{"input_tables":[{"tablename":"temp@user_info_all","tabletype":"MANAGED_TABLE"},{"tablename":"temp@user_act_info","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"temp@user_info_all@ymd=20230430"},{"partitionName":"temp@user_info_all@ymd=20230501"},{"partitionName":"temp@user_info_all@ymd=20230502"},{"partitionName":"temp@user_info_all@ymd=20230503"},{"partitionName":"temp@user_info_all@ymd=20230504"},{"partitionName":"temp@user_info_all@ymd=20230505"},{"partitionName":"temp@user_info_all@ymd=20230529"},{"partitionName":"temp@user_act_info@ymd=20230501"},{"partitionName":"temp@user_act_info@ymd=20230502"}]}

// 代碼2輸出結果,where后跟非等值條件
{"input_tables":[{"tablename":"temp@user_info_all","tabletype":"MANAGED_TABLE"},{"tablename":"temp@user_act_info","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"temp@user_info_all@ymd=20230430"},{"partitionName":"temp@user_info_all@ymd=20230501"},{"partitionName":"temp@user_info_all@ymd=20230502"},{"partitionName":"temp@user_info_all@ymd=20230503"},{"partitionName":"temp@user_info_all@ymd=20230504"},{"partitionName":"temp@user_info_all@ymd=20230505"},{"partitionName":"temp@user_info_all@ymd=20230529"},{"partitionName":"temp@user_act_info@ymd=20230501"},{"partitionName":"temp@user_act_info@ymd=20230502"},{"partitionName":"temp@user_act_info@ymd=20230503"},{"partitionName":"temp@user_act_info@ymd=20230606"}]}

可以看到left outer join 針對右表非等值條件on和where查詢資料左表都是全表掃描,右表on條件是條件過濾,where條件是全表掃描,

接下來對inner join,right outer join,full outer join進行測驗,會發現

inner join 的類似針對左右表非等值條件on和where查詢資料是等價的,

right outer join和left join相反,

full outer join都是全表掃描,

那么可以很好的判斷出一下兩段SQL的過濾條件資料讀取范圍是完全不一樣的,就不貼執行結果了,

例5 left outer join下的對左表和右表不等值條件過濾,

-- 代碼1
explain dependency
select a.uid from temp.user_info_all a
left outer join temp.user_act_info b
on a.uid = b.uid and a.ymd = b.ymd and a.ymd >= '20230501' and a.ymd <= '20230502';

-- 代碼2
explain dependency
select a.uid from temp.user_info_all a
left outer join temp.user_act_info b
on a.uid = b.uid and a.ymd = b.ymd and b.ymd >= '20230501' and b.ymd <= '20230502';

以上不同join型別資料查詢范圍不一致主要原因和hive對join和where的謂詞下推支持不同有關,通過explain dependency可以直接驗證hive對join和where進行謂詞下推規則的驗證,

謂詞下推可詳細查看什么是謂詞下推,看這一篇就夠了

2.2 通過explain dependency驗證將過濾條件在不同位置的查詢區別

如果要使用外連接并需要對左右兩個表進行條件過濾,做好的方式是將過濾條件放到就近處,即如果已經知道表資料過濾篩選條件,那么在使用該表前,就先用過濾條件進行過濾,然后進行其他操作,

一些SQL內置優化器會做一些過濾下推優化,但部分條件還是不會進行下推,所以我們在寫SQL時盡量養成先過濾而后進行其他操作(聚合,關聯)的習慣,

可以看如下實體:

例6 left outer join對左表過濾資料的優化對比,

-- 代碼1
explain dependency
select a.uid from temp.user_info_all a
left outer join temp.user_act_info b
on a.uid = b.uid and a.ymd = b.ymd 
where a.ymd >= '20230501' and a.ymd <= '20230502';

-- 代碼2
explain dependency
select a.uid from (
	select uid,ymd from temp.user_info_all
  -- 在子查詢內部進行過濾
  where ymd >= '20230501' and ymd <= '20230502'  
) a
left outer join temp.user_act_info b
on a.uid = b.uid and a.ymd = b.ymd;

-- 代碼3
explain dependency
select a.uid from (
	select uid,ymd from temp.user_info_all
  -- 在子查詢內部進行過濾
  where ymd >= '20230501' and ymd <= '20230502'  
) a
left outer join (
	select uid,ymd from temp.user_act_info
  where ymd >= '20230501' and ymd <= '20230502'
) b
on a.uid = b.uid and a.ymd = b.ymd;

執行結果:

//代碼1,左右表都進行了過濾
{"input_tables":[{"tablename":"temp@user_info_all","tabletype":"MANAGED_TABLE"},{"tablename":"temp@user_act_info","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"temp@user_info_all@ymd=20230501"},{"partitionName":"temp@user_info_all@ymd=20230502"},{"partitionName":"temp@user_act_info@ymd=20230501"},{"partitionName":"temp@user_act_info@ymd=20230502"}]}

//代碼2,右表進行了全表掃描
{"input_tables":[{"tablename":"temp@user_act_info","tabletype":"MANAGED_TABLE"},{"tablename":"temp@user_info_all","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"temp@user_info_all@ymd=20230501"},{"partitionName":"temp@user_info_all@ymd=20230502"},{"partitionName":"temp@user_act_info@ymd=20230501"},{"partitionName":"temp@user_act_info@ymd=20230502"},{"partitionName":"temp@user_act_info@ymd=20230503"},{"partitionName":"temp@user_act_info@ymd=20230606"}]}

//代碼3,左右表都進行了過濾
{"input_tables":[{"tablename":"temp@user_info_all","tabletype":"MANAGED_TABLE"},{"tablename":"temp@user_act_info","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"temp@user_info_all@ymd=20230501"},{"partitionName":"temp@user_info_all@ymd=20230502"},{"partitionName":"temp@user_act_info@ymd=20230501"},{"partitionName":"temp@user_act_info@ymd=20230502"}]}

可以看到left outer join對左表過濾資料的優化中代碼1片段等價于代碼3片段,即兩表都在就近處都過濾,

例7 left outer join對右表過濾資料的優化對比,

-- 代碼1
explain dependency
select a.uid from temp.user_info_all a
left outer join temp.user_act_info b
on a.uid = b.uid and a.ymd = b.ymd 
where b.ymd >= '20230501' and b.ymd <= '20230502';

-- 代碼2
explain dependency
select a.uid from (
	select uid,ymd from temp.user_info_all
  -- 在子查詢內部進行過濾
  where ymd >= '20230501' and ymd <= '20230502'  
) a
left outer join (
	select uid,ymd from temp.user_act_info
  where ymd >= '20230501' and ymd <= '20230502'
) b
on a.uid = b.uid and a.ymd = b.ymd;

-- 代碼3
explain dependency
select a.uid from temp.user_info_all a
left outer join (
	select uid,ymd from temp.user_act_info
  where ymd >= '20230501' and ymd <= '20230502'
) b
on a.uid = b.uid and a.ymd = b.ymd;

執行結果內容:

// 代碼1 ,左右表都進行了全表掃描
{"input_tables":[{"tablename":"temp@user_info_all","tabletype":"MANAGED_TABLE"},{"tablename":"temp@user_act_info","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"temp@user_info_all@ymd=20230430"},{"partitionName":"temp@user_info_all@ymd=20230501"},{"partitionName":"temp@user_info_all@ymd=20230502"},{"partitionName":"temp@user_info_all@ymd=20230503"},{"partitionName":"temp@user_info_all@ymd=20230504"},{"partitionName":"temp@user_info_all@ymd=20230505"},{"partitionName":"temp@user_info_all@ymd=20230529"},{"partitionName":"temp@user_act_info@ymd=20230501"},{"partitionName":"temp@user_act_info@ymd=20230502"},{"partitionName":"temp@user_act_info@ymd=20230503"},{"partitionName":"temp@user_act_info@ymd=20230606"}]}

//代碼2,左右表都進行了過濾
{"input_tables":[{"tablename":"temp@user_info_all","tabletype":"MANAGED_TABLE"},{"tablename":"temp@user_act_info","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"temp@user_info_all@ymd=20230501"},{"partitionName":"temp@user_info_all@ymd=20230502"},{"partitionName":"temp@user_act_info@ymd=20230501"},{"partitionName":"temp@user_act_info@ymd=20230502"}]}

//代碼3,右表都進行了過濾
{"input_tables":[{"tablename":"temp@user_info_all","tabletype":"MANAGED_TABLE"},{"tablename":"temp@user_act_info","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"temp@user_act_info@ymd=20230501"},{"partitionName":"temp@user_act_info@ymd=20230502"},{"partitionName":"temp@user_info_all@ymd=20230430"},{"partitionName":"temp@user_info_all@ymd=20230501"},{"partitionName":"temp@user_info_all@ymd=20230502"},{"partitionName":"temp@user_info_all@ymd=20230503"},{"partitionName":"temp@user_info_all@ymd=20230504"},{"partitionName":"temp@user_info_all@ymd=20230505"},{"partitionName":"temp@user_info_all@ymd=20230529"}]}

可以看到left outer join對右表過濾資料的優化中代碼2是最優,代碼3次之,代碼1最差,

3.查看SQL操作涉及到的相關權限資訊

通過explain authorization可以知道當前SQL訪問的資料來源(INPUTS) 和資料輸出(OUTPUTS),以及當前Hive的訪問用戶 (CURRENT_USER)和操作(OPERATION),

可以看以下實體:

例8 使用explain authorization查看權限相關資訊,

explain authorization
select a.uid from temp.user_info_all a
left outer join temp.user_act_info b
on a.uid = b.uid and a.ymd = b.ymd 
where a.ymd >= '20230501' and a.ymd <= '20230502';

執行結果:

INPUTS: 
  temp@user_info_all
  temp@user_act_info
  temp@user_info_all@ymd=20230501
  temp@user_info_all@ymd=20230502
  temp@user_act_info@ymd=20230501
  temp@user_act_info@ymd=20230502
OUTPUTS: 
  hdfs://nameservice1/tmp/hive/hdfs/a88cc133-c310-4129-bfa0-28011ac23904/hive_2023-06-07_19-42-55_464_2777807904847671424-1/-mr-10000
CURRENT_USER: 
  hdfs
OPERATION: 
  QUERY
AUTHORIZATION_FAILURES: 
  Permission denied: Principal [name=hdfs, type=USER] does not have following privileges for operation QUERY [[SELECT] on Object [type=TABLE_OR_VIEW, name=temp.user_act_info], [SELECT] on Object [type=TABLE_OR_VIEW, name=temp.user_info_all]]

從上面的資訊可知:

上面案例的資料來源是temp資料庫中的 user_info_all表和user_act_info表;

資料的輸出路徑是hdfs://nameservice1/tmp/hive/hdfs/a88cc133-c310-4129-bfa0-28011ac23904/hive_2023-06-07_19-42-55_464_2777807904847671424-1/-mr-10000;

當前的操作用戶是hdfs,操作是查詢(QUERY);

觀察上面的資訊我們還會看到AUTHORIZATION_FAILURES資訊,提示對當前的輸入沒有查詢權限,但如果運行上面的SQL的話也能夠正常運行,為什么會出現這種情況?Hive在默認不配置權限管理的情況下不進行權限驗證,所有的用戶在Hive里面都是超級管理員,即使不對特定的用戶進行賦權,也能夠正常查詢,

通過上面對explain相關引數的介紹,可以發現explain中有很多值得我們去研究的內容,讀懂 explain 的執行計劃有利于我們優化Hive SQL,同時也能提升我們對SQL的掌控力,

下一期:Hive執行計劃之什么是hiveSQL向量化模式及優化詳解

按例,歡迎點擊此處關注我的個人公眾號,交流更多知識,

后臺回復關鍵字 hive,隨機贈送一本魯邊備注版珍藏大資料書籍,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/554630.html

標籤:大數據

上一篇:kafka的安裝和基本操作

下一篇:返回列表

標籤雲
其他(160593) Python(38215) JavaScript(25484) Java(18209) C(15237) 區塊鏈(8270) C#(7972) AI(7469) 爪哇(7425) MySQL(7235) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4585) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1983) 功能(1967) HtmlCss(1955) Web開發(1951) C++(1933) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1879) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • Hive執行計劃之hive依賴及權限查詢和常見使用場景

    [TOC] ## 概述 Hive查看執行計劃的命令中還有兩個不怎么常用但很重要的命令,接下來詳細介紹一下。 有一個問題:**如何在hiveSQL執行之前就探查到這段邏輯的血緣依賴關系?** hive血緣是很多生產級數倉必須要提供的功能,大多數解決方案都是**使用hive hooks的方法通過SQL執 ......

    uj5u.com 2023-06-08 09:35:52 more
  • kafka的安裝和基本操作

    # 基本概念 ## 簡介 Kafka 最初是由 LinkedIn 即領英公司基于 Scala 和 Java 語言開發的分布式訊息發布-訂閱系統,現已捐獻給Apache 軟體基金會。其具有高吞吐、低延遲的特性,許多大資料實時流式處理系統比如 Storm、Spark、Flink等都能很好地與之集成。 總 ......

    uj5u.com 2023-06-08 09:35:45 more
  • 一份配置輕松搞定表單渲染,配置式表單渲染器在袋鼠云的實作思路與

    前段時間,[袋鼠云離線開發產品](https://www.dtstack.com/dtinsight?src=https://www.cnblogs.com/DTinsight/p/szsm)接到改造資料同步表單的需求。 一方面,[資料同步模塊](https://www.dtstack.com/dtinsight?src=szsm)的代碼可讀性和可維護性較差,導致在資料 ......

    uj5u.com 2023-06-08 09:35:23 more
  • GreatSQL洗掉磁區慢的跟蹤

    # GreatSQL洗掉磁區慢的跟蹤 ## 背景 某業務系統,每天凌晨會洗掉磁區表的一個磁區(按天磁區),耗時較久,從最開始的30秒,慢慢變為1分鐘+,影響到交易業務的正常進行。 在測驗環境進行了模擬,復現了洗掉磁區慢的情況,本次基于GreatSQL8.0.25-17進行測驗,官方mysql版本也存 ......

    uj5u.com 2023-06-07 10:00:28 more
  • GreatSQL洗掉磁區慢的跟蹤

    # GreatSQL洗掉磁區慢的跟蹤 ## 背景 某業務系統,每天凌晨會洗掉磁區表的一個磁區(按天磁區),耗時較久,從最開始的30秒,慢慢變為1分鐘+,影響到交易業務的正常進行。 在測驗環境進行了模擬,復現了洗掉磁區慢的情況,本次基于GreatSQL8.0.25-17進行測驗,官方mysql版本也存 ......

    uj5u.com 2023-06-07 09:43:44 more
  • 常用的 SQL Server 關鍵字及其含義

    SQL Server 是一種關系型資料庫管理系統(RDBMS),提供了用于管理和操作資料庫的各種關鍵字。 以下是一些常用的 SQL Server 關鍵字及其含義: 1. SELECT: 用于從資料庫中檢索資料。 2. INSERT: 用于將新記錄插入到資料庫表中。 3. UPDATE: 用于更新資料 ......

    uj5u.com 2023-06-07 08:19:39 more
  • Hive執行計劃之一文讀懂Hive執行計劃

    ## 概述 Hive的執行計劃描述了一個hiveSQL陳述句的具體執行步驟,通過執行計劃解讀可以了解hiveSQL陳述句被決議器轉換為相應程式語言的執行邏輯。通過執行邏輯可以知曉HiveSQL運行流程,進而對流程進行優化,實作更優的資料查詢處理。 同樣,通過執行計劃,還可以了解到哪些不一樣的SQL邏輯其 ......

    uj5u.com 2023-06-07 08:19:33 more
  • Zookeeper

    # zookeeper ZooKeeper是一個開源的分布式應用程式協調服務 簡單來說可以理解為zookeeper = 檔案系統+監聽通知機制 應用場景: 1. 集群管理、服務器狀態感知 2. 分布式應用配置管理 3. 統一命名服務 4. 分布式鎖 > 小總結: >1. 為客戶提供寫資料功能 資料不 ......

    uj5u.com 2023-06-07 08:19:28 more
  • 常用的 SQL Server 關鍵字及其含義

    SQL Server 是一種關系型資料庫管理系統(RDBMS),提供了用于管理和操作資料庫的各種關鍵字。 以下是一些常用的 SQL Server 關鍵字及其含義: 1. SELECT: 用于從資料庫中檢索資料。 2. INSERT: 用于將新記錄插入到資料庫表中。 3. UPDATE: 用于更新資料 ......

    uj5u.com 2023-06-07 08:19:16 more
  • Hive執行計劃之一文讀懂Hive執行計劃

    ## 概述 Hive的執行計劃描述了一個hiveSQL陳述句的具體執行步驟,通過執行計劃解讀可以了解hiveSQL陳述句被決議器轉換為相應程式語言的執行邏輯。通過執行邏輯可以知曉HiveSQL運行流程,進而對流程進行優化,實作更優的資料查詢處理。 同樣,通過執行計劃,還可以了解到哪些不一樣的SQL邏輯其 ......

    uj5u.com 2023-06-07 08:13:14 more