Mysql 在Rails 6应用程序中将旧版v1数据迁移到v2数据库

Mysql 在Rails 6应用程序中将旧版v1数据迁移到v2数据库,mysql,ruby-on-rails,rake-task,Mysql,Ruby On Rails,Rake Task,我有一个遗留数据库,需要将其转换为Rails 6应用程序的新数据库。传统数据库有21列和900000多行。我只感兴趣的是基于两列的组合提取某些没有重复的列数据。我的专栏名为depth,name,product\u number和country。我想拉取名称和产品编号,但只能拉取基于产品编号和国家(其中深度为1)组合的唯一行。例如,如果我使用product_编号11122000和country AUS,我有115行,但我只想要其中一行。我希望将结果保存到变量中,因为我必须将新数据库中的列命名为不同

我有一个遗留数据库,需要将其转换为Rails 6应用程序的新数据库。传统数据库有21列和900000多行。我只感兴趣的是基于两列的组合提取某些没有重复的列数据。我的专栏名为
depth
name
product\u number
country
。我想拉取
名称
产品编号
,但只能拉取基于
产品编号
国家(其中
深度
为1)组合的唯一行。例如,如果我使用product_编号11122000和country AUS,我有115行,但我只想要其中一行。我希望将结果保存到变量中,因为我必须将新数据库中的列命名为不同于旧数据库中的列。我已经为其他遗留数据库转换编写了rake任务,但是我不知道如何提取这些列。我试过这个:

数据库.其中(深度:1).组(:产品号,国家)


这给了我一个数组散列,其中包含产品编号和国家。如何从该散列中提取名称和产品编号?或者有更好的方法来提取所需的行吗?

问题是,在关系数据库理论中,如果按
唯一
产品编号
国家/地区
分组,可能会有多个结果,并且它们的
名称
值可能不同。因此,SQL不知道如何选择用于
名称的行

您可能需要在ruby中处理这个问题

Database.where(depth: 1).group(:product_number, :country).map |db|
  Database.where(depth: 1, product_number: db.product_number, country: db.country).first
end

问题在于,在关系数据库理论中,如果您按
唯一的
产品编号
国家/地区
分组,可能会有多个结果,并且它们的
名称
值可能不同。因此,SQL不知道如何选择用于
名称的行

您可能需要在ruby中处理这个问题

Database.where(depth: 1).group(:product_number, :country).map |db|
  Database.where(depth: 1, product_number: db.product_number, country: db.country).first
end

这听起来更像是一项任务,通过使用mysqldump而不是让rails参与,它将更容易解决。特别是考虑到所涉及的数据量,这听起来更像是一项任务,通过使用mysqldump而不是让rails参与,更容易解决。特别是考虑到涉及的数据量。