试用duckdb 1.6dev python模块

📅 2026/7/3 3:29:14
试用duckdb 1.6dev python模块
切换到虚拟环境目前安装的是duckdb v1.5.3。rootkylin:/par# source tpy313/penv/bin/activate (penv) rootkylin:/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) rootkylin:/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) rootkylin:/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) rootkylin:/par# export https_proxyhttp://proxy.aaa:8080/ export http_proxyhttp://proxy.aaa:8080/ (penv) rootkylin:/par# pip download duckdb1.6.0.dev214 -d tpy313/313 Looking in indexes: https://mirrors.aliyun.com/pypi/simple Collecting duckdb1.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) rootkylin:/par# pip install duckdb1.6.0.dev214 -f tpy313/313 Looking in indexes: https://mirrors.aliyun.com/pypi/simple Looking in links: tpy313/313 Collecting duckdb1.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) rootkylin:/par# (penv) rootkylin:/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_proxyhttp://proxy.aaa:8080) duckdb.sql(install tpch) duckdb.sql(load tpch) duckdb.sql(call dbgen(sf0.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 │ └──────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ dfduckdb.sql(select query FROM tpch_queries()where query_nr1).df() df query 0 SELECT\n l_returnflag,\n l_linestatus,\n... sstr(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版本大致相同把操作名放在上框线上更紧凑。