当前位置: 首页 > 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.jsqmd.com/news/1112944/

相关文章:

  • PyTorch 训练稳定性:梯度爆炸前通常有征兆
  • [Android] Utool 高级版-AI视频图片剪辑修改-超清放大
  • 协程本质是函数加状态机——零基础深入浅出 C++20 协程
  • Super IO:Blender剪贴板导入导出插件终极指南,3倍提升3D工作流效率
  • 微信公众号授权登录全流程实战:从OpenID到JWT Token的完整实现
  • 2026佳木斯黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • C++工程化开发规范、内存泄漏排查、常见报错与高阶实战总结
  • AutoScreenshot深度解析:跨平台自动截图工具的高效应用指南
  • Spring Boot与AI集成开发实战指南
  • 2026年AI网站开发公司排名,高端定制服务商榜单
  • P1395 会议【洛谷算法习题】
  • 【深度学习】OpenCV 人脸识别实战:LBPH 算法实现简单人脸识别
  • C++入门基石:语言定位、编译流程与基础语法深度解析
  • 机器学习问题定义:从模糊需求到可执行任务的实战方法论
  • 机器学习三要素与核心算法实战指南
  • 20种AI Agent架构实战解析:从基础到高级方案
  • 室内渲染进阶指南:从平淡无奇到照片级效果的6个核心法则
  • 【2026运营版】B2B2C多商户外贸电商系统|跨境商城|云仓库代发+分销+佣金+POS下单
  • 实习生转正复盘:技术成长要有证据,不要只靠感觉努力
  • 字节跳动 data 系统后台开发面经:一面项目和智能指针打底,二面直接补 Linux、HTTP 和逻辑题
  • C++智能指针全面精讲:auto_ptr、unique_ptr、shared_ptr、weak_ptr原理与实战
  • Winform加密算法
  • 2026年7月亲测:深圳高空吊装企业性价比分享
  • Uniapp上架苹果4.3a被拒?我摸出了躺过的万能公式!
  • 惠州儿童牙科医院选择指南
  • 鸿蒙原生 ArkTS 自定义布局深度解析:onMeasure / onLayout 实战
  • Koji Build 命令参数深度解析:从入门到精通
  • 2026年,苦荞快餐粉引领健康新潮流
  • 如何优雅地下载文档:kill-doc浏览器脚本使用指南
  • Matt Pocock Skills 安装与上手指南:让 AI 编程从“能跑“到“靠谱“