【问题标题】:Most efficient way of bulk loading unnormalized dataset into PostgreSQL?将非规范化数据集批量加载到 PostgreSQL 中的最有效方法?
【发布时间】:2011-04-30 16:35:30
【问题描述】:

我已经加载了一个巨大的 CSV 数据集——Eclipse 的 Filtered Usage Data 使用 PostgreSQL 的 COPY,它占用了大量空间,因为它没有标准化:三个 TEXT 列被更有效地重构为单独的表,以供引用来自具有外键列的主表。

我的问题是:在加载所有数据之后重构数据库,或者创建具有所有约束的预期表,然后加载数据是否更快?前者涉及重复扫描一个巨大的表(接近 10^9 行),而后者将涉及对每个 CSV 行执行多个查询(例如,以前见过这种动作类型吗?如果没有,将其添加到动作表中,获取其ID,在主表中使用正确的操作 ID 创建一行等)。

现在每个重构步骤大约需要一天左右的时间,初始加载也需要大约相同的时间。

【问题讨论】:

    标签: postgresql csv dataset normalization bulk-load


    【解决方案1】:

    根据我的经验,您希望将您关心的所有数据放入数据库中的临时表中,然后从那里开始,然后尽可能多地通过存储过程执行基于集合的逻辑。当您加载到临时表中时,表上没有任何索引。数据加载到表后创建索引。

    查看此链接以获取一些提示http://www.postgresql.org/docs/9.0/interactive/populate.html

    【讨论】:

    • 谢谢,星际飞船。我一直在阅读 pgsql 文档,但还没有看到那个页面。
    • 在添加任何索引和外键约束之前,我使用 COPY 加载了数据,所以那里没有问题。我所指的缓慢步骤涉及对表格进行规范化。我认为这是无法避免的……嗯。
    • @michel-slm 对我有帮助:创建临时表和 INSERT INTO table_name (...) SELECT ... 并将值拆分为行:stackoverflow.com/questions/29419993/…
    猜你喜欢
    • 2013-01-06
    • 2011-03-27
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多