URL:https://www.jamesserra.com/archive/2019/12/azure-synapse-analytics-power-bi/
最近纵隔,Azure Synapse Analytics(原名?Azure SQL數(shù)據(jù)倉庫)正式發(fā)布的兩個(gè)與關(guān)系型數(shù)據(jù)庫有關(guān)的新功能(結(jié)果集緩存 [Result-set caching]?和具體化視圖 [Materialized View]), 在配合Power BI使用時(shí)可大幅提升報(bào)表性能。本文將介紹可以為Power BI查詢提速的不同方法,以及在Power BI中是否依然需要使用Azure Analysis Services,或者只使用表格模型(例如“多維數(shù)據(jù)集”)就足夠了元咙。請(qǐng)注意赡译,Azure Synapse Analytics還有一個(gè)單獨(dú)的預(yù)覽版本,該版本包含工作區(qū)(Workspace)以及一些新功能占调,例如Apache Spark、Azure Analytics Studio移剪、Serverless按需查詢究珊,該版本中的關(guān)系型數(shù)據(jù)庫引擎和關(guān)系型存儲(chǔ)是“SQL Analytics”池的一部分。本文介紹的所有內(nèi)容同樣適用于SQL Analytics池纵苛。為避免產(chǎn)生混淆桩匪,下文將使用“SQL DW”同時(shí)代表當(dāng)前版本的Azure Synapse Analytics以及預(yù)覽版中的SQL Analytics池砾嫉。
首先簡(jiǎn)單看看可以在Power BI中使用的各類選項(xiàng):
導(dǎo)入:從數(shù)據(jù)源(例如SQL DW)選中的表和列可導(dǎo)入Power BI Desktop進(jìn)而導(dǎo)入計(jì)算機(jī)內(nèi)存。隨著我們創(chuàng)建可視化或與可視化結(jié)果交互,Power BI Desktop將直接使用導(dǎo)入的數(shù)據(jù)胸梆,而絕對(duì)不會(huì)碰觸數(shù)據(jù)源(在其內(nèi)部踊谋,Power BI會(huì)將相關(guān)數(shù)據(jù)存儲(chǔ)在位于內(nèi)存緩存中的分析服務(wù)引擎中)护赊。我們必須刷新數(shù)據(jù)進(jìn)而將完整數(shù)據(jù)集重新導(dǎo)入(或使用Power BI Premium的增量刷新功能)给赞,才可以看到自從初始導(dǎo)入或上次刷新后底層數(shù)據(jù)產(chǎn)生的變化(因此這種方式并不是實(shí)時(shí)的)。Power BI服務(wù)中導(dǎo)入的數(shù)據(jù)集大小存在上限蓬坡,Power BI Premium版最多可導(dǎo)入10GB數(shù)據(jù)集(預(yù)覽版中該上限為400GB猿棉,這也是Azure Analysis Services能支持的最大規(guī)模)磅叛,Power BI免費(fèi)版最多可導(dǎo)入1GB數(shù)據(jù)集。請(qǐng)注意铺根,數(shù)據(jù)在被導(dǎo)入內(nèi)存時(shí)會(huì)被高度壓縮宪躯,因此實(shí)際可導(dǎo)入的數(shù)據(jù)量可能遠(yuǎn)大于這些限制。詳情可參閱Power BI Desktop中的數(shù)據(jù)源位迂。
DirectQuery:不將任何數(shù)據(jù)導(dǎo)入或復(fù)制到Power BI Desktop中访雪。此時(shí)當(dāng)我們創(chuàng)建可視化或與可視化結(jié)果交互時(shí),Power BI Desktop會(huì)直接查詢底層數(shù)據(jù)源(例如SQL DW)掂林,這意味著我們始終可以看到SQL DW中的最新數(shù)據(jù)(也就是實(shí)時(shí)的)臣缀。DirectQuery可供我們針對(duì)非常大的數(shù)據(jù)集構(gòu)建可視化,此時(shí)數(shù)據(jù)集的規(guī)模甚至可以大到已經(jīng)無法首先導(dǎo)入然后進(jìn)行聚合(雖然現(xiàn)在可以支持最大400GB的數(shù)據(jù)集泻帮,但聚合表依然需要使用DirectQuery精置,因?yàn)楹芏嗲闆r下數(shù)據(jù)集無法完全裝入內(nèi)存,并且只有需要實(shí)時(shí)獲得結(jié)果時(shí)才有必要使用DirectQuery)锣杂。詳情可參閱DirectQuery支持的數(shù)據(jù)源脂倦。
復(fù)合模型:可供一個(gè)報(bào)表無縫結(jié)合來自一個(gè)或多個(gè)DirectQuery數(shù)據(jù)源的數(shù)據(jù),并/或結(jié)合來自DirectQuery數(shù)據(jù)源和已導(dǎo)入數(shù)據(jù)的混合數(shù)據(jù)元莫。這就意味著我們可以將多個(gè)DirectQuery數(shù)據(jù)源與多個(gè)導(dǎo)入的數(shù)據(jù)源結(jié)合在一起赖阻。
雙重存儲(chǔ)模式:取決于提交到Power BI數(shù)據(jù)集的查詢上下文,雙重表(Dual table)可以表現(xiàn)為緩存的(導(dǎo)入的)或未緩存的踱蠢。某些情況下火欧,使用緩存的數(shù)據(jù)即可實(shí)現(xiàn)查詢;但也有些情況茎截,可能需要針對(duì)數(shù)據(jù)源執(zhí)行按需查詢(DirectQuery)才能實(shí)現(xiàn)查詢苇侵。
聚合:通過底層詳細(xì)信息表(將被設(shè)置為DirectQuery,意味著詳細(xì)信息數(shù)據(jù)會(huì)保留在數(shù)據(jù)源企锌,不被導(dǎo)入)可以創(chuàng)建聚合表(如果設(shè)置為導(dǎo)入模式榆浓,聚合表會(huì)駐留在內(nèi)存中)。如果用戶查詢所需的數(shù)據(jù)可以從聚合表中獲取撕攒,那么將直接從內(nèi)存中的表內(nèi)獲榷妇椤;否則會(huì)針對(duì)底層詳細(xì)信息表發(fā)起一次DirectQuery打却。針對(duì)同一個(gè)詳細(xì)信息表杉适,我們可以使用不同的求和(Summations off)創(chuàng)建多個(gè)聚合表谎倔。聚合表可以看作一種微型的多維數(shù)據(jù)集柳击,或類似于在SQL數(shù)據(jù)庫中通過索引加速SQL查詢的性能優(yōu)化技術(shù)。然而要注意片习,聚合表的創(chuàng)建過程需要耗費(fèi)一定時(shí)間(類似于多維數(shù)據(jù)集的處理工作)捌肴,并且數(shù)據(jù)不是實(shí)時(shí)的(只能體現(xiàn)最后一次刷新后的結(jié)果)蹬叭。詳情可參閱Power BI中的聚合以及創(chuàng)建聚合,第1部分:簡(jiǎn)介状知。
你可能會(huì)好奇秽五,Power BI的導(dǎo)入模式現(xiàn)在已經(jīng)可以支持更大的模型(400GB),此時(shí)還有必要使用聚合表嗎饥悴?大部分情況下還是必要的坦喘。首先,僅Power BI
Premium支持更大的模型西设,如果你使用了免費(fèi)版Power BI瓣铣,那么模型最大只能達(dá)到10GB。其次贷揽,導(dǎo)入大規(guī)模的詳細(xì)信息表會(huì)在不進(jìn)行聚合的情況下導(dǎo)入所有詳細(xì)信息記錄(如果是一個(gè)260億行的表棠笑,那么就要將260億行數(shù)據(jù)導(dǎo)入內(nèi)存)。因此哪怕上限高達(dá)400GB禽绪,一些非常大的表依然無法導(dǎo)入蓖救,因而此時(shí)可以使用聚合表創(chuàng)建聚合(260億行的表經(jīng)過這種方式處理,可能被縮小為僅1000萬聚合行印屁,更容易裝入內(nèi)存中)循捺。這種情況下,需要復(fù)制到內(nèi)存的數(shù)據(jù)量將會(huì)大幅減小库车。就算某個(gè)查詢需要的聚合數(shù)據(jù)無法從內(nèi)存中的聚合表內(nèi)獲取巨柒,此時(shí)也沒問題,Power BI會(huì)針對(duì)詳細(xì)信息表執(zhí)行DirectQuery柠衍。簡(jiǎn)而言之洋满,聚合表可以幫助我們順利使用原本根本無法完全裝入內(nèi)存的大容量數(shù)據(jù)集,可以幫助我們使用更便宜的SKU節(jié)約成本珍坊,并且我們完全不需要管理將數(shù)據(jù)復(fù)制到內(nèi)存的相關(guān)操作牺勾。
Azure Synapse Analytics新增的兩個(gè)用于提高性能的功能非常重要:
>>?結(jié)果集緩存:可將查詢結(jié)果自動(dòng)緩存到用戶數(shù)據(jù)庫中以供重復(fù)使用。借此阵漏,后續(xù)查詢執(zhí)行時(shí)就可以從持久緩存中直接獲得結(jié)果驻民,不再需要重新計(jì)算。結(jié)果集緩存可改善查詢性能(將所需時(shí)間降低至毫秒級(jí))并降低計(jì)算資源的用量履怯。此外回还,使用緩存結(jié)果集的查詢會(huì)在Azure Synapse Analytics中設(shè)置為do not use any?concurrency slots,因此不會(huì)消耗現(xiàn)有的并行請(qǐng)求限制叹洲。
>>?具體化視圖:和表類似柠硕,這是一種預(yù)算計(jì)算、存儲(chǔ)并在SQL DW中維持?jǐn)?shù)據(jù)的視圖。每次使用具體化視圖時(shí)蝗柔,將不再重新進(jìn)行計(jì)算闻葵。用到具體化視圖中全部或部分?jǐn)?shù)據(jù)的查詢可以借此實(shí)現(xiàn)更高性能。更棒的是癣丧,查詢甚至可以在無需直接引用的情況下使用具體化視圖槽畔,因此該功能的使用完全不需要更改應(yīng)用程序代碼。
因此在使用Azure Synapse Analytics作為Power BI數(shù)據(jù)源的情況下胁编,查詢?cè)L問數(shù)據(jù)時(shí)涉及到的不同層面將會(huì)如下所示:
每一層的性能表現(xiàn)到底如何厢钧?在一場(chǎng)Ignite課程(可以在這里觀看)中,針對(duì)260億行數(shù)據(jù)運(yùn)行的Power BI查詢可按年份返回店鋪的總銷量嬉橙,相同查詢使用不同層運(yùn)行了三次:
1. 針對(duì)SQL DW中的表運(yùn)行DirectQuery坏快,耗時(shí)8秒。
2. 針對(duì)SQL DW中的具體化視圖運(yùn)行DirectQuery憎夷,耗時(shí)2.4秒莽鸿。請(qǐng)注意:無需在查詢中指定自己要使用具體化視圖,SQL DW優(yōu)化器會(huì)判斷是否可以使用拾给。
3. 使用導(dǎo)入到Power BI的聚合表祥得,耗時(shí)0毫秒。
需要注意的是蒋得,這一切對(duì)用戶都是透明的级及,用戶只需要?jiǎng)?chuàng)建報(bào)表即可。如果用戶在Power BI中查詢的表不在內(nèi)存中额衙,將會(huì)針對(duì)數(shù)據(jù)源執(zhí)行DirectQuery饮焦,整個(gè)過程可能需要一些時(shí)間。不過因?yàn)镾QL DW支持結(jié)果集緩存窍侧,因此重復(fù)的DirectQuery將會(huì)變得非诚靥撸快(在Ignite課程中演示的DirectQuery,查詢首次運(yùn)行耗時(shí)42秒伟件,但在使用結(jié)果集緩存的情況下硼啤,再次運(yùn)行該查詢僅耗時(shí)154毫秒)。
借助結(jié)果集緩存和具體化視圖等功能斧账,我們就可以在不將數(shù)據(jù)載入Power BI的前提下獲得夢(mèng)寐以求的高性能谴返。
另外需要注意:短期內(nèi),Synapse并不會(huì)對(duì)使用外部聯(lián)接的查詢(而這恰恰是Power BI默認(rèn)發(fā)送的查詢類型)使用具體化視圖咧织。因此Power BI用戶如果希望使用具體化視圖嗓袱,需要為數(shù)據(jù)完整性選項(xiàng)設(shè)置可信數(shù)據(jù)源(但當(dāng)Synapse正式發(fā)布后就不需要這樣做了)。另外需要注意习绢,具體化視圖可以直接查詢渠抹,因此用戶可以創(chuàng)建具體化視圖,隨后即可在Power BI中創(chuàng)建直接引用這些視圖的聚合。
這些新功能也會(huì)讓我們產(chǎn)生疑問:我們是否依然需要Azure Analysis Services(AAS)逼肯,或者Power BI中的表格模型(例如“多維數(shù)據(jù)集”)就足夠了?還是兩者都不再需要桃煎,直接在Power BI中使用DirectQuery足矣篮幢?
對(duì)于第一個(gè)問題,假設(shè)你已經(jīng)有了Power BI Premium(尤其是該版本現(xiàn)已支持XMLA終結(jié)點(diǎn))为迈,那么確實(shí)沒必要繼續(xù)使用AAS三椿。Power BI Premium最終將包含AAS的全部功能。但考慮到平移遷移的場(chǎng)景葫辐,AAS在可預(yù)見的未來將繼續(xù)獲得支持:AAS在模型建模方面與本地的SSAS保持了一致搜锰,因此對(duì)于尚未真正了解Power BI在現(xiàn)代化革新等方面完整收益(具體收益可參閱下文)的客戶,在準(zhǔn)備好擁抱Power BI前耿战,這些客戶可能暫時(shí)會(huì)選擇遷移至AAS(但最終依然將支持從SSAS平移至Power BI的做法)蛋叼。如果希望將其與第三方產(chǎn)品(例如報(bào)表工具)配合使用,并且無法使用Power BI Premium(例如你的公司可能統(tǒng)一使用了其他報(bào)表工具)此時(shí)可能依然需要用到AAS剂陡。例如我目前就遇到過這樣的場(chǎng)景:客戶已經(jīng)斥資訓(xùn)練了一小群?jiǎn)T工構(gòu)建AAS多維數(shù)據(jù)集狈涮,隨后將其提供給更廣泛的用戶群,以便他們通過多維數(shù)據(jù)集進(jìn)行自服務(wù)式的報(bào)表工作鸭栖。
將Power BI與AAS配合使用可獲得的收益包括:使用Microsoft Information Protection標(biāo)簽實(shí)現(xiàn)基于Microsoft Cloud App Security的數(shù)據(jù)保護(hù)歌馍、共享數(shù)據(jù)集、聚合晕鹊、通過DW為大數(shù)據(jù)創(chuàng)建的復(fù)合模型松却、借助增量刷新實(shí)現(xiàn)的簡(jiǎn)化管理、跨越工作區(qū)的Power BI數(shù)據(jù)世系視圖溅话、與大數(shù)據(jù)數(shù)據(jù)源更完善的連接能力晓锻、分頁報(bào)表、數(shù)據(jù)流飞几、自動(dòng)化的機(jī)器學(xué)習(xí)和認(rèn)知服務(wù)带射、Power BI Desktop建模、自帶(加密)密鑰以及多模型內(nèi)存管理循狰。
不過也要注意窟社,目前AAS的某些功能依然未包含在Power BI中,這些功能包括:從Visual Studio部署至Power BI的能力绪钥、XMLA寫入終結(jié)點(diǎn)灿里、查詢的橫向擴(kuò)展、與某些第三方工具的集成程腹、備份/還原匣吊、防火墻、多種服務(wù)層級(jí)、Log Analytics集成色鸳、REST API的異步處理社痛、透視、模型中的關(guān)鍵績(jī)效指標(biāo)(KPI)命雀、不規(guī)則層次結(jié)構(gòu)蒜哀、對(duì)象級(jí)別安全性以及元數(shù)據(jù)翻譯。
好在以后我們將能用非常簡(jiǎn)單的方法把Analysis Services模型部署到Power BI Premium吏砂,因此如果現(xiàn)在使用了Analysis Services撵儿,以后也不會(huì)丟失任何工作成果。屆時(shí)狐血,我們只需要在Visual Studio中淀歇,將部署服務(wù)器屬性的值由現(xiàn)有SSAS或Azure AS服務(wù)器改為Power BI Premium工作區(qū)的XMLA終結(jié)點(diǎn)即可。
此外還有一些很出色的博客文章對(duì)比了Power BI Premium和Azure Analysis Services:Power BI Premium和Azure Analysis Services匈织、為大型數(shù)據(jù)集選用Azure Analysis Services浪默、Power BI大型數(shù)據(jù)集:好的、壞的和丑陋的缀匕、ANALYSIS SERVICES與POWER BI PREMIUM模型功能矩陣浴鸿。
對(duì)于第二個(gè)問題:是否可以針對(duì)SQL DW只使用DirectQuery,以避免在Power BI中同時(shí)使用AAS和多維數(shù)據(jù)集弦追。答案是肯定的岳链,但前提是你確定所要使用的查詢總是能命中SQL DW的結(jié)果集緩存(可以在這里看到哪些東西不會(huì)被緩存,并在這里看到什么情況下會(huì)使用緩存的結(jié)果)劲件。但如果無法滿足這樣的前提掸哑,尤其是你使用的Power BI儀表板需要為所有查詢實(shí)現(xiàn)毫秒級(jí)別的響應(yīng),那么最好在Power BI中為這樣的儀表板使用多維數(shù)據(jù)集或聚合零远,并為即席查詢使用SQL DW苗分。另外需要注意,在Power BI中針對(duì)SQL DW使用DirectQuery時(shí)會(huì)在DAX方面用到一些限制牵辣,此時(shí)可能需要在Power BI中使用AAS或多維數(shù)據(jù)集摔癣,而非DirectQuery。這些限制也包括時(shí)間智能功能(完整清單可參閱這里)纬向。另外還要注意择浊,當(dāng)你不再使用多維數(shù)據(jù)集時(shí),可能會(huì)非常懷念它所提供的某些價(jià)值:語義層逾条、無需聯(lián)接或關(guān)系琢岩、層次結(jié)構(gòu)、KPI师脂、高級(jí)時(shí)間計(jì)算担孔,以及更高的并行請(qǐng)求限制江锨。
更多信息:
為大型數(shù)據(jù)集選用Azure Analysis Services