当前位置: 首页 > news >正文

试用duckdb 1.6dev python模块

切换到虚拟环境,目前安装的是duckdb v1.5.3。

root@kylin:/par# source tpy313/penv/bin/activate (penv) root@kylin:/par# python3 Python 3.13.1 (main, Dec 4 2024, 20:55:07) [GCC 12.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> (penv) root@kylin:/par# pip list Package Version ----------------- ----------- duckdb 1.5.3 duckdb-cli 1.5.2 llvmlite 0.47.0 numba 0.65.1 numpy 2.4.6 pandas 2.3.2 pip 24.3.1 polars 1.41.0 polars-runtime-32 1.41.0 pyarrow 24.0.0 python-dateutil 2.9.0.post0 pytz 2026.2 six 1.17.0 tzdata 2026.2 (penv) root@kylin:/par# python3 Python 3.13.1 (main, Dec 4 2024, 20:55:07) [GCC 12.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import duckdb >>> duckdb.sql("explain select 1 a") ┌───────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ explain_key │ explain_value │ │ varchar │ varchar │ ├───────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ physical_plan │ ┌───────────────────────────┐\n│ PROJECTION │\n│ ──────────────────── │\n│ a │\n│ │\n│ ~1 │ │ │ row │\n└─────────────┬─────────────┘\n┌─────────────┴─────────────┐\n│ DUMMY_SCAN │\n└───────────────────────────┘\n │ └───────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ >>> duckdb.sql("select 1 a").explain() '┌───────────────────────────┐\n│ PROJECTION │\n│ ──────────────────── │\n│ a │\n│ │\n│ ~1 row │\n└─────────────┬─────────────┘\n┌─────────────┴─────────────┐\n│ DUMMY_SCAN │\n└───────────────────────────┘\n\n' >>> print(duckdb.sql("select 1 a").explain()) ┌───────────────────────────┐ │ PROJECTION │ │ ──────────────────── │ │ a │ │ │ │ ~1 row │ └─────────────┬─────────────┘ ┌─────────────┴─────────────┐ │ DUMMY_SCAN │ └───────────────────────────┘

执行计划显示换行符转义符,这是一个已知问题,用print()就能解决。

>>> (penv) root@kylin:/par# export https_proxy=http://proxy.aaa:8080/ export http_proxy=http://proxy.aaa:8080/ (penv) root@kylin:/par# pip download duckdb==1.6.0.dev214 -d tpy313/313 Looking in indexes: https://mirrors.aliyun.com/pypi/simple Collecting duckdb==1.6.0.dev214 Downloading https://mirrors.aliyun.com/pypi/packages/0d/bf/76e42be95d36634c21599fcb0295ef21d49c81e02ab5d89ffd2f2d712fe6/duckdb-1.6.0.dev214-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (21.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.9/21.9 MB 4.1 MB/s eta 0:00:00 Saved ./tpy313/313/duckdb-1.6.0.dev214-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl Successfully downloaded duckdb [notice] A new release of pip is available: 24.3.1 -> 26.1.2 [notice] To update, run: pip install --upgrade pip (penv) root@kylin:/par# pip install duckdb==1.6.0.dev214 -f tpy313/313 Looking in indexes: https://mirrors.aliyun.com/pypi/simple Looking in links: tpy313/313 Collecting duckdb==1.6.0.dev214 Using cached https://mirrors.aliyun.com/pypi/packages/0d/bf/76e42be95d36634c21599fcb0295ef21d49c81e02ab5d89ffd2f2d712fe6/duckdb-1.6.0.dev214-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (21.9 MB) Installing collected packages: duckdb Attempting uninstall: duckdb Found existing installation: duckdb 1.5.3 Uninstalling duckdb-1.5.3: Successfully uninstalled duckdb-1.5.3 Successfully installed duckdb-1.6.0.dev214 [notice] A new release of pip is available: 24.3.1 -> 26.1.2 [notice] To update, run: pip install --upgrade pip

安装1.6dev需要指定版本号,如要使用代理还要设定http_proxy和https_proxy环境变量。使用保存在本地目录下的whl文件,需要指定–no-index参数,上面忘记写了,恰好缓存中有,也装上了。

(penv) root@kylin:/par# (penv) root@kylin:/par# python3 Python 3.13.1 (main, Dec 4 2024, 20:55:07) [GCC 12.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import duckdb >>> print(duckdb.sql("select 1 a").explain()) ╭─ Projection ───╮ │ Projections: a │ │ ~1 row │ ╰────────┬───────╯ ╭─ Dummy Scan ───╮ ╰────────────────╯ >>> duckdb.sql("select version()") ┌─────────────────┐ │ "version"() │ │ varchar │ ├─────────────────┤ │ v1.6.0-dev10027 │ └─────────────────┘ >>> >>> duckdb.sql("set http_proxy='http://proxy.aaa:8080'") >>> duckdb.sql("install tpch") >>> duckdb.sql("load tpch") >>> duckdb.sql("call dbgen(sf=0.1)") >>> >>> duckdb.sql("FROM tpch_queries()limit 1") ┌──────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ query_nr │ query │ │ int32 │ varchar │ ├──────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ 1 │ SELECT\n l_returnflag,\n l_linestatus,\n sum(l_quantity) AS sum_qty,\n sum(l_extendedprice) AS sum_base_price,\n sum(l_extendedprice * (1 - l_discount)) AS sum_ │ │ │ disc_price,\n sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,\n avg(l_quantity) AS avg_qty,\n avg(l_extendedprice) AS avg_price,\n avg(l_disco │ │ │ unt) AS avg_disc,\n count(*) AS count_order\nFROM\n lineitem\nWHERE\n l_shipdate <= CAST('1998-09-02' AS date)\nGROUP BY\n l_returnflag,\n l_linestatus\nORDER B │ │ │ Y\n l_returnflag,\n l_linestatus;\n │ └──────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ >>> df=duckdb.sql("select query FROM tpch_queries()where query_nr=1").df() >>> df query 0 SELECT\n l_returnflag,\n l_linestatus,\n... >>> s=str(df.iloc[0,0]) >>> s "SELECT\n l_returnflag,\n l_linestatus,\n sum(l_quantity) AS sum_qty,\n sum(l_extendedprice) AS sum_base_price,\n sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price,\n sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,\n avg(l_quantity) AS avg_qty,\n avg(l_extendedprice) AS avg_price,\n avg(l_discount) AS avg_disc,\n count(*) AS count_order\nFROM\n lineitem\nWHERE\n l_shipdate <= CAST('1998-09-02' AS date)\nGROUP BY\n l_returnflag,\n l_linestatus\nORDER BY\n l_returnflag,\n l_linestatus;\n" >>> duckdb.sql(s) ┌──────────────┬──────────────┬───────────────┬────────────────┬─────────────────┬────────────────────┬────────────────────┬────────────────────┬─────────────────────┬─────────────┐ │ l_returnflag │ l_linestatus │ sum_qty │ sum_base_price │ sum_disc_price │ sum_charge │ avg_qty │ avg_price │ avg_disc │ count_order │ │ varchar │ varchar │ decimal(38,2) │ decimal(38,2) │ decimal(38,4) │ decimal(38,6) │ double │ double │ double │ int64 │ ├──────────────┼──────────────┼───────────────┼────────────────┼─────────────────┼────────────────────┼────────────────────┼────────────────────┼─────────────────────┼─────────────┤ │ A │ F │ 3774200.00 │ 5320753880.69 │ 5054096266.6828 │ 5256751331.449234 │ 25.537587116854997 │ 36002.12382901414 │ 0.05014459706340077 │ 147790 │ │ N │ F │ 95257.00 │ 133737795.84 │ 127132372.6512 │ 132286291.229445 │ 25.30066401062417 │ 35521.32691633466 │ 0.04939442231075697 │ 3765 │ │ N │ O │ 7459297.00 │ 10512270008.90 │ 9986238338.3847 │ 10385578376.585467 │ 25.545537671232875 │ 36000.9246880137 │ 0.05009595890410959 │ 292000 │ │ R │ F │ 3785523.00 │ 5337950526.47 │ 5071818532.9420 │ 5274405503.049367 │ 25.5259438574251 │ 35994.029214030925 │ 0.04998927856184382 │ 148301 │ └──────────────┴──────────────┴───────────────┴────────────────┴─────────────────┴────────────────────┴────────────────────┴────────────────────┴─────────────────────┴─────────────┘ >>> print(duckdb.sql(s).explain()) ╭─ Projection ──────────────────────────────────╮ │ Projections: │ │ __internal_decompress_string(#0), │ │ __internal_decompress_string(#1), #2, #3, #4, │ │ #5, #6, #7, #8, #9 │ │ ~5 rows │ ╰───────────────────────┬───────────────────────╯ ╭─ Order By ────────────┴───────────────────────╮ │ Order By: │ │ memory.main.lineitem.l_returnflag ASC, │ │ memory.main.lineitem.l_linestatus ASC │ │ ~5 rows │ ╰───────────────────────┬───────────────────────╯ ╭─ Projection ──────────┴───────────────────────╮ │ Projections: │ │ __internal_compress_string_utinyint(#0), │ │ __internal_compress_string_utinyint(#1), #2, │ │ #3, #4, #5, #6, #7, #8, #9 │ │ ~5 rows │ ╰───────────────────────┬───────────────────────╯ ╭─ Projection ──────────┴───────────────────────╮ │ Projections: │ │ #0, #1, #2, #3, #4, #5, │ │ "/"(CAST(#6 AS DOUBLE), CAST(#10 AS DOUBLE)), │ │ "/"(CAST(#7 AS DOUBLE), CAST(#11 AS DOUBLE)), │ │ "/"(CAST(#8 AS DOUBLE), CAST(#12 AS DOUBLE)), │ │ #9 │ │ ~5 rows │ ╰───────────────────────┬───────────────────────╯ ╭─ Projection ──────────┴───────────────────────╮ │ Projections: │ │ __internal_decompress_string(#0), │ │ __internal_decompress_string(#1), #2, #3, #4, │ │ #5, #2, #3, #6, #7, #7, #7, #7 │ │ ~5 rows │ ╰───────────────────────┬───────────────────────╯ ╭─ Perfect Hash Group By ───────────────────────╮ │ Groups: #0, #1 │ │ Aggregates: sum_no_overflow(#2), │ │ sum_no_overflow(#3), │ │ sum_no_overflow(#4), │ │ sum_no_overflow(#5), │ │ sum_no_overflow(#6), count_star() │ │ ~5 rows │ ╰───────────────────────┬───────────────────────╯ ╭─ Projection ──────────┴───────────────────────╮ │ Projections: l_returnflag, l_linestatus, │ │ l_quantity, l_extendedprice, #4, │ │ #4 * (1.00 + l_tax), l_discount │ │ ~120,114 rows │ ╰───────────────────────┬───────────────────────╯ ╭─ Projection ──────────┴───────────────────────╮ │ Projections: │ │ __internal_compress_string_utinyint(#0), │ │ __internal_compress_string_utinyint(#1), #2, │ │ #3, #4, #5, #6 │ │ ~120,114 rows │ ╰───────────────────────┬───────────────────────╯ ╭─ Projection ──────────┴───────────────────────╮ │ Projections: │ │ l_returnflag, l_linestatus, l_quantity, │ │ l_extendedprice, │ │ l_extendedprice * (1.00 - l_discount), l_tax, │ │ l_discount │ │ ~120,114 rows │ ╰───────────────────────┬───────────────────────╯ ╭─ Seq Scan ────────────┴───────────────────────╮ │ Table: memory.main.lineitem │ │ Type: Sequential Scan │ │ Projections: l_returnflag, l_linestatus, │ │ l_quantity, l_extendedprice, │ │ l_discount, l_tax │ │ Filters: │ │ l_shipdate <= '1998-09-02'::DATE │ │ ~120,114 rows │ ╰───────────────────────────────────────────────╯

duckdb的版本号和python模块版本号不同。如果要下载插件,还需在python交互环境中设置http_proxy代理参数。
大约从v1.6.0-dev10000版本开始,执行计划输出使用圆角方框,显示内容和1.5.3版本大致相同,把操作名放在上框线上,更紧凑。

http://www.gsyq.cn/news/1624918.html

相关文章:

  • 2026佳木斯黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • 2026年AI网站开发公司排名,高端定制服务商榜单
  • C++工程化开发规范、内存泄漏排查、常见报错与高阶实战总结
  • 20种AI Agent架构实战解析:从基础到高级方案
  • 【2026运营版】B2B2C多商户外贸电商系统|跨境商城|云仓库代发+分销+佣金+POS下单
  • 实习生转正复盘:技术成长要有证据,不要只靠感觉努力
  • Uniapp上架苹果4.3a被拒?我摸出了躺过的万能公式!
  • 2026年,苦荞快餐粉引领健康新潮流
  • 如何优雅地下载文档:kill-doc浏览器脚本使用指南
  • 5分钟搞定微信聊天记录备份:Mac用户必备的数据安全工具
  • 大模型推理加速Medusa详解:单模型多头并行解码,解决投机解码双模型部署痛点20.1
  • Qt实现简易计数器(点击累加/清零功能)【完整源码】
  • 终极隐藏模拟位置:3个简单步骤彻底解决Android位置检测问题
  • 智能合约分类详解:逻辑合约、部署合约与业务合约
  • AI智能体详解(四)-- LangSmith的使用
  • C++STL高阶精讲:unordered_map、unordered_set与哈希原理
  • Spring Boot 电力管理系统数据监测与管理
  • SpringBoot电子实验记录本系统
  • shein C++ 后端面经:几乎整场都在追 Redis、一致性和高并发系统设计
  • AI 面试做校招初筛,到底行不行?
  • 2026最新5款AI编程助手平替实测
  • 达梦、人大金仓做了二十年,为什么干不过成立没几年的 OceanBase?
  • JMeter JSON Extractor实战:自动化Token管理提升接口测试效率
  • 苹果 App Store 卡审核一天怎么办?别急着撤回,先看看是不是这几种情况
  • vivo 提前批后端面经:上来先问能不能转 Java,后面基本都在看后端基础
  • 企业数据库管理工具选型评估框架:功能、安全、成本三维对比
  • 上海嘉定 GEO 优化公司优选指南,本地化落地首选一网推罗琪
  • 【BUG已解决】LangChain ImportError: cannot import name ‘xxx‘ from ‘langchain‘ 解决方案
  • 别再把推送当大喇叭了:iOS灵动岛与静默通知,正在重构App的留存法则
  • ChatGPT代码生成失效真相:不是模型不行,是你没用对这8个结构化指令模板(含调试日志对比图)