PolarDB-X最佳實踐系列(五):使用通義千問和存儲過程快速生成測試數據

我們在測試數據庫性能的過程中,通常需要生成一批測試數據。

以前,一般要寫一段程序或者腳本來完成這項工作,但現在是2024年啦!時代變了!

PolarDB-X目前是少有的支持存儲過程的分佈式數據庫,結合大模型,我們可以非常簡單的來製造測試數據: 存儲過程的原理和使用方法 通義官網

例如,有這樣的表結構:

CREATE TABLE t2 (
        id bigint(20) NOT NULL AUTO_INCREMENT,
        c1 varchar(64) NOT NULL ,
        c2 tinyint(4) NOT NULL ,
        c3 varchar(64) NOT NULL ,
        c4 tinyint(4) NOT NULL ,
        c5 varchar(64) NOT NULL ,
        c6 bigint(20) DEFAULT NULL ,
        c7 bigint(20) DEFAULT NULL ,
        c8 double DEFAULT NULL ,
        c9 bigint(20) DEFAULT NULL ,
        PRIMARY KEY (id),
        CLUSTERED INDEX gsi1 (c3)
                PARTITION BY KEY(c3)
                PARTITIONS 32,
        UNIQUE KEY uk1 (c5, c3, c1),
        KEY idx1 (c1),
        KEY idx2 (c5, c1, c8),
        KEY idx3 (c5, c3, c8)
) ENGINE = InnoDB PARTITION BY KEY(c1) PARTITIONS 32;

我們只需要對通義千問進行提問,描述以下需求,它就能自動生成一個存儲過程:

寫一個存儲過程,爲以下表生成100萬條數據,其中,c1和c5是40位的十六進制字符串。(SQL內容省略了)

通義千問生成了這樣的下面的存儲過程:

DELIMITER ;;
CREATE PROCEDURE GenerateTestData()
BEGIN
    DECLARE v_counter INT DEFAULT 0;
    DECLARE v_hex_string CHAR(40);
    WHILE v_counter < 1000000 DO
        -- 生成40位十六進制字符串
        SET v_hex_string = LPAD(LOWER(REPLACE(UUID(), '-', '')), 40, '0');
        INSERT INTO t2 (
            c1,
            c2,
            c3,
            c4,
            c5,
            c6,
            c7,
            c8,
            c9
        ) VALUES (
            -- 生成c1的十六進制字符串
            v_hex_string,
            -- 隨機生成tinyint值(例如,範圍從0到255)
            FLOOR(RAND() * 256),
            -- 生成c3的隨機字符串(也可以是十六進制,這裏僅作示例)
            LPAD(LOWER(REPLACE(UUID(), '-', '')), 32, '0'),
            -- 隨機生成tinyint值
            FLOOR(RAND() * 256),
            -- 生成c5的十六進制字符串
            v_hex_string,
            -- 隨機生成bigint值
            FLOOR(RAND() * POW(2, 63)),
            -- 隨機生成bigint值
            FLOOR(RAND() * POW(2, 63)),
            -- 隨機生成double值
            RAND(),
            -- 隨機生成bigint值
            FLOOR(RAND() * POW(2, 63))
        );
        SET v_counter = v_counter + 1;
    END WHILE;
END;;
DELIMITER ;
CALL GenerateTestData();

由於PolarDB-X對MySQL的語法兼容都非常高,我們無需對生成結果進行修改,直接粘貼到PolarDB-X中即可執行:

喝一杯茶,我們的測試數據就創建完成了:

歡迎關注,我們會帶給大家更多PolarDB-X的最佳實踐!

作者:夢實

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章