OpenMLDB SQL 開發調試神器 - OpenMLDB SQL Emulator

今天為大家介紹一款來自 OpenMLDB 社區的優秀獨立工具 - OpenMLDB SQL Simulator(https://github.com/vagetablechicken/OpenMLDBSQLEmulator) ,可以讓你更加高效方便的開發、調試 OpenMLDB SQL。

為了高效的實現時序特征計算,OpenMLDB SQL 對標準 SQL 做了改進和擴展,因此初學者在使用 OpenMLDB SQL 的時候,經常會碰到語法不熟悉、執行模式混淆等問題。如果直接在 OpenMLDB 上進行開發、調試,由于部署、構建索引、大數據量等問題,經常會浪費大量時間在無關任務上,并且可能無法找到 SQL 本身的錯誤原因。OpenMLDB SQL Emulator 是一個輕量級 OpenMLDB SQL 模擬開發調試工具,可以在脫離 OpenMLDB 集群部署的情況下,進行 SQL 的驗證和調試操作,堪稱 OpenMLDB SQL 的開發調試神器。我們強烈推薦此工具給我們的應用開發人員,可以首先基于此工具快速驗證 SQL 的正確性、可上線性以后,再切換到 OpenMLDB 真實環境上進行部署上線。

安裝和啟動

從項目頁面下載運行包 emulator-1.0.jar https://github.com/vagetablechicken/OpenMLDBSQLEmulator/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 中測試驗證,你可以使用valvalreq分別進行在線批模式和在線請求模式(即服務部署上線)的 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 包,或在此頁面下載 https://github.com/vagetablechicken/OpenMLDBSQLEmulator/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 寫入文件。常見使用方法是,先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: 0desc: describe this case# you can set batch modemode: requestdb: emudb # you can set default db for case, if not set, use the global default dbinputs:- name: t1db: 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 thiscolumns: ["id int", "pk1 string","col1 int32", "std_ts timestamp"]# gen by emulator, just to init table, not the deployment indexindexs: []# must set the data, emulator can't do thisdata: |1, A, 1, 15901154200002, 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 進行計算測試,使用命令dumpcaserun,例如:

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 官網: https://openmldb.ai/
  • OpenMLDB GitHub 主頁: https://github.com/4paradigm/OpenMLDB
  • OpenMLDB 文檔: https://openmldb.ai/docs/zh/
  • OpenMLDB 微信交流群

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166194.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166194.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166194.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高質量短效SOCKS5代理IP是什么意思?作為技術你了解嗎

小張是一位網絡安全技術測試員&#xff0c;最近他接到了一個頭疼的任務&#xff0c;那就是評估公司系統的安全性&#xff0c;因此他前來咨詢&#xff0c;在得知SOCKS5代理IP可以幫他之后&#xff0c;他不禁產生疑問&#xff0c;這是什么原理&#xff1f;其實和小張一樣的朋友不…

命令查詢職責分離 (CQRS)

CQRS 的最初需求 多年來&#xff0c;傳統的 CRUD&#xff08;創建、讀取、更新、刪除&#xff09;模式一直是系統架構的支柱。在 CRUD 中&#xff0c;讀取和寫入操作通常由相同的數據模型和相同的數據庫模式處理。雖然這種方法簡單直觀&#xff0c;但隨著系統規模的擴大和需求…

第99步 深度學習圖像目標檢測:SSDlite建模

基于WIN10的64位系統演示 一、寫在前面 本期&#xff0c;我們繼續學習深度學習圖像目標檢測系列&#xff0c;SSD&#xff08;Single Shot MultiBox Detector&#xff09;模型的后續版本&#xff0c;SSDlite模型。 二、SSDlite簡介 SSDLite 是 SSD 模型的一個變種&#xff0c…

竹云參編《公共數據授權運營平臺技術要求》團體標準正式發布

2023年11月23日&#xff0c;第二屆全球數字貿易博覽會“數據要素治理與市場化論壇”于杭州成功召開&#xff0c;國家數據局黨組書記、局長劉烈宏&#xff0c;浙江省委常委、常務副省長徐文光出席會議并致辭。會上&#xff0c;國家工業信息安全發展研究中心發布并解讀了我國首部…

[Linux] 馮諾依曼體系結構 與 操作系統

文章目錄 1、馮諾依曼體系結構2、操作系統 1、馮諾依曼體系結構 馮諾依曼結構也稱普林斯頓結構&#xff0c;是一種將程序指令存儲器和數據存儲器合并在一起的存儲器結構。程序指令存儲地址和數據存儲地址指向同一個存儲器的不同物理位置&#xff0c;因此程序指令和數據的寬度相…

【鴻蒙應用ArkTS開發系列】- 云開發入門實戰二 實現省市地區三級聯動地址選擇器組件(下)

文章目錄 概述端云調用流程端側集成AGC SDK端側省市地區聯動的地址選擇器組件開發創建省市數據模型創建省市地區視圖UI子組件創建頁面UI視圖Page文件 打包測試總結 概述 我們在前面的課程&#xff0c;對云開發的入門做了介紹&#xff0c;以及使用一個省市地區聯動的地址選擇器…

三次輸錯密碼后,系統是怎么做到不讓我繼續嘗試的?

1故事背景 忘記密碼這件事&#xff0c;相信絕大多數人都遇到過&#xff0c;輸一次錯一次&#xff0c;錯到幾次以上&#xff0c;就不允許你繼續嘗試了。 但當你嘗試重置密碼&#xff0c;又發現新密碼不能和原密碼重復&#xff1a; 圖片 相信此刻心情只能用一張圖形容&#xf…

Mobaxterm 使用lrzsz傳輸文件(rz/sz)

Mobaxterm 使用lrzsz傳輸文件報錯 1. 現象 最近從xshell切換到Mobaxterm其他一切正常,就是使用rz傳輸文件時會出現錯誤,比較苦惱. 會出現以下錯誤 [rootcentos7 rpmbuild]# rz ?CCCCCCCCCCC23be50ive.**B0100000023be502. 解決方法 去官網(https://mobaxterm.mobatek.net…

2021年03月 Scratch(三級)真題解析#中國電子學會#全國青少年軟件編程等級考試

Scratch等級考試(1~4級)全部真題?點這里 一、單選題(共25題,每題2分,共50分) 第1題 在《采礦》游戲中,當角色撿到黃金時財富值加1分,撿到鉆石時財富值加2分,下面哪個程序實現這個功能? A: B: C: D: 答案:D A將變量值固定,BC為雙重判斷

練習七-在Verilog中使用任務task

在Verilog中使用任務task 1&#xff0c;任務目的2&#xff0c;RTL代碼&#xff0c;交換3&#xff0c;測試代碼4&#xff0c;波形顯示 1&#xff0c;任務目的 &#xff08;1&#xff09;掌握任務在verilog模塊設計中的應用&#xff1b; &#xff08;2&#xff09;學會在電平敏感…

Android Studio記錄一個錯誤:Execution failed for task ‘:app:lintVitalRelease‘.

Android出現Execution failed for task :app:lintVitalRelease.> Lint found fatal errors while assembling a release target. Execution failed for task :app:lintVitalRelease解決方法 Execution failed for task ‘:app:lintVitalRelease’ build project 可以正常執…

〖大前端 - 基礎入門三大核心之JS篇?〗- DOM事件對象及它的屬性

說明&#xff1a;該文屬于 大前端全棧架構白寶書專欄&#xff0c;目前階段免費&#xff0c;如需要項目實戰或者是體系化資源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作經驗, 從事過全棧研發、產品經理等工作&#xf…

進程已結束,退出代碼-1073741571 (0xC00000FD)

今天遇到了一個很邪門的問題&#xff0c;沒有報錯&#xff0c;只是提示“進程已結束,退出代碼-1073741571 (0xC00000FD)”。后來查資料說是棧溢出。 出問題的應該是上面這段代碼。 這里我想把一個128*128的矩陣進行剪枝操作。 傳入的128*128的矩陣太大了&#xff0c;兩組for循…

介紹GLFW庫和OpenGL和GLEW庫三者之間的關系

具體來說&#xff0c;OpenGL是一個開放的圖形庫&#xff0c;它規定了每個函數應該如何執行&#xff0c;以及它們的輸出值&#xff0c;但沒有具體實現。它提供了渲染2D和3D圖形的標準或規范。 GLEW&#xff0c;全稱OpenGL Extension Wrangler Library&#xff0c;是一個用于管理…

【Flink】狀態管理

目錄 1、狀態概述 1.1 無狀態算子 1.2 有狀態算子 2、狀態分類 ?編輯 2.1 算子狀態 2.1.1 列表狀態&#xff08;ListState&#xff09; 2.1.2 聯合列表狀態&#xff08;UnionListState&#xff09; 2.1.3 廣播狀態&#xff08;BroadcastState&#xff09; 2.2 按鍵分…

Redis Transaction事務

Redis 事務的目的是方便用戶一次執行多個命令。執行 Redis 事務可分為三個階段&#xff1a; 開始事務命令入隊執行事務 Redis事務特性 Redis 事務具有兩個重要特性&#xff1a; 1) 單獨的隔離操作 事務中的所有命令都會被序列化&#xff0c;它們將按照順序執行&#xff0c…

圖像標記上線,描點信息盡在掌握丨三疊云

圖像標記 路徑 表單設計 >> 組件 >> 增強組件 功能簡介 「圖像標記」字段是「增強字段」類型字段。用戶通過上傳圖片的方式構建一個背景圖片&#xff0c;并在構建的圖片背景上添加描點信息。搭配「儀表盤」中的「圖像軌跡」&#xff0c;可繪制出相應的數據軌跡…

界面組件DevExpress Reporting v23.1 - Web報表設計器功能升級

DevExpress Reporting是.NET Framework下功能完善的報表平臺&#xff0c;它附帶了易于使用的Visual Studio報表設計器和豐富的報表控件集&#xff0c;包括數據透視表、圖表&#xff0c;因此您可以構建無與倫比、信息清晰的報表 界面組件DevExpress Reporting v23.1已經發布一段…

基于JavaWeb+SSM+Vue微信閱讀小程序的設計和實現

基于JavaWebSSMVue微信閱讀小程序的設計和實現 源碼獲取入口Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄[Java 源碼獲取 源碼獲取入口 Lun文目錄 第1章 緒論 1 1.1 課題背景 1 1.2 課題意義 1 1.3 研究內容 1 第2章 開發環境與技術 3 2.1 MYSQL數據庫 3 2.2 JSP技…

2016年8月15日 Go生態洞察:Go 1.7版本發布

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…