OpenMLDB SQL 開發除錯神器 - OpenMLDB SQL Emulator
今天為大家介紹一款來自 OpenMLDB 社群的優秀獨立工具 - OpenMLDB SQL Simulator( ) ,可以讓你更加高效方便的開發、除錯 OpenMLDB SQL。
為了高效的實現時序特徵計算,OpenMLDB SQL 對標準 SQL 做了改進和擴充套件,因此初學者在使用 OpenMLDB SQL 的時候,經常會碰到語法不熟悉、執行模式混淆等問題。如果直接在 OpenMLDB 上進行開發、除錯,由於部署、構建索引、大資料量等問題,經常會浪費大量時間在無關任務上,並且可能無法找到 SQL 本身的錯誤原因。OpenMLDB SQL Emulator 是一個輕量級 OpenMLDB SQL 模擬開發除錯工具,可以在脫離 OpenMLDB 叢集部署的情況下,進行 SQL 的驗證和除錯操作,堪稱 OpenMLDB SQL 的開發除錯神器。我們強烈推薦此工具給我們的應用開發人員,可以首先基於此工具快速驗證 SQL 的正確性、可上線性以後,再切換到 OpenMLDB 真實環境上進行部署上線。
安裝和啟動
從專案頁面下載執行包 `emulator-1.0.jar` /releases,使用如下方式啟動(注意當前釋出的 1.0 版本對應於 OpenMLDB 0.8.3 的 SQL 語法):
java -jar emulator-1.0.jar
注意,如果想使用 `run` 命令執行 SQL 來驗證結果,還需要同時下載該頁面下的 `toydb_run_engine`,並且存放在系統 `/tmp` 目錄下。
建立虛擬資料庫和表
啟動後,將直接進入到預設的資料庫 emudb,不需要額外建立資料庫。
- 資料庫不需要被顯式建立,只需要`use <db name>`或建表時指定資料庫名,即可自動建立資料庫。
- 使用命令 `addtable` 或者 `t` 來建立虛擬表,重複建立同名表就是更新操作,將使用最新的表schema。我們使用簡化的類 SQL 語法管理表,比如下面的例子建立了一個含有兩列的表。
addtable t1 a int, b int64
- 使用命令 `showtables` 或者 `st` 來檢視當前所有的資料庫和表。
驗證 OpenMLDB SQL
OpenMLDB SQL 是否可以上線,在叢集中可以使用 `DEPLOY` 進行上線測試,但是需要管理 DEPLOYMENT 與索引。例如,如果不需要某些測試用的 DEPLOYMENT,需要手動刪除;如果建立了不需要的索引,還需要清理索引。所以,我們建議在 Emulator 中測試驗證,你可以使用`val`和`valreq`分別進行線上批模式和線上請求模式(即服務部署上線)的 OpenMLDB SQL 驗證。例如,我們測試一個 SQL 是否能被 `DEPLOY` 上線,使用 `valreq` 命令:
addtable t1 a int, b int64
valreq select count(*) over w1 from t1 window w1 as (partition by a order by b rows between unbounded preceding and current row);
如果測試不透過,將列印 SQL 編譯錯誤;透過則列印“validate * success”。整個過程在虛擬環境中,無需擔心建表後的資源佔用,也沒有任何副作用。只要 valreq 驗證透過的 SQL,則一定能在真實叢集中上線。
測試執行 OpenMLDB SQL
OpenMLDB Emulator 也可以返回計算結果,用於測試 SQL 計算是否符合預期。你可以在其中不斷進行計算和上線驗證,直到除錯得到最終的上線SQL。該功能可以透過 Emulator 的 `run` 命令實現。注意,使用`run`命令需要額外的 toydb_run_engine 支援,可以使用自帶 toydb 的 emulator 包,或在此頁面下載 /releases) toydb 程式,並將其直接放入`/tmp`中。
假設 Emulator 已有 toydb,測試執行步驟如下:
# step 1, generate a yaml template
gencase
# step 2, modify the yaml file to add table and data
# ...
# step 3, load yaml to get table catalog,
# then using val/valreq sql to validate the sql in emulator
loadcase
valreq <sql>
# step 4, dump the sql, this will rewrite the yaml file
dumpcase <sql>
# step 5, run sql using toydb
run
執行命令`gencase`將會生成一個yaml模版檔案,預設建立目錄為是`/tmp/emu-case.yaml`。然後,你需要編輯這個 yaml 檔案,如下所示。編輯需要注意以下幾點:
- 你必須修改表名,表 schema 及其資料,這些不可在 Emulator 中修改。
- 你可以修改執行 mode,接受 batch 或 request 模式。
- 你可以不填寫 SQL,可以在 Emulator 中透過`dumpcase` <sql>寫入檔案。常見使用方法是,先validate SQL,SQL透過校驗後dump到case中,再使用 `run` 命令確認 SQL 的計算符合預期。
- 表的 indexs 也無需手動填寫,`dumpcase`時可以根據表 schema 自動生成(indexs 並非特殊的索引,與 SQL 也無關,僅僅是建立表時需要建立至少一個索引)。如果你不使用`dumpcase`,那麼請手動填寫至少一個索引,索引沒有特別要求。
# call toydb_run_engine to run this yaml file
# you can generate yaml cases for reproduction by emulator dump or by yourself
# you can set the global default db
db: emudb
cases:
- id: 0
desc: describe this case
# you can set batch mode
mode: request
db: emudb # you can set default db for case, if not set, use the global default db
inputs:
- name: t1
db: emudb # you can set db for each table, if not set, use the default db(table db > case db > global db)
# must set table schema, emulator can't do this
columns: ["id int", "pk1 string","col1 int32", "std_ts timestamp"]
# gen by emulator, just to init table, not the deployment index
indexs: []
# must set the data, emulator can't do this
data: |
1, A, 1, 1590115420000
2, B, 1, 1590115420000
# query: only support single query, to check the result by `expect`
sql: |
# optional, you can just check the output, or add your expect
# expect:
# schema: id:int, pk1:string, col1:int, std_ts:timestamp, w1_col1_sum:int, w2_col1_sum:int, w3_col1_sum:int
# order: id
# data: |
# 1, A, 1, 1590115420000, 1, 1, 1
# 2, B, 1, 1590115420000, 1, 1, 1
簡單起見,我們不進行修改,直接使用這個模版來演示如何修改執行 case。在 Emulator 中,我們執行`loadcase`,這個 case 的表資訊將被載入到 Emulator 中,可以透過`st/showtables`確認 case 的表載入成功。
emudb> st
emudb={t1=id:int32,pk1:string,col1:int32,std_ts:timestamp}
可以看到表資訊已成功載入,我們就可以使用`valreq`來確認我們編寫的 SQL 是語法正確且可以上線的。然後,可以對這個 SQL 進行計算測試,使用命令`dumpcase`和`run`,例如:
valreq select count(*) over w1 from t1 window w1 as (partition by id order by std_ts rows between unbounded preceding and current row);
dumpcase select count(*) over w1 from t1 window w1 as (partition by id order by std_ts rows between unbounded preceding and current row);
run
`dumpcase`實際是將 SQL 與預設索引寫入 case 檔案中,`run` 命令執行該 case 檔案。所以,如果你足夠熟練,也可以直接修改這個case檔案,再在 Emulator 中使用 `run` 執行它,或直接使用`toydb_run_engine --yaml_path=...`來執行。執行後將會得到計算結果用於除錯檢查。
更多
OpenMLDB SQL Emulator 還有 genddl 功能,可以幫助使用者根據 SQL 直接生成最 佳索引的建表語句,避免冗餘索引(目前僅支援單資料庫)。未來將在索引處理上,提供更簡單方便的操作,指導使用者進行索引管理。此外,Emulator 互動使用上,建議多使用?`help`和 `?list-all`提示,命令均為小寫,但引數填寫的 SQL 不限制大小寫,與 CLI 一致,SQL作為一個引數也不需要額外的雙引號引用。未來將會增加命令歷史、匯出當前環境等功能,方便使用者操作與對接真實 OpenMLDB 叢集。
相關閱讀
- OpenMLDB 官網: OpenMLDB - 生產級特徵開發全棧解決方案
- OpenMLDB GitHub 主頁: https:// github.com/4paradigm/Op enMLDB
- OpenMLDB 文件: https:// openmldb.ai/docs/zh/
- OpenMLDB 微信交流群
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026745/viewspace-2997075/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OpenMLDB 新手寶典 開發者上手必讀
- OpenMLDB 跨機房容災方案
- OpenMLDB 線上模組架構解析架構
- iOS開發除錯神器:Reveal 24 for maciOS除錯Mac
- 重磅訊息·OpenMLDB官方網站 今日正式上線!網站
- 一款SQL自動檢查神器,再也不用擔心SQL出錯了SQL
- [20220329]是否開發寫錯sql語句.txtSQL
- 【Meetup預告】OpenMLDB+OneFlow:連結特徵工程到模型訓練,加速機器學習模型開發特徵工程模型機器學習
- 週日直播|OpenMLDB Pulsar Connector,高效打通實時資料到特徵工程特徵工程
- 介面除錯神器Reveal除錯
- sql 語句網路除錯和 sql 語句低層傳輸檢視SQL除錯
- 實時決策系統中 OpenMLDB 的常見架構整合方式架構
- vue 程式碼除錯神器Vue除錯
- 記一次SQL Server刪除SQL調優SQLServer
- eruda手機端除錯神器除錯
- [20230329]記錄除錯sql語句遇到的問題.txt除錯SQL
- SQL稽核 | 如何使用 SQLE 進行開發階段 SQL稽核SQL
- SQL server開啟 安裝包時報錯SQLServer
- 執行SQL發生錯誤!錯誤:disk I/O errorSQLError
- 你必須擁有的Python除錯神器Python除錯
- Vue除錯神器vue-devtools安裝Vue除錯dev
- SQL稽核 | 這裡有 MySQL/Oracle 最常用的 SQL 開發規則MySqlOracle
- PbootCMS執行SQL發生錯誤!錯誤:no such column: def1bootSQL
- PbootCMS 執行SQL發生錯誤!錯誤: no such table:ay_configbootSQL
- 關於SQL server2008除錯儲存過程的完整步驟SQLServer除錯儲存過程
- hibernate配置級聯刪除時報錯:could not execute statement; SQL [n/a]; constraint [null]SQLAINull
- Kali自動化SQL隱碼攻擊神器————JSQLSQLJS
- PbootCMS錯誤提示:執行SQL發生錯誤!錯誤:no such column: def1bootSQL
- 常見的錯誤 SQL 用法SQL
- Eruda 一個被人遺忘的除錯神器除錯
- Android除錯神器stetho使用詳解和改造Android除錯
- 1024 開源首發 | SQL 稽核工具 SQLESQL
- 前端開發移動端除錯前端除錯
- SpringBoot配置HTTPS及開發除錯Spring BootHTTP除錯
- Fiddler助力微信開發除錯除錯
- 升級提示 執行SQL發生錯誤!錯誤:duplicate column name: picstitleSQL
- SQL基礎——DML(插入、修改和刪除)SQL
- sql 多表關聯刪除表資料SQL