模板學(xué)堂|SQL數(shù)據(jù)集動態(tài)參數(shù)使用場景及功能詳解
DataEase開源數(shù)據(jù)可視化分析平臺于2022年6月正式發(fā)布模板市場(https://dataease.io/templates/)。模板市場旨在為DataEase用戶提供專業(yè)、美觀、拿來即用的儀表板模板,方便用戶根據(jù)自身的業(yè)務(wù)需求和使用場景選擇對應(yīng)的儀表板模板,并在優(yōu)質(zhì)模板的基礎(chǔ)上輕松制作自己的儀表板。目前,DataEase模板市場的模板數(shù)量已經(jīng)超過了100個。
2023年7月上新模板
DataEase模板市場定期進(jìn)行模板上新。2023年7月共上新7個模板,涉及教育、制造、零售、醫(yī)療、開源生態(tài)等主題,歡迎大家在DataEase模板市場下載使用。







模板技巧
本月的模板技巧為大家介紹通過DataEase開源數(shù)據(jù)可視化分析工具中SQL數(shù)據(jù)集的動態(tài)參數(shù)功能,來減少儀表板數(shù)據(jù)查詢時間的方法。
在使用DataEase制作的儀表板時,用戶經(jīng)常會利用篩選組件來靈活地展示數(shù)據(jù)。然而,這些篩選組件實(shí)際上是在圖表的SQL查詢中添加了額外的WHERE條件。當(dāng)數(shù)據(jù)量非常大的時候,這種簡單的拼接方式可能會導(dǎo)致查詢時間顯著增加,影響用戶體驗。
為了加快查詢的效率,我們建議用戶考慮使用SQL數(shù)據(jù)集的動態(tài)參數(shù)功能。通過動態(tài)參數(shù)設(shè)置,用戶可以將原本的外查詢轉(zhuǎn)換為內(nèi)查詢,從而有效地優(yōu)化查詢過程。這樣一來,篩選條件將直接傳遞到原始SQL內(nèi)部,避免了大規(guī)模的數(shù)據(jù)掃描,從而大幅減少查詢時間。

以下方一個簡單SQL語句為例,不設(shè)置動態(tài)傳參,直接使用篩序條件的效果如下:
-- 原始SQL數(shù)據(jù)集語句: select * from table_demo; -- 儀表板使用篩選條件無動態(tài)傳參的拼接語句: select * from (select * from table_demo) where condition = ‘儀表板篩選組件所選條件’;
設(shè)置動態(tài)傳參,篩選條件直接替換預(yù)置參數(shù)的效果如下:
-- SQL數(shù)據(jù)集語句設(shè)置動態(tài)參數(shù): select * from table_demo where condition = ‘${condition}’; -- 儀表板篩選條件使用動態(tài)參數(shù)做替換: select * from table_demo where condition = ‘儀表板篩選組件所選條件’;
一、功能使用的前提
1. 使用SQL數(shù)據(jù)集;
2. 進(jìn)入SQL數(shù)據(jù)集編輯界面后,數(shù)據(jù)鏈接選擇使用直連模式(直連與定時同步的差異參見:https://dataease.io/docs/user_manual/dataset_description/)。

二、功能使用詳解
1. SQL數(shù)據(jù)集的設(shè)置
這部分我們通過一個示例來介紹。如下圖所示,通過一個簡單的SQL語句,我們查詢了華為云的賬單數(shù)據(jù)。
SELECT * FROM 云賬單_華為云;

當(dāng)我們在儀表板上使用賬單數(shù)據(jù)時,預(yù)備將產(chǎn)品作為篩選條件,并且希望該條件在SQL數(shù)據(jù)集中作為動態(tài)參數(shù)被傳入。

這時我們便可在SQL語句上補(bǔ)充WHERE條件,但無需將條件設(shè)置為固定值,而是使用“${xxx}”進(jìn)行替代,其中“xxx”為變量名。
SELECT * FROM 云賬單_華為云 ?WHERE 產(chǎn)品 = '${Product}';
完成SQL語句的編寫后,可以點(diǎn)擊下圖所示SQL數(shù)據(jù)集編輯界面右上角的“運(yùn)行查詢”按鈕進(jìn)行預(yù)覽,并確認(rèn)所寫SQL的執(zhí)行沒有問題。
注意:雖然我們增加了WHERE條件,但未傳入實(shí)際值到變量中時,并不會影響原始SQL的執(zhí)行及使用。

如果需要進(jìn)一步驗證傳入實(shí)際的值后,SQL查詢結(jié)果是否符合我們的預(yù)期,可以點(diǎn)擊SQL數(shù)據(jù)集編輯界面右上角的“參數(shù)設(shè)置”選項。

按照下圖說明,完成相關(guān)參數(shù)的配置,點(diǎn)擊“確認(rèn)”按鈕。

再次點(diǎn)擊SQL數(shù)據(jù)集編輯界面右上角的“運(yùn)行查詢”按鈕,觀察運(yùn)行結(jié)果。如下圖所示,此次查詢結(jié)果均為已設(shè)置的產(chǎn)品類型為“彈性公網(wǎng)IP”的數(shù)據(jù),由此證明動態(tài)參數(shù)是正常生效的。

需要特別補(bǔ)充的是,如下圖所示,在進(jìn)行“參數(shù)設(shè)置”時,該下拉選項中兩個參數(shù)的區(qū)別為:
■?僅編輯時生效:參數(shù)設(shè)置中所賦予的值僅用于在此數(shù)據(jù)集的編輯界面中的“運(yùn)行查詢”測試,離開數(shù)據(jù)集編輯界面后,該值無任何作用;
■?數(shù)據(jù)集預(yù)覽時全局生效:參數(shù)設(shè)置中所賦予的值不僅在此數(shù)據(jù)集編輯中的“運(yùn)行查詢”測試中生效,同時其值將作為該SQL數(shù)據(jù)集的默認(rèn)條件,在外部預(yù)覽數(shù)據(jù)集時同樣生效。

設(shè)置了“數(shù)據(jù)集預(yù)覽時全局生效”選項后,退出SQL數(shù)據(jù)集編輯界面,此時預(yù)覽數(shù)據(jù)集界面的效果如下,查詢結(jié)果同樣保持為已設(shè)置產(chǎn)品類型為“彈性公網(wǎng)IP”的數(shù)據(jù)。

2. 在儀表板中的應(yīng)用
使用上文中我們所配置的華為云云賬單SQL數(shù)據(jù)集制作一些簡單圖表,以下是未做過濾時的原始儀表板。

該儀表板中同時放置了一個文本下拉篩選組件,并將華為云云賬單SQL數(shù)據(jù)集中的產(chǎn)品作為篩選條件。

將該組件與SQL數(shù)據(jù)集中預(yù)設(shè)置的參數(shù)進(jìn)行關(guān)聯(lián),如下圖所示,勾選對應(yīng)參數(shù)即可。
保存參數(shù)的關(guān)聯(lián)后,返回儀表板。使用下圖篩選條件任選一個值,所選的值會被直接傳入到上文所設(shè)置的“Product”變量中。
重新編輯文本下拉組件,去掉參數(shù)的綁定后保存,再次測試儀表板數(shù)據(jù)篩選效果。
從篩選條件中任選一個數(shù)據(jù)值進(jìn)行過濾,由于此時并未綁定SQL數(shù)據(jù)集的動態(tài)參數(shù),即所選的值并未直接傳到“Product”變量中,而是在其SQL外層拼接新的過濾條件。但其并不影響對儀表板數(shù)據(jù)的過濾,如下圖所示,儀表板篩選結(jié)果與之前一致。
總結(jié)
SQL動態(tài)傳參通過將用戶的查詢條件由外部傳參轉(zhuǎn)換為內(nèi)部傳參,有效提升了查詢效率。然而,并非所有場景都需要使用動態(tài)傳參,特別是在數(shù)據(jù)量較小的情況下。雖然該功能有助于改善查詢效率,但并不能解決所有的SQL查詢性能問題。
在使用動態(tài)傳參時,需要綜合考慮利弊,并視具體情況謹(jǐn)慎選擇是否使用。進(jìn)一步優(yōu)化SQL語句、數(shù)據(jù)庫表和數(shù)據(jù)庫等方面也是提升查詢性能的關(guān)鍵。