如何将数据仓库的清洗数据高效导入业务库_纯数据快速恢复

阿宇君_9026

阿宇君_9026

2026-05-22

290人浏览

原创

用 pg_dump + pg_restore 直接灌库最稳,导出需 -Fc --no-owner --no-privileges,恢复前 TRUNCATE 表,用 --disable-triggers 加速,事后 ANALYZE 并驱逐连接池。

用 pg_dump + pg_restore 直接灌库最稳,别碰 COPY 或应用层写入

清洗完的数据要进业务库,第一反应不是写脚本或走 orm,而是把数据当“快照”原样搬进去。postgresql 场景下,pg_dump 导出清洗后的 schema+data,再用 pg_restore 并行导入,比任何应用层批量插入都快且原子性强。它绕过了触发器、约束检查(可选)、连接池瓶颈和事务日志膨胀问题。

常见错误是导出时漏掉 --no-owner 和 --no-privileges,导致恢复时报 permission denied to set role;或者用 pg_dump --inserts 生成 SQL 脚本,结果单条 INSERT 执行慢到无法接受。

  • 导出清洗库:用 pg_dump -Fc -n public --no-owner --no-privileges -f dump.db clean_db(-Fc 是关键,启用自定义格式才能并行恢复)
  • 恢复前清空目标表但保留结构:在业务库执行 TRUNCATE TABLE orders, users RESTART IDENTITY CASCADE(注意外键顺序)
  • 恢复时跳过约束加速:pg_restore -d biz_db --disable-triggers --single-transaction dump.db,完事后手动 SET CONSTRAINTS ALL IMMEDIATE

MySQL 用 LOAD DATA INFILE 前必须关掉唯一键和 autocommit

MySQL 业务库导入清洗数据,LOAD DATA INFILE 是唯一直接对标 PostgreSQL pg_restore 的高效路径。但它默认每行启一个事务、每行校验唯一索引,一千万行能跑两小时。核心是提前关闭干扰项,等数据落地后再补校验。

典型翻车点:没开 local_infile,报错 ERROR 1148 (42000): The used command is not allowed with this MySQL version;或者用绝对路径却没给 MySQL 进程读取权限,卡在 “file not found”。

  • 服务端确认:检查 SHOW VARIABLES LIKE 'local_infile',为 OFF 就得在启动参数加 --local-infile=1
  • 客户端执行前:先 SET autocommit = 0,再 ALTER TABLE orders DISABLE KEYS(仅 MyISAM 有效),InnoDB 则用 SET FOREIGN_KEY_CHECKS = 0 和 SET UNIQUE_CHECKS = 0
  • 导入命令:用 LOAD DATA LOCAL INFILE '/tmp/clean_orders.csv' INTO TABLE orders FIELDS TERMINATED BY ',' LINES TERMINATED BY ' ',末尾加 IGNORE 1 ROWS 跳过 header

跨库同步不能依赖 SELECT ... INTO OUTFILE 再 scp —— 时区和 null 处理会崩

有人想从数仓(比如 Redshift 或 StarRocks)导出 CSV,再 scp 到业务库机器上用 LOAD DATA 导入。这条路看着直,实际在时区、null 字符串、字段截断、换行符嵌套上全是坑。比如数仓里 created_at 是 TIMESTAMP WITH TIME ZONE,导成字符串后丢失时区信息,业务库按本地时区解析就偏 8 小时。

更隐蔽的问题是字段含 或 ,INTO OUTFILE 默认不转义,CSV 解析直接错位;还有数仓里 NULL 输出成空字符串还是 N,业务库 LOAD 时认不出来。

  • 替代方案:用数仓的 UNLOAD(Redshift)或 EXPORT(StarRocks)命令,显式指定 FORMAT AS PARQUET 或 CSV ESCAPED BY '\'
  • 传输阶段别用 scp,改用 aws s3 cp 或 curl -T 传对象存储,避免中间挂载点权限/编码问题
  • 业务库侧统一用程序解析 Parquet(如 Python pyarrow + psycopg2.execute_batch),可控 null 映射和 timestamp 时区转换

恢复后必做三件事:统计信息更新、索引重建、连接池驱逐

数据灌进去了不代表业务能立刻查得快。PostgreSQL 不会自动 ANALYZE 新表;MySQL 的 INFORMATION_SCHEMA.STATISTICS 可能还缓着旧分布;而连接池里的长连接,可能还拿着老查询计划,缓存了错误的执行路径。

最容易被跳过的其实是连接池驱逐。比如 HikariCP 默认不检测连接有效性,旧连接带着过期的 prepared statement plan 去查新数据,执行计划还是走 seq scan,QPS 直接腰斩。

  • PostgreSQL:运行 ANALYZE VERBOSE(加 VERBOSE 看哪些表被扫了),大表可指定列 ANALYZE orders (user_id, status)
  • MySQL:对 InnoDB 表执行 ANALYZE TABLE orders,别信 innodb_stats_auto_update 的默认值,它只在 10% 数据变更后才触发
  • 所有业务服务:滚动重启,或调用连接池管理接口(如 HikariCP 的 evictConnection())强制清理旧连接

真正卡点不在导入速度,而在导入后那五分钟——统计不准、索引失效、连接发懵,这时候查一条慢 SQL,整个业务就以为数据没导成功。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

5036

5

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

2025.12.08

1249

12

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

243

5

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

466

22

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2023.06.29

2645

3

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2023.08.14

3881

10

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

2023.08.31

2911

3

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.05

947

5

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

2567

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习