【问题标题】:Importing CSV into Postgresql with duplicate values that are not duplicate rows使用非重复行的重复值将 CSV 导入 Postgresql
【发布时间】:2013-12-18 22:12:53
【问题描述】:

我正在使用 Rails 4 和 postgresql 数据库,我有一个关于将 CSV 数据集输入数据库的问题。

Date    Advertiser Name Impressions Clicks  CPM     CPA     CPC     CTR
10/21/13    Advertiser 1    77         0    4.05    0.00    0.00    0.00
10/21/13    Advertiser 2    10732      23   5.18    0.00    2.42    0.21
10/21/13    Advertiser 3    16941      14   4.64    11.23   5.62    0.08
10/22/13    Advertiser 1    59         0    3.67    0.00    0.00    0.00
10/22/13    Advertiser 2    10130      15   5.24    53.05   3.54    0.15
10/22/13    Advertiser 3    18400      22   4.59    10.55   3.84    0.12
10/23/13    Advertiser 1    77         0    4.06    0.00    0.00    0.00
10/23/13    Advertiser 2    9520      22    5.58    26.58   2.42    0.23

使用上面的数据,我需要为每个广告商创建一个展示页面。

最终我需要一个广告商列表,我可以点击其中的任何一个并转到他们的展示页面并显示与每个广告商相关的信息(展示次数、点击次数、每千次展示费用等)

我感到困惑的是,当存在重复广告商的行但其他列包含相关且不重复的信息时,如何导入 CSV 数据。如何设置我的数据库表,这样我就不会有重复的 Advertiser 并且仍然导入并显示正确的信息?

【问题讨论】:

  • 如果有重复的顾问,你想显示哪一行?最近的?还是?
  • 我应该提到数据需要显示为图表。与广告商相关的所有数据都需要随着时间的推移显示出来。

标签: ruby csv import ruby-on-rails-4 rails-postgresql


【解决方案1】:

我没有创建两个不同的模型,而是创建了 1 个广告客户模型并将完整的数据集输入到该模型中。

require 'csv'

desc "Import advertisers from csv file"
task :import => [:environment] do
  CSV.foreach('db/MediaMathPerformanceReport.csv', :headers => true) do |row|
    Advertiser.create!(row.to_hash)
  end
end

上面的rake任务导入数据后,我简单设置show route如下:

def show
  @advertiser = Advertiser.where(advertiser_name: advertiser_name)
end

【讨论】:

    【解决方案2】:

    您需要创建两个模型:广告商和网站。 (或者可能是日期)。

    广告客户“有很多”网站,而网站“有一个”广告客户。此关联将允许您正确导入数据。

    见:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

    【讨论】:

    • 那么在我创建了 Advertiser 和 Date 这两个模型之后,我将如何导入数据呢?这一切都只是在一个 import rake 任务中还是必须分开?我是否只在 here? 所示的一项任务中进行导入
    • 我可能会创建一个导入 rake。您将需要遍历每一行。我通常喜欢制作 find_or_create(id) 方法。因此,对您而言,此方法将返回现有的 Advertiser 或具有该 ID 的新 Advertiser。然后插入一个站点并设置广告商。我找不到更好的视频,但这里是多对多(这不是你所拥有的)railscasts.com/episodes/47-two-many-to-many
    • 您可以使用您提供的链接作为起点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2013-07-18
    • 1970-01-01
    • 2011-06-29
    • 2022-01-03
    • 1970-01-01
    • 2019-02-23
    相关资源
    最近更新 更多