将CSV导入Postgresql,其重复值不是重复行

时间:2013-12-03 01:38:27

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

我正在使用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

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

最终,我需要有一个广告客户列表,我可以点击其中的任何一个,然后转到他们的展示页面并显示与每个广告客户相关的信息(展示次数,点击次数,cpm等)

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

2 个答案:

答案 0 :(得分:1)

您需要创建两个模型:广告商和网站。 (或者约会)。

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

请参阅:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

答案 1 :(得分: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