⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
已知 Python 问题

故障排除

运行 EXPLAIN 会渲染换行符

在 Python 中,EXPLAIN 语句的输出包含硬换行符(\n

In [1]: import duckdb
   ...: duckdb.sql("EXPLAIN SELECT 42 AS x")
Out[1]:
┌───────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│  explain_key  │                                                   explain_value                                                   │
│    varchar    │                                                      varchar                                                      │
├───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ physical_plan │ ┌───────────────────────────┐\n│         PROJECTION        │\n│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │\n│             x   …  │
└───────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

要解决此问题,请 print explain() 函数的输出

In [2]: print(duckdb.sql("SELECT 42 AS x").explain())
Out[2]:
┌───────────────────────────┐
│         PROJECTION        │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
│             x             │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│         DUMMY_SCAN        │
└───────────────────────────┘

另请参阅 Jupyter 指南,了解有关将 Jupyter 与 JupySQL 结合使用的提示。

Windows 上的崩溃和错误

在 Windows 上导入 DuckDB 时,Python 运行时在导入或首次使用时可能会崩溃或返回错误

import duckdb

duckdb.sql("...")
ImportError: DLL load failed while importing duckdb: The specified module could not be found.
Windows fatal exception: access violation

Current thread 0x0000311c (most recent call first):
  File "<stdin>", line 1 in <module>
Process finished with exit code -1073741819 (0xC0000005)

此问题很可能是由于使用了过时的 Microsoft Visual C++ (MSVC) 可再发行组件包引起的。解决方案是安装最新的 MSVC 可再发行组件包。或者,您可以指示 pip 从源代码编译该包,如下所示:

python3 -m pip install duckdb --no-binary duckdb

已知问题

遗憾的是,有些问题超出了我们的控制范围,或者非常难以捉摸/难以追踪。下面列出了您可能需要注意的这些问题,具体取决于您的工作流程。

Numpy 导入多线程

当使用多线程并直接以 Numpy 数组或通过 Pandas DataFrame 间接获取结果时,可能需要确保已导入 numpy.core.multiarray。如果此模块未从主线程导入,并且在执行期间另一个线程尝试导入它,则会导致死锁或崩溃。

为避免此问题,建议在启动线程之前 import numpy.core.multiarray

DESCRIBESUMMARIZE 在 Jupyter 中返回空表

DESCRIBESUMMARIZE 语句返回一个空表

%sql
CREATE OR REPLACE TABLE tbl AS (SELECT 42 AS x);
DESCRIBE tbl;

要解决此问题,请将它们封装到子查询中

%sql
CREATE OR REPLACE TABLE tbl AS (SELECT 42 AS x);
FROM (DESCRIBE tbl);

IPython 中 JupySQL 的 Protobuf 错误

在 IPython 中加载 JupySQL 扩展失败

In [1]: %load_ext sql
ImportError: cannot import name 'builder' from 'google.protobuf.internal' (unknown location)

解决方案是修复 protobuf 包。这可能需要卸载冲突的包,例如:

%pip uninstall tensorflow
%pip install protobuf