首页 > 数据库 > 国内数据库 > Databend 11 月月报:多模态查询智能
Hi,Databend 的朋友们!🚀
11 月,我们发布了 17 个 nightly 版本,致力于打造更丰富的数据体验。本月上线了 TimestampTz 支持、HTTP Arrow payloads、支持 RBAC 的脱敏策略,并进行了三轮 Runtime Filter 调优,同时针对多模态负载改进了全文索引和 VECTOR 支持。现在的查询接口支持从 JSON、Arrow IPC 到几何数据等多种输出格式,助力分析团队更高效地构建多样化应用。
从 v1.2.834-nightly 到 v1.2.850-nightly,我们累计合并了 27 个新功能、 28 个 bug 修复、 18 项重构、 6 项 CI/构建改进 以及 27 项体验优化。
TimestampTz、
CURRENT_DATE、
CURRENT_TIME 和
DATE ± INTERVAL 语义,确保跨区域的时间处理流程具有良好的可移植性。POSITION 列现在可以在 SQL 兼容的流程中查询,简化了从传统引擎的迁移。system.streams 暴露
has_data 字段,配合更丰富的验证输出,方便调试数据摄入。bitmap_to_array 配合新的 Runtime Filter 机制,解锁更快的集合分析和跨模态 Join。USING 子句、RBAC 强制执行、冲突检测和删除保护,确保隐私规则的一致性。policy_reference 表函数记录了脱敏/行访问策略的应用位置,便于快速合规审计。enable_parquet_dictionary;查询时区传播已端到端实现(HTTP 头、会话状态、Clamp 辅助函数)。现在的 Databend 数据库足以支持
所有检索模式——关系型、JSON、向量、Bitmap、地理空间——无需启动单独的服务。这正是
多模态数据分析指南 的核心价值所在,该指南围绕 CityDrive Intelligence 数据集展开。基于同样的
video_id/
frame_id 列,你可以同时使用 SQL 过滤、Elasticsearch 风格的
QUERY()、HNSW 向量搜索和 GEOMETRY Join,让你仅需在一个数据仓库中即可完成所有工作。本期焦点将带你回顾这一场景,一步步展示统一检索在实战中的威力。
CityDrive 将每一批次数据导出为 Parquet。 Lakehouse ETL 指南 设置了一个可复用的 Stage 和 任务驱动的 COPY 流程,持续导入每种模态的数据:
-- 连接到 CityDrive 的 S3 存储桶 CREATE OR REPLACE CONNECTION citydrive_s3 STORAGE_TYPE='s3' ACCESS_KEY_ID='<AWS_ACCESS_KEY_ID>' SECRET_ACCESS_KEY='<AWS_SECRET_ACCESS_KEY>'; -- 指向原始多模态导出的共享 Stage CREATE OR REPLACE STAGE citydrive_stage URL='s3://citydrive-lakehouse/raw/' CONNECTION=(CONNECTION_NAME='citydrive_s3') FILE_FORMAT=(TYPE='PARQUET'); -- 自动化 ETL:每 10 分钟加载一次视频帧元数据 CREATE OR REPLACE TASK task_load_citydrive_videos WAREHOUSE='default' SCHEDULE=10 MINUTE AS COPY INTO citydrive_videos ( video_id, vehicle_id, capture_date, route_name, weather, camera_source, duration_sec ) FROM ( SELECT video_id::STRING, vehicle_id::STRING, capture_date::DATE, route_name::STRING, weather::STRING, camera_source::STRING, duration_sec::INT FROM @citydrive_stage/videos/ ) FILE_FORMAT=(TYPE='PARQUET'); -- 自动化 ETL:同步加载帧数据 CREATE OR REPLACE TASK task_load_frame_events WAREHOUSE='default' SCHEDULE=10 MINUTE AS COPY INTO frame_events ( frame_id, video_id, frame_index, collected_at, event_tag, risk_score, speed_kmh ) FROM ( SELECT frame_id::STRING, video_id::STRING, frame_index::INT, collected_at::TIMESTAMP, event_tag::STRING, risk_score::DOUBLE, speed_kmh::DOUBLE FROM @citydrive_stage/frame-events/ ) FILE_FORMAT=(TYPE='PARQUET'); -- 激活任务,数据自动导入 ALTER TASK task_load_citydrive_videos RESUME; ALTER TASK task_load_frame_events RESUME;
基础表保存了规范的车辆视频帧指标:
CREATE OR REPLACE TABLE citydrive_videos (...); CREATE OR REPLACE TABLE frame_events (...); WITH recent_videos AS ( SELECT * FROM citydrive_videos WHERE capture_date >= '2025-01-01' AND capture_date < '2025-01-04' ) SELECT v.video_id, v.route_name, COUNT(f.frame_id) AS flagged_frames FROM recent_videos v LEFT JOIN frame_events f USING(video_id) GROUP BY v.video_id, v.route_name ORDER BY flagged_frames DESC;
LATERAL FLATTEN 连接
frame_metadata_catalog 进行嵌套检测,而
ROLLUP/
CUBE 按路线和天气汇总风险。本月发布的 Runtime Filter 增强功能确保即使在数据规模扩大的情况下,这些 Join 操作依然响应迅速。
倒排索引允许进行 Elasticsearch 风格的过滤,而无需复制数据:
CREATE OR REPLACE TABLE frame_metadata_catalog (
doc_id STRING,
meta_json VARIANT,
captured_at TIMESTAMP,
INVERTED INDEX idx_meta_json(meta_json)
);
SELECT doc_id, captured_at
FROM frame_metadata_catalog
WHERE QUERY('meta_json.scene.weather_code:rain AND meta_json.camera.sensor_view:roof')
ORDER BY captured_at;
policy_reference 函数配合脱敏策略控制,意味着你可以对任何镜像这些 JSON 负载的列应用感知 RBAC 的隐私保护,可选的 Arrow-over-HTTP 响应则将过滤后的负载直接流式传输到 BI 工具中。
语义搜索与 SQL 并行运行:
CREATE OR REPLACE TABLE frame_embeddings ( frame_id STRING, video_id STRING, sensor_view STRING, embedding VECTOR(512), encoder_build STRING, created_at TIMESTAMP, VECTOR INDEX idx_frame_embeddings(embedding) DISTANCE='cosine' ); WITH query_embedding AS ( SELECT embedding FROM frame_embeddings WHERE frame_id='FRAME-0101' ) SELECT e.frame_id, e.video_id, COSINE_DISTANCE(e.embedding, q.embedding) AS distance FROM frame_embeddings e CROSS JOIN query_embedding q ORDER BY distance LIMIT 3;
Geo 表使用相同的 ID,所以“这发生在哪里?”只是另一个 Join:
CREATE OR REPLACE TABLE frame_geo_points (
video_id STRING,
frame_id STRING,
position_wgs84 GEOMETRY,
solution_grade INT,
source_system STRING,
created_at TIMESTAMP
);
SELECT f.frame_id, ST_DISTANCE(g.position_wgs84, s.signal_position) AS meters_to_signal
FROM frame_geo_points g
JOIN signal_contact_points s USING(frame_id)
JOIN frame_events f USING(frame_id)
WHERE ST_WITHIN(g.position_wgs84,
TO_GEOMETRY('SRID=4326;POLYGON((114.05 22.54, 114.13 22.54, 114.13 22.57, 114.05 22.57, 114.05 22.54))'));
最后,用 一条 SQL 语句将所有内容串联起来:过滤 JSON 标签、查找向量邻居并检查信号距离:
WITH json_hits AS (
SELECT doc_id
FROM frame_metadata_catalog
WHERE QUERY('meta_json.media_meta.tagging.labels:pedestrian')
),
vector_hits AS (
SELECT frame_id
FROM frame_embeddings
WHERE COSINE_DISTANCE(
embedding,
(SELECT embedding FROM frame_embeddings WHERE frame_id='FRAME-0102')
) < 0.3
)
SELECT f.frame_id, v.route_name, s.distance_m
FROM frame_events f
JOIN citydrive_videos v USING(video_id)
JOIN json_hits j ON j.doc_id = f.frame_id
JOIN vector_hits vh ON vh.frame_id = f.frame_id
JOIN signal_contact_points s USING(frame_id);
这一条查询跨越了结构化事实、JSON 元数据、向量相似度和地理空间距离——全部在 Databend 中执行。这就是统一多模态检索的魅力。
📘 按照顺序(SQL Analytics → JSON & Search → Vector Search → Geo Analytics)跟随指南,在你的集群上重现这个完整的端到端流程。一个数仓,搞定所有分析模式。
Databend 现已演进为一个 统一的分析引擎:从经典的 SQL 查询、JSON 检索、向量相似度匹配,到地理空间分析,再到自动化的数据导入与 ETL,所有这些能力都已集成在同一个数据库中。你无需再在各种数据库或服务之间周转,就能直接从类似 CityDrive 的数据集中挖掘出深层价值。
Databend 是一款 100% Rust 构建、面向对象存储设计的新一代开源云原生数据仓库,统一支持 BI 分析、AI 向量、全文检索及地理空间分析等多模态能力。期待您的关注,一起打造新一代开源 AI + Data Cloud。
👨💻 Databend Cloud: databend.cn
📖 Databend 文档: docs.databend.cn
💻 Wechat:Databend
✨ GitHub: github.com/databendlab…
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70042558/viewspace-3104416/ ,如需转载,请注明出处,否则将追究法律责任。