Hi,Databend 的朋友們!🚀
十月,我們專注於生產自動化的落地。存儲過程正式可用並移除了實驗性標記,SQL 腳本引擎支持 dynamic schema introspection,能夠處理複雜的 ETL 流程。同時,我們發佈了 JSON 全文檢索的 inverted index、智能內存溢出控制,並全面升級了運維工具——本月共發佈了十一個版本。
月度數據
22 個新功能,19 個 bug 修復,15 項重構,12 項維護更新。
本月亮點
🔥 核心新功能
- 存儲過程正式可用 —— 支持 dynamic schema introspection,移除實驗性標記,內置完整的腳本能力
- ANY JOIN 操作 —— INNER/LEFT/RIGHT ANY JOIN,高效的集合成員檢查和半連接模式
- JSON 全文搜索 —— inverted index 支持 Variant 內部字段掃描,半結構化數據的快速文本搜索
- COPY 歷史追蹤 —— 新增
copy_history系統表,記錄所有 COPY 操作的完整歷史 - Vacuum 保護 —— 不可逆的 DROP 操作需要明確確認,防止誤刪數據
- 數學函數擴展 —— 新增
isnan()和isinf()函數,用於 IEEE 754 浮點數驗證
⚡ 性能與運維
- 智能內存溢出 —— BackpressureSpiller 在內存壓力下協調提前溢出,防止 OOM
- Pipeline 優化 —— 修正 max_threads 計算,根據 pipe 寬度合理調整並行執行
- S3 智能分層 —— 增強 AWS S3 存儲類轉換支持,降低延遲波動
- 表達式解析加速 —— 複雜表達式的 SQL 解析更快
- 統計信息增強 ——
SHOW STATISTICS現在包含虛擬列統計和 min/max 值,查詢規劃更準確
🔧 Meta 服務改進
- 運維診斷 ——
databend-meta -V顯示詳細構建信息;新增metactl dump-raft-log-wal調試工具 - I/O 計時 —— 追蹤日誌條目應用時間,快速定位性能瓶頸
- RPC 整合 —— RpcHandler 統一計時指標,可觀測性更好
- 原子化 watch 流 —— 修復 watch 流注冊的競態條件,集羣更穩定
🐛 穩定性與可靠性
- CSV 內存修復 —— 大型 CSV COPY 操作不再 OOM,得益於流式處理改進
- JWT 優化 —— 更智能的密鑰查找,避免不必要的 JWKS 刷新請求
- Parquet 流式處理 —— 修復基表列類型變更時的反序列化錯誤
- Grouping sets —— 修正複雜 GROUP BY 操作的 shuffle 模式處理
- 行訪問策略 —— 修復參數順序和大小寫敏感問題
- NULL 約束 —— 列修改時的正確驗證
🎯 默認配置
- Geo 和虛擬列 —— 現在默認為所有新部署啓用
- MERGE INTO —— 移除實驗性標記;完全生產可用
🤝 社區
- 歡迎新貢獻者 @camilesing 和 @RiversJin —— 感謝你們的參與!
核心功能:AI 訓練數據自動化的存儲過程
存儲過程是十月的核心功能。SQL 腳本引擎支持 dynamic schema introspection 後,實驗性標記也一併移除——現在開箱即用。你可以完全用 SQL 自動化複雜的數據處理流程,不再需要外部工具。
來看真實場景:自動駕駛模型訓練。路測視頻被提取成單幀,AI 自動標註每一幀(行人、車輛、天氣、光照)。你需要根據特定條件篩選視頻幀——比如"城市夜景有行人"或"雨天城市鏡頭"——來構建針對性的訓練數據集。
這個教程演示了 LET 變量、IF 條件、臨時表、子查詢、多表聚合、RETURN TABLE——所有生產自動化需要的核心功能。
Step-by-Step 教程
1. 創建數據庫和表
CREATE DATABASE IF NOT EXISTS av_training;
USE av_training;
-- 視頻幀標註表(AI 生成的標籤)
CREATE TABLE video_frames (
video_id STRING,
frame_id INT,
scene_type STRING, -- 'urban', 'highway'
has_pedestrian BOOLEAN,
has_vehicle BOOLEAN,
lighting STRING, -- 'day', 'night', 'dusk'
weather STRING, -- 'clear', 'rainy', 'foggy', 'sunny'
pedestrian_count INT,
confidence FLOAT, -- AI 標註置信度
capture_date DATE
);
2. 插入樣例數據
INSERT INTO video_frames VALUES
-- 城市夜景,有行人
('V001', 1, 'urban', true, true, 'night', 'clear', 2, 0.95, '2025-10-20'),
('V001', 2, 'urban', true, false, 'night', 'clear', 1, 0.92, '2025-10-20'),
-- 高速白天場景
('V002', 1, 'highway', false, true, 'day', 'sunny', 0, 0.98, '2025-10-21'),
-- 城市夜景雨天
('V003', 1, 'urban', true, true, 'night', 'rainy', 1, 0.89, '2025-10-22'),
('V003', 2, 'urban', true, false, 'night', 'rainy', 2, 0.91, '2025-10-22'),
-- 高速夜景(無行人)
('V004', 1, 'highway', false, true, 'night', 'clear', 0, 0.97, '2025-10-23'),
-- 城市白天場景
('V005', 1, 'urban', true, true, 'day', 'clear', 3, 0.88, '2025-10-24'),
('V005', 2, 'urban', true, false, 'day', 'foggy', 1, 0.93, '2025-10-24');
3. 創建視頻幀篩選存儲過程
這個存儲過程保持業務邏輯簡單:始終篩選高置信度(≥ 0.85)的行人場景,同時允許按場景類型和天氣縮小範圍:
CREATE PROCEDURE filter_training_frames(
scene_filter STRING, -- 'urban', 'highway', 'ALL'
weather_filter STRING, -- 'clear', 'rainy', 'ALL'
date_from DATE,
date_to DATE
)
RETURNS TABLE (
scene_type STRING,
lighting STRING,
weather STRING,
frame_count INT,
pedestrians INT,
avg_confidence DOUBLE,
total_frames INT
)
LANGUAGE SQL
AS $$
BEGIN
LET min_conf := 0.85;
LET total_frames := 0;
CREATE OR REPLACE TEMPORARY TABLE matched_frames AS
SELECT
video_id, frame_id, scene_type, lighting,
weather, pedestrian_count, confidence
FROM video_frames
WHERE capture_date BETWEEN :date_from AND :date_to
AND confidence >= min_conf
AND (:scene_filter = 'ALL' OR scene_type = :scene_filter)
AND (:weather_filter = 'ALL' OR weather = :weather_filter)
AND has_pedestrian = true;
LET total_frames := (SELECT COUNT(*) FROM matched_frames);
IF total_frames = 0 THEN
RETURN TABLE(
SELECT NULL::STRING AS scene_type,
NULL::STRING AS lighting,
NULL::STRING AS weather,
0::INT AS frame_count,
0::INT AS pedestrians,
0.0::DOUBLE AS avg_confidence,
0::INT AS total_frames
);
END IF;
RETURN TABLE(
SELECT
scene_type,
lighting,
weather,
COUNT(*) AS frame_count,
SUM(pedestrian_count) AS pedestrians,
AVG(confidence) AS avg_confidence,
:total_frames AS total_frames
FROM matched_frames
GROUP BY scene_type, lighting, weather
ORDER BY frame_count DESC
);
END;
$$;
4. 運行存儲過程:篩選城市行人場景(任意天氣)
CALL PROCEDURE filter_training_frames(
'urban', -- 城市場景
'ALL', -- 任意天氣
DATE '2025-10-20',
DATE '2025-10-24'
);
預期輸出:
scene_type | lighting | weather | frame_count | pedestrians | avg_confidence | total_frames
urban | night | rainy | 2 | 3 | 0.90 | 6
urban | night | clear | 2 | 3 | 0.94 | 6
urban | day | foggy | 1 | 1 | 0.93 | 6
urban | day | clear | 1 | 3 | 0.88 | 6
核心功能演示
核心能力
LET用於計數器/閾值,IF提前退出,臨時表- 查詢中的
:variable插值和聚合的RETURN TABLE
生產應用場景
這個模式適用於:
- AI/ML 數據準備 —— 篩選和分析訓練數據集
- 數據質量檢查 —— 驗證並報告數據問題
- ETL 流水線 —— 多步驟轉換與中間暫存
- 業務報表 —— 參數化報表與聚合
- 數據驗證 —— 帶提前退出的條件檢查
瞭解更多:存儲過程與 SQL 腳本文檔
以上完整示例可以在 https://databend.cn 註冊體驗
總結
存儲過程的正式可用標誌着 Databend 邁入新的階段:從查詢引擎進化為完整的數據平台。用户可以在統一的 Rust 引擎上,用 Snowflake 兼容的 SQL 語法,處理結構化分析、半結構化搜索、向量檢索、地理空間分析和數據自動化——所有功能開箱即用,完全開源。
我們即將推出 table branching 功能,讓數據表像代碼一樣支持分支、測試和合並,敬請期待!
關於 Databend
Databend 是一款開源、彈性、低成本,基於對象存儲也可以做實時分析的新式湖倉。期待您的關注,一起探索雲原生數倉解決方案,打造新一代開源 Data Cloud。
👨💻 Databend Cloud:databend.cn
📖 Databend 文檔:docs.databend.cn
💻 Wechat:Databend
✨ GitHub:github.com/databendlab…