本文介紹SQL完全精確的實現原理和操作步驟,協助您快速掌握其核心能力。
使用限制
以下功能暫不支援SQL完全精確:
實現原理
完全精確模式以時間換資源的方式確保結果精確完整。通過將各類資源約束統一轉化為時間維度,在使用者指定的時間範圍內,查詢任務將在安全水位下穩定運行,直至結果精確,或執行逾時。在技術實現方面,我們採用了多種策略:基於隔離資源集區的任務分配、針對使用者的隊列優先順序控制以及根據任務類型(如計算密集型、IO密集型)進行負載劃分。這些措施有效實現了資源的合理調度與高效利用,從而確保最終結果的精確性。
如下圖:普通查詢將在即時計算資源集區中運行,當Query觸發限制,將即時截斷,顯示結果不精確。當開啟 SQL 完全精確模式時,Query將在專屬的精確計算資源集區中執行。即便觸發資源限制,系統仍會確保任務在安全水位下穩定運行,直至資料完全載入並完成精確計算。
前提條件
已建立Standard Logstore。具體操作,請參見建立基礎LogStore。
已採集日誌。具體操作,請參見資料擷取。
已配置索引。具體操作,請參見配置索引。
操作步驟
Log Service支援單次開啟方式:僅當前LogStore下的查詢和分析操作,使用完全精確模式。
您可以通過控制台、API和SDK三種方式設定完全精確模式的最大逾時時間。分析操作的最大逾時的時間為55秒。
控制台
在Project列表地區,單擊目標Project。

在頁簽中,單擊目標Logstore。

單擊。
重要您可以通過設定
query_max_run_time參數來調整逾時時間。例如查詢分析語句為
* | select count(*) as pv,在分析語句中增加set session query_max_run_time=10s;,查詢分析語句為:* | set session query_max_run_time=10s; select count(*) as pv。
API
參數
query例如查詢分析語句為
* | select count(*) as pv。使用完全精確:在分析語句中增加
set session allow_incomplete=false;,表示使用完全精確。查詢分析語句為:* | set session allow_incomplete=false; select count(*) as pv。設定查詢分析逾時時間:在分析語句中增加
set session query_max_run_time=10s;,表示該語句最大執行時間為10s。查詢分析語句為:* | set session allow_incomplete=false; select count(*) as pv。同時設定完全精確和逾時時間:查詢分析語句為:
* | set session allow_incomplete=false; set session query_max_run_time=10s;select count(*) as pv。
GetLogsV2(返回結果壓縮後傳輸) - 查詢Logstore中的日誌資料
參數
query例如查詢分析語句為
* | select count(*) as pv。使用完全精確:在分析語句中增加
set session allow_incomplete=false;,表示使用完全精確。查詢分析語句為:* | set session allow_incomplete=false; select count(*) as pv。設定查詢分析逾時時間:在分析語句中增加
set session query_max_run_time=10s;,表示該語句最大執行時間為10s。查詢分析語句為:* | set session allow_incomplete=false; select count(*) as pv。同時設定完全精確和逾時時間:查詢分析語句為:
* | set session allow_incomplete=false; set session query_max_run_time=10s;select count(*) as pv。
SDK
此處以Java SDK為例。
前提條件
GetLogs()方法
參數
query例如查詢分析語句為
* | select count(*) as pv。使用完全精確:在分析語句中增加
set session allow_incomplete=false;,表示使用完全精確。查詢分析語句為:* | set session allow_incomplete=false; select count(*) as pv。設定查詢分析逾時時間:在分析語句中增加
set session query_max_run_time=10s;,表示該語句最大執行時間為10s。查詢分析語句為:* | set session allow_incomplete=false; select count(*) as pv。同時設定完全精確和逾時時間:查詢分析語句為:
* | set session allow_incomplete=false; set session query_max_run_time=10s;select count(*) as pv。
參數
session使用完全精確:
request.SetSession("allow_incomplete=false");。設定查詢分析逾時時間:
request.SetSession("query_max_run_time=10s");。同時設定完全精確和逾時時間:
request.SetSession("allow_incomplete=false;query_max_run_time=10s")。
import com.aliyun.openservices.log.Client; import com.aliyun.openservices.log.exception.LogException; import com.aliyun.openservices.log.request.GetLogsRequest; import com.aliyun.openservices.log.response.GetLogsResponse; public class CrearteLogStore { public static void main(String[] args) throws LogException { // 本樣本從環境變數中擷取AccessKey ID和AccessKey Secret。 String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); // 設定Log Service的服務存取點。此處以杭州為例,其它地區請根據實際情況填寫。 String host = "https://cn-beijing.log.aliyuncs.com"; // 建立Log ServiceClient。 Client client = new Client(host, accessId, accessKey); // 輸入Project名稱。 String projectName = "aliyun-test-project"; // logstore名稱 String logstore = "request_log"; String query = "* | SELECT count(0)"; int from = (int)(System.currentTimeMillis()/1000) - 60; int to = (int)(System.currentTimeMillis()/1000); GetLogsRequest request = new GetLogsRequest(projectName, logstore, from, to, "", query); request.SetSession("allow_incomplete=false;query_max_run_time=10s"); GetLogsResponse response = client.GetLogs(request); System.out.println(response.getCpuSec()); } }
常見問題
如何擷取CPU時間?
執行查詢和分析操作後,將滑鼠懸浮在分析結果上,查看CPU時間,如下圖所示。

使用一次SQL獨享版的費用是多少?
在不同的資料量中執行不同的查詢和分析語句,會產生不同的SQL獨享版費用,案例如下表所示。
查詢和分析語句
資料量(行)
平均每次的費用(美元)
* | select avg(double_0) from stress_s1_mil140億
0.004435
* | select avg(double_0), sum(double_0), max(double_0), min(double_0), count(double_0) from stress_s1_mil140億
0.006504
* | select avg(double_0), sum(double_1), max(double_2), min(double_3), count(double_4) from stress_s1_mil140億
0.013600
* | select key_0 , avg(double_0) as pv from stress_s1_mil1 group by key_0 order by pv desc limit 100040億
0.011826
* | select long_0, avg(double_0) as pv from stress_s1_mil1 group by long_0 order by pv desc limit 100040億
0.011087
* | select long_0, long_1, avg(double_0) as pv from stress_s1_mil1 group by long_0,long_1 order by pv desc limit 10003億
0.010791
* | select avg(double_0) from stress_s1_mil1 where key_0='key_987'40億
0.00007
> 完全精確