Миграция устаревших данных v1 в базу данных v2 в приложении Rails 6 - PullRequest
1 голос
/ 07 ноября 2019

У меня есть устаревшая база данных, которую мне нужно преобразовать в новую базу данных для приложения Rails 6. Устаревшая база данных содержит 21 столбец и более 900 000 строк. Меня интересует только извлечение определенных данных столбцов без дубликатов, основанных на комбинации двух столбцов. У меня есть столбцы с именами depth, name, product_number и country. Я хочу получить name и product_number, но только уникальные строки, основанные на комбинации product_number и country, где depth равно 1. Например, если я использую номер_продукта 11122000 и страну AUS,У меня 115 рядов, но я хочу только один из этих рядов. Я хотел бы сохранить результат в переменной, потому что я должен назвать столбцы в новой базе данных иначе, чем в устаревшей базе данных. Я написал грабли для других устаревших преобразований баз данных, но не могу понять, как получить эти столбцы. Я пробовал это:

Database.where(depth: 1).group(:product_number, country)

Это дает мне хэш массивов с product_number и страной. Как я могу получить имя и номер продукта из этого хэша? Или есть лучший способ вытащить нужные строки?

1 Ответ

0 голосов
/ 07 ноября 2019

Проблема в том, что в теории реляционных баз данных, если вы group by уникальны product_number и country, может быть несколько результатов, и они могут иметь разные значения для name. Поэтому SQL не знает, как выбрать, какую строку использовать для значения name.

Возможно, вам придется обработать это в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...