如何在DuckDB中导出/导入指定表子集(含配套SQL文件)
DuckDB 导出指定表子集并生成schema/load脚本的方案
如果全量导出没问题,但只想导出部分表,同时要生成规整的schema.sql和load.sql,可以按以下步骤来:
1. 导出指定表的结构到schema.sql
用DuckDB自带的DUMP命令,加上--schema参数就能只导出表结构,还能指定表名:
-- 切换输出到schema.sql .output schema.sql -- 导出table_a和table_b的表结构 .dump --schema table_a table_b -- 切回标准输出 .output stdout
2. 导出指定表的数据
用COPY命令导出每个表的数据,推荐用Parquet格式(性能好、体积小),也可以用CSV:
-- Parquet格式导出 COPY table_a TO 'data/table_a.parquet'; COPY table_b TO 'data/table_b.parquet'; -- 或者CSV格式(带表头) COPY table_a TO 'data/table_a.csv' (FORMAT CSV, HEADER); COPY table_b TO 'data/table_b.csv' (FORMAT CSV, HEADER);
3. 自动生成load.sql导入脚本
不用手动写,直接用查询生成导入语句:
-- 切换输出到load.sql .output load.sql -- 生成Parquet格式的导入语句 SELECT 'COPY ' || table_name || ' FROM ''data/' || table_name || '.parquet'';' FROM information_schema.tables WHERE table_name IN ('table_a', 'table_b'); -- 如果是CSV格式,用下面的语句替换 -- SELECT 'COPY ' || table_name || ' FROM ''data/' || table_name || '.csv'' (FORMAT CSV, HEADER);' -- FROM information_schema.tables -- WHERE table_name IN ('table_a', 'table_b'); -- 切回标准输出 .output stdout
4. 导入流程
先建表结构:
duckdb target_db.db < schema.sql
再导入数据:
duckdb target_db.db < load.sql
这样操作后,就和全量导出的schema.sql/load.sql用法完全一致,满足部分表导出的需求。
内容的提问来源于stack exchange,提问作者misantroop
相关产品推荐
相关产品推荐

