PostgreSQL码农集散地

DuckDB发明MTL,这个岗位可能消失!

把ETL的E换成M,会发生什么?ETL工程师岌岌可危
从ETL到MTL, DuckDB FlockMTL插件把大模型玩得很溜

虹吸效应很可怕, 不管是在物理世界还是虚拟世界.

省会城市虹吸周边城市人才.

大公司虹吸小公司人才.

热门的赛道、开源项目吸引更多优质人才的参与, 助力其更快的发展.

你可以闭门造车, 你也可以多看看热门赛道里的热门项目, 向优秀学习.

前段时间发了一篇文章, 观察到DuckDB在支持rust/go的扩展接口, 意味着未来rust/go工程师就可以写DuckDB扩展插件, 相当于为DuckDB提供更多周边功能开了一个管道, 输送代码的是c/c++/go/rust的开发者.

有段时间没关注DuckDB的插件社区了, 今天简单看了一下, 天翻地覆的变化啊, 多了好多有趣的插件. 等rust/go支持后, 估计发展会更快. 这就是虹吸效应的体现.

  • https://duckdb.org/community_extensions/list_of_extensions

来看几个有趣的插件

这些插件大概率是用户贡献的. 例如读取网络抓包软件pcap文件、定时任务、读取clickhouse数据源、分析财经数据等.

我仅截取了一些比较有趣的插件, 按功能做了一些分类如下.

1、读取其他数据源

插件
描述
bigquery
Integrates DuckDB with Google BigQuery, allowing direct querying and management of BigQuery datasets
chsql_native
ClickHouse Native Client & File Reader for chsql
gsheets
Read and write Google Sheets using SQL
msolap
Extension that allows DuckDB to connect to Microsoft SQL Server Analysis Services (SSAS) and other OLAP data sources using the MSOLAP provider
nanodbc
Connect to any ODBC-compatible database and query data directly from DuckDB
scrooge
Provides functionality for financial data-analysis, including data scanners for the Ethereum Blockchain and Yahoo Finance

2、兼容其他数据库

插件
描述
redis
Redis compatible Client for DuckDB

3、整合大模型

插件
描述
flockmtl
LLM & RAG extension to combine analytics and semantic analysis
open_prompt
Interact with LLMs with a simple DuckDB Extension
quackformers
Bert-based embedding extension.

4、多模态支持

插件
描述
geography
Global spatial data processing on the sphere
h3
Hierarchical hexagonal indexing for geospatial data
duckpgq
Extension that adds support for SQL/PGQ and graph algorithms
datasketches
By utilizing the Apache DataSketches library this extension can efficiently compute approximate distinct item counts and estimations of quantiles, while allowing the sketches to be serialized.
pcap_reader
Read PCAP files from DuckDB
wireduck
Read and dissect PCAP files from DuckDB
pbix
Extension that allows parsing the data model embedded in PowerBI (pbix) files

5、其他功能

插件
描述
cronjob
DuckDB HTTP Cronjob Extension

flockmtl : ETL -> MTL

之前DuckDB可以使用http插件调用模型. 用法见: DuckDB接入DeepSeek

现在更简单了.

flockmtl 这个插件有点意思, 我们都知道ETL 的E(Extract)、T(Transform)、L(Load)

MTL 显然是把E换成了M, 也就是让模型来主导数据抽取.

T和L呢, 都交给DuckDB. 结合起来就是MTL.

也许未来TL都让模型干了.

下面简单体验一下flockmtl插件.

FlockMTL 是什么?

FlockMTL 是 DuckDB 的一个扩展,旨在将语义分析功能直接引入到 SQL 查询中。它通过一组 map 和 reduce 函数深度集成了语言模型和检索增强生成功能。

谁可以从使用 FlockMTL 中受益?

FlockMTL 专为需要结合传统 SQL 操作来利用语义分析的开发者、数据科学家和企业而设计。它对于文档排名、内容生成和语义搜索等用例尤其有用。

FlockMTL 的主要功能是什么?

  • 模型管理:配置系统定义和用户定义的模型。
  • 提示管理:创建和管理可重复使用的文本提示。
  • LLM 密钥管理:为支持的提供商(例如微软、openai)安全地存储和管理 API 密钥。
  • 与 DuckDB 集成:利用 DuckDB 强大的 SQL 引擎以及语义功能。
  • 支持多家提供商:访问 OpenAI、Azure 和 Ollama 模型以执行各种任务。
  • 使用 Ollama 进行本地推理:使用 LLaMA 模型在本地执行推理。
  • 标量函数:使用llm_complete、llm_complete_json和等函数llm_filter执行高级任务。
  • 聚合函数llm_reduce:使用和等函数执行汇总、排名和重新排序llm_rerank。

如何安装 FlockMTL?

您可以通过运行以下命令轻松安装 FlockMTL:

INSTALL flockmtl FROM community;  
LOAD flockmtl;  

如何在 FlockMTL 中管理模型?

您可以使用 SQL 命令管理模型,例如:

CREATE MODEL  
UPDATE MODEL  
DELETE MODEL有关详细示例, 请参阅模型管理部分。( https://dais-polymtl.github.io/flockmtl/docs/resource-management/models )  

我可以为我的任务创建自定义提示词吗?

是的,您可以使用CREATE PROMPT和UPDATE PROMPT命令创建和管理自定义提示。有关更多详细信息,请参阅“提示词管理”部分。( https://dais-polymtl.github.io/flockmtl/docs/resource-management/prompts )

例子

以本地模型为例, 启动ollama

$ OLLAMA_HOST=0.0.0.0:11434 OLLAMA_KEEP_ALIVE=-1 nohup ollama serve > /dev/null 2>&1 &  

$ ollama list  
NAME                                   ID              SIZE      MODIFIED             
qwen3:4b                               2bfd38a7daaf    2.6 GB    About a minute ago      
qwen3:14b                              7d7da67570e2    9.3 GB    7 weeks ago             
linux6200/bge-reranker-v2-m3:latest    abf5c6d8bc56    1.2 GB    2 months ago            
qwen2.5-coder:3b                       e7149271c296    1.9 GB    2 months ago            
ds-qwen2.5-1.5b-digoal:latest          2c6aaa8a497c    3.6 GB    3 months ago            
qwen2.5:1.5b                           65ec06548149    986 MB    4 months ago            
deepseek-r1:7b                         0a8c26691023    4.7 GB    4 months ago            
qwen_1.5b_test1:latest                 682ad25636bd    1.1 GB    4 months ago            
deepseek-r1:1.5b                       a42b25d8c10a    1.1 GB    4 months ago            
deepseek-r1:14b                        ea35dfe18182    9.0 GB    5 months ago            
mxbai-embed-large:latest               468836162de7    669 MB    7 months ago   

启动duckdb

$ duckdb   
DuckDB v1.3.1 (Ossivalis) 2063dda3e6  
Enter ".help"for usage hints.  
Connected to a transient in-memory database.  
Use ".open FILENAME" to reopen on a persistent database.  

安装flockmtl插件

D INSTALL flockmtl FROM community;  
100% ▕████████████████████████████████████████████████████████████▏   
D LOAD flockmtl;  

创建llm密钥

CREATE SECRET (  
    TYPE OLLAMA,  
    API_URL '127.0.0.1:11434'
);  

创建模型

CREATE MODEL(  
'QuackingModel',  
'qwen2.5:1.5b',  
'ollama',  
   {"context_window": 128000, "max_output_tokens": 2048}  
);    

使用模型

D SELECT llm_complete(  
      {'model_name': 'QuackingModel'},  
      {'prompt': 'Talk like a duck 🦆 and write a poem about a database 📚'}  
  );  
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐  
│                         llm_complete(main.struct_pack(model_name := 'QuackingModel'), main.struct_pack(prompt := 'Talk like a duck 🦆 and write a poem about a database 📚'))                          │  
│                                                                                                varchar                                                                                                 │  
├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤  
│ Quack quack! In the marshy meadow,\nWhere the water's deep and the reeds sway.\nI am a database, my home is wide,\nA place where data doth reside.\n\nRows of tables, columns they align,\nEach one …  │  
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘  

更多用法请参考flockMTL文档.

  • 模型管理
  • 提示词管理
  • 混合搜索
  • 标量查询
  • 聚合查询等

你有啥想法? 欢迎留言讨论

为什么DuckDB玩法这么前卫?
插件化是不是吸引了更多非数据库内核开发者的参与?