【发布时间】:2012-06-25 05:08:08
【问题描述】:
我需要定期将大量数据从 CSV 文件上传到 MySQL 数据库。我通过简单地从 bash 脚本执行 LOAD DATA INFILE 来做到这一点。然而,现在数据将分布在多个表中,并且要保留关系。这种情况下的一般策略是什么?
让我们假设一个最初的简单任务:关系一对多,两个表。
我认为是这样的:
- 获取表 1 的最大标识符
- 手动将标识符应用到 CSV 文件
- 根据两个目标表拆分文件
- 插入两个表
这是最佳解决方案吗? (例如,在实际情况中,我将通过这种方式更新许多多对多关系。)
我可以在整个过程中从 bash 级别锁定表 1 吗?还是我必须使用 perl 或 Python 之类的中介工具来将所有内容保存在一个会话中?
【问题讨论】:
-
优秀的第一篇文章!您的答案取决于您是 Immon(ite) 还是 Kimball(ite),Kimball 的数据仓库工具包 (book) (amazon.com/The-Data-Warehouse-Toolkit-Dimensional/dp/0471200247/…) 主张让系统生成人工密钥。或者尝试一种对我来说效果很好的替代方法。保留一组单独的“输入”表,将当前文件导入空输入表,然后运行存储过程以合并到主表中。祝你好运。
-
使用 awk 对数据进行预处理/拆分,在拆分文件上只需
load data。如果您想了解更多详细信息,您必须自己提供一些。