體驗(yàn)智能SQL轉(zhuǎn)換領(lǐng)航助手(Migration on Pilot)
背景
在傳統(tǒng)的異構(gòu)數(shù)據(jù)庫遷移上云場景中,通常存在以下難點(diǎn)和痛點(diǎn):
源/目標(biāo)兩種數(shù)據(jù)庫屬于異構(gòu)數(shù)據(jù)庫,源數(shù)據(jù)庫使用者不一定熟悉如何使用目標(biāo)數(shù)據(jù)庫及其SQL語法規(guī)則。
異構(gòu)數(shù)據(jù)庫之間的SQL語法規(guī)則差異,導(dǎo)致在異構(gòu)數(shù)據(jù)庫遷移前后必須要對SQL語句進(jìn)行一定的定制化改造,才能保證順利遷移以及遷移完成后正常使用目標(biāo)數(shù)據(jù)庫。
傳統(tǒng)的遷移工具無法提供100%有效且通用的SQL規(guī)則,無法幫助用戶解決以上問題。
方案介紹
阿里云瑤池解決方案體驗(yàn)館提供了智能SQL轉(zhuǎn)換領(lǐng)航助手(Migration on Pilot),通過LLM+SQL規(guī)則轉(zhuǎn)換融合,幫助您解決在異構(gòu)數(shù)據(jù)庫遷移過程中的以上疑問和難點(diǎn)。本方案主要從兩方面提供智能SQL轉(zhuǎn)換:
基于規(guī)則的智能轉(zhuǎn)換Prompt:基于異構(gòu)數(shù)據(jù)庫遷移ADAM積累并提煉的多年的成功遷移實(shí)踐經(jīng)驗(yàn),融合了ADAM獨(dú)有的智能轉(zhuǎn)換Prompt能力。基于SQL轉(zhuǎn)換規(guī)則,通過Parser解析成AST;通過重構(gòu)AST,生成目標(biāo)數(shù)據(jù)庫的語法。
基于LLM的交互式智能訂正:引入通義千問大模型,并與其智能改造意圖LLM模型提供的交互能力,結(jié)合其情感/意圖分析模型,打造自然語言交互式智能訂正。
影響
本體驗(yàn)不涉及生產(chǎn)環(huán)境的部署,因此不會影響業(yè)務(wù)。
費(fèi)用
本次體驗(yàn)中,由于體驗(yàn)涉及到的資源不歸屬于您,因此不會產(chǎn)生任何費(fèi)用,您可以放心體驗(yàn)。
操作步驟
進(jìn)入MOP界面(二選一)。
在概覽頁簽,單擊Migration on Pilot卡片。
在解決方案頁簽,展開DB+AI體驗(yàn)折疊面板,然后單擊Migration on Pilot的免費(fèi)體驗(yàn)按鈕。
首先輸入要轉(zhuǎn)化的源SQL。當(dāng)前僅支持Oracle數(shù)據(jù)庫的SQL語法。
您也可以在示例SQL的下拉列表中選擇提供的示例進(jìn)行體驗(yàn)。
選擇目標(biāo)數(shù)據(jù)庫類型。當(dāng)前支持PostgreSQL數(shù)據(jù)庫(如阿里云數(shù)據(jù)庫RDS PostgreSQL)、云原生數(shù)據(jù)倉庫AnalyticDB PostgreSQL、云原生數(shù)據(jù)庫PolarDB PostgreSQL版(兼容Oracle)。
單擊轉(zhuǎn)化源SQL按鈕,進(jìn)行智能SQL轉(zhuǎn)化,自動將您輸入的源SQL轉(zhuǎn)化為適配目標(biāo)數(shù)據(jù)庫的SQL語句。
您可在下方區(qū)域了解具體的改造點(diǎn)與改造方案,如源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫之間的語法差異和不兼容性,以及針對這部分差異。
例如,您可以選擇如下函數(shù)定義SQL:
CREATE OR REPLACE FUNCTION "SHOPTEST"."GET_TAB_PTF"( p_rows IN NUMBER) RETURN t_tf_tab PIPELINED AS BEGIN FOR i IN 1 .. p_rows LOOP PIPE ROW(t_tf_row(i, 'Description for ' || i)); END LOOP; RETURN; END;
當(dāng)目標(biāo)數(shù)據(jù)庫為PolarDB PostgreSQL(兼容Oracle)時(shí),轉(zhuǎn)換后的SQL如下:
CREATE OR REPLACE FUNCTION "SHOPTEST"."GET_TAB_PTF"(p_rows IN NUMBER) RETURN TABLE (t_tf_row(i INTEGER, Description VARCHAR2(200))) AS BEGIN FOR i IN 1 .. p_rows LOOP RETURN NEXT t_tf_row(i, 'Description for ' || i); END LOOP; END; /
您可以從下方區(qū)域了解到,由于PolarDB PostgreSQL(兼容Oracle)不支持PIPELINED關(guān)鍵字,因此主要針對這一點(diǎn)進(jìn)行改造。
您還可以在輸入框中輸入自然語言,進(jìn)一步補(bǔ)充您對SQL改造的要求。
例如,基于上述返回的目標(biāo)數(shù)據(jù)庫SQL示例中,您可以輸入
請幫我改成存儲過程
,然后觀察進(jìn)一步的改造結(jié)果:CREATE OR REPLACE PROCEDURE SHOPTEST.GET_TAB_PTF(p_rows IN NUMBER) AS TYPE tab_t IS TABLE OF t_tf_row INDEX BY PLS_INTEGER; v_tab tab_t; BEGIN FOR i IN 1 .. p_rows LOOP v_tab(i) := t_tf_row(i, 'Description for ' || i); END LOOP; FOR i IN tab_t.FIRST..tab_t.LAST LOOP DBMS_OUTPUT.PUT_LINE(v_tab(i).i||'-'||v_tab(i).description); END LOOP; END; /