
如何把 marimo 接入 MotherDuck 并用 SQL 查询云数据仓库【免费下载链接】marimoA reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.项目地址: https://gitcode.com/GitHub_Trending/ma/marimo如果你的数据存放在基于 DuckDB 的云数据仓库 MotherDuck 中想在 marimo 笔记本里用 SQL 查询它、并把查询结果直接交给 Python 代码处理操作路径是安装 marimo 的 SQL 扩展依赖用ATTACH挂上md:数据库然后创建 SQL 单元格写查询。完成后查询结果会作为 Polars 或 Pandas DataFrame 供下游 Python 单元格引用SQL 的修改会自动触发依赖它的单元格重新计算。以下内容整理自 MotherDuck 集成文档 与 SQL 使用指南。安装 marimo 与 SQL 依赖把 MotherDuck 作为数据源需要先安装marimo[sql]扩展包含 duckdb 等依赖。按你的包管理器选择其一pip install marimo[sql]uv add marimo[sql]conda install -c conda-forge marimo duckdb polars其中一点要留意SQL 查询结果要回到 Python 使用环境里必须装有polars结果即为 Polars DataFrame或pandas结果为 Pandas DataFrame二者之一上面的命令都同时带上了。安装是否成功可以用文档给出的方式验证——运行下面命令后一个教程笔记本会在浏览器中打开marimo tutorial intro另外官方还提供了 SQL 主题的交互式教程适合在动手前快速熟悉 SQL 单元格的用法marimo tutorial sql认证 MotherDuck浏览器登录或设置 motherduck_token首次运行ATTACH单元格时marimo 会打开一个浏览器窗口让你登录 MotherDuck 并授权当前笔记本访问你的数据库。每次重新打开笔记本都会再次出现这个提示要跳过它可以设置motherduck_token环境变量集成文档给出的做法export motherduck_tokenyour_token marimo edityour_token是占位符替换为你在 MotherDuck 官网设置页创建并复制的 token。官方示例笔记本 connect_to_motherduck.py 会读取motherduck_token或MOTHERDUCK_TOKEN任一环境变量找不到 token 时笔记本内会显示一个提示框其中给出的启动方式是motherduck_tokenYOUR_TOKEN_HERE marimo edit notebook path这里YOUR_TOKEN_HERE同样是占位符替换成你自己的 tokennotebook path替换为你要打开的笔记本路径。如果不想在命令行里携带 tokenmarimo 默认会加载pyproject.toml旁边的.env文件见运行时配置文档把motherduck_token写进.env即可也便于避免把凭据提交进版本库。用 ATTACH 连接 MotherDuck 数据库进入 marimo 编辑器后连接动作本身就是一条ATTACH语句。两种方式任选在 SQL 单元格中运行ATTACH IF NOT EXISTS md:my_dbmy_db是占位符替换为你自己的 MotherDuck 数据库名。或者在 Python 单元格里直接用 duckdb 执行import duckdb # Connect to MotherDuck duckdb.sql(ATTACH IF NOT EXISTS md:my_db)连接成功与否有明确的判断方式连接后你的 MotherDuck 表会自动出现在编辑器的 Datasources Panel 中。示例笔记本里还提到打开左侧边栏的 Explore data sources 面板第 3 个图标可以看到所有可用表包括后续新创建的表用 SQL 单元格查询 MotherDuck 表创建 SQL 单元格有三种方式右键点击单元格旁的 add cell 按钮 图标选择 SQL cell通过单元格上下文菜单把空单元格转换为 SQL或点击笔记本底部出现的 SQL 按钮。SQL 单元格本质是 Python 代码的语法糖底层形式是output_df mo.sql(fSELECT * FROM my_table LIMIT {max_rows.value})两个要点变量名就是查询结果的引用名。要让其他 Python 或 SQL 单元格能引用这个结果变量名不能以下划线开头带下划线的名字是私有的外部引用不到。SQL 语句是 f-string可以用{}把 Python 值插进查询因此查询可以依赖 UI 元素或其他 Python 变量的取值并纳入 marimo 的响应式数据流图。在 SQL 单元格中对 MotherDuck 的表执行查询结果就会以 DataFrame 形式显示并可被下游单元格使用由于 marimo 的响应式执行模型延伸到 SQL 查询修改 SQL 会自动触发依赖单元格的下游计算对于昂贵计算也可以选择只把单元格标记为 stale。官方示例笔记本中有一个可直接运行的查询示例先ATTACH共享的公开示例库再查询 Hacker News 表里被分享次数最多的域名。挂载语句取自示例笔记本原文duckdb.sql( ATTACH md:_share/sample_data/23b0d623-1361-421d-ae77-62d701d471e6 AS sample_data )查询语句-- Most shared websites SELECT regexp_extract(url, http[s]?://([^/])/, 1) AS domain, count(*) AS count FROM sample_data.hn.hacker_news WHERE url IS NOT NULL AND regexp_extract(url, http[s]?://([^/])/, 1) ! GROUP BY domain ORDER BY count DESC LIMIT 20;换成自己的库时把ATTACH指向自己的md:数据库查询对象相应替换为对应的表即可。配置查询结果的返回类型SQL 查询的返回类型可在 marimo 编辑器右上角的应用设置中配置可选项来自 SQL 指南native使用 DuckDB 的原生 lazy relation官方推荐用于大数据集可避免把整个结果集载入内存也方便串联多个 SQL 单元格lazy-polars返回 lazy Polars DataFramepolars返回 eager Polars DataFramepandas返回 Pandas DataFrameauto默认值按已安装的包自动选择先尝试 polars再尝试 pandas。同时注意为防止内存问题UI 默认只显示结果的前 10 行这是展示层面的限制。在 Python 中复用查询结果可选示例笔记本展示了典型的SQL 取数 Python 加工路径mo.sql(...)的结果赋给命名变量后下游 Python 单元格用 altair 把结果画成图表altair 已写入笔记本头部的 PEP 723 依赖声明与 duckdb1.1.0、polars1.18.0、pyarrow18.1.0 并列。它同时演示了用 UI 元素参数化 SQL先从 MotherDuck 表里取出 distinct 类型填入下拉框再把选中值插进 SQL。示例中的下拉框构造摘自示例笔记本hn_types duckdb.sql( SELECT DISTINCT type as HN Type FROM sample_data.hn.hacker_news WHERE score IS NOT NULL AND descendants IS NOT NULL LIMIT 10; ).df() hn_type_select mo.ui.dropdown.from_series(hn_types[HN Type], valuestory)示例笔记本随后在 SQL 单元格的 f-string 中引用{hn_type_select.value}作为过滤条件。用户在下拉框里换一个类型SQL 单元格和下游图表就会自动重跑——这就是 SQL 单元格语法糖背后 f-string 插值带来的响应式效果。按需调整数据源自动发现marimo 会自动发现数据库连接并在 Data Sources panel 中展示数据库、schema、表和列方便你浏览结构并把表名、列名拉进 SQL 查询。但默认配置下可能只发现数据库、不深入发现表和列官方说明是为了避免大型数据库的性能问题。行为可以在pyproject.toml中调整[tool.marimo.datasources] auto_discover_schemas auto # Default: auto auto_discover_tables auto # Default: auto auto_discover_columns false # Default: false三个选项都取true、false或autoauto按数据库类型判断——内省代价低的数据库如 SQLite、Postgres、MySQL会被发现数据仓库如 Snowflake、BigQuery则不会。SQL 单元格自动补全依赖这项发现如果 schema 没被发现可以在 Data Sources panel 里手动展开你要的 schema 和表来注册补全语义或修改上述配置。同一组设置也可以在笔记本设置菜单齿轮图标的Packages Data里修改。完整示例与继续学习完整的端到端示例见 examples/sql/connect_to_motherduck.py包含 token 检测与提示、ATTACH共享示例库、多个 SQL 查询、altair 图表以及参数化过滤的响应式流程。集成文档建议用marimo edit notebook-url直接打开该笔记本仓库内的同一文件也可以用marimo edit打开本地路径运行需要自行装好笔记本头部声明的依赖。examples/sql/README.md 还给出一条可选路径装好 uv 后用uvx marimo edit --sandbox notebook-url打开示例--sandbox会在隔离的虚拟环境里自动安装笔记本依赖notebook-url替换为要打开的笔记本地址。几个执行时的边界均来自源文档查询结果要在 Python 中使用必须装有 polars 或 pandas 之一UI 默认只展示查询结果的前 10 行数据仓库类数据源在auto发现模式下可能不会被自动展开表和列补全依赖手动展开或上面的配置调整。【免费下载链接】marimoA reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.项目地址: https://gitcode.com/GitHub_Trending/ma/marimo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考