Navicat 17 不支持将 MariaDB 数据直接导出为 Parquet 格式,因其导出模块仅支持 CSV、Excel、SQL、JSON、XML 等文本/结构化格式,完全不支持列式二进制格式,也不集成 Arrow、PyArrow 或 DuckDB 等 Parquet 生产组件。

Navicat 17 无法将 MariaDB 数据直接导出为 Parquet 格式——它根本不支持生成 Parquet 文件,也没有任何内置或可配置的导出目标格式选项指向 .parquet。
这不是权限、驱动或设置问题,而是功能层面的缺失:Navicat 的导出模块只支持 CSV、Excel(.xlsx)、SQL 脚本、JSON、XML 等通用文本/结构化格式,不涉及列式二进制格式,也不调用 Arrow、PyArrow 或 DuckDB 等 Parquet 生产组件。
导出到 Parquet 必须绕过 Navicat 的导出功能
你真正能走通的路径,是把 Navicat 当作查询执行和连接管理工具,用它取数,再用外部工具转 Parquet:
-
SELECT查询必须显式写出所有字段(避免*),尤其注意虚拟列要手动包含,否则下游无字段可转 - 导出格式选
CSV(推荐 UTF-8-BOM)或JSON(扁平结构优先),确保时间戳、decimal、NULL 行为不被 Excel 中转污染 - 用脚本完成后续转换:
- 小数据(pd.read_csv("data.csv").to_parquet("out.parquet")
- 大数据或含嵌套字段:
duckdb执行CREATE TABLE t AS SELECT * FROM 'data.csv'; EXPORT DATABASE 'out' (FORMAT PARQUET);
- 注意 MariaDB 连接字符集需设为
utf8mb4,否则 CSV 中中文可能乱码,导致 PyArrow 解析失败
为什么不能用 Navicat 的「导出向导 → 表右键」直接操作?
- 右键表 →「导出向导」默认只导出物理列,
VIRTUAL列不会自动包含,即使表定义里有 - 若该虚拟列依赖
JSON_EXTRACT或CONCAT_WS等函数,而你的 MariaDB 版本低于 10.6,某些表达式在服务端就返回 NULL,CSV 里已是空值,转 Parquet 后也救不回来 - 导出向导不支持自定义分页或流式拉取,超大表容易触发
max_allowed_packet或内存溢出,结果截断但无提示
导出后 Parquet 文件字段类型异常怎么办
常见现象包括:所有字符串变成 large_string、timestamp 被识别为 int64、decimal 字段丢失精度。这不是 Navicat 的责任,而是下游工具推断逻辑所致:
- PyArrow 默认按首 100 行推断 schema,若前几行某列为 NULL,整列可能被定为
null类型 - DuckDB 的
EXPORT PARQUET对 MySQL 类型映射较保守,DECIMAL(12,2)可能落地为DOUBLE - 解决方法是在转换脚本中显式指定 schema,例如 PyArrow 用
pa.schema([...]),DuckDB 用CAST(col AS DECIMAL(12,2))包裹字段
真正关键的控制点,永远在「Navicat 里先跑出完整、干净、带标题的查询结果」这一步。跳过验证,后面所有 Parquet 转换都只是在固化错误。











