MySQL: производительность с заявлениями о ситуации и как
Кто-нибудь знает, как подходить к такой ситуации?
Получил 10 миллионов записей с названиями компаний и адресами, большинство из которых являются грязными и подлежат очистке.
Начал строить функции, используя операторы Case с LIKE & Regex, чтобы найти шаблоны, проблема, с которой я столкнулся, была производительность MySQL и очень-очень низкая.
Функции делают следующее: Удаление лишних пробелов, не буквенно-цифровых символов и стандартизация имен с помощью LIKE (почти 100 шаблонов), и я знаю, что это будет очень медленно, но я не уверен, какие еще варианты я смогу попробовать
Я имею в виду вариант, как сохранить все эти ключевые слова в таблицу с соответствующими исправленными значениями и использовать эту таблицу в качестве поиска для замены ключевых слов с помощью функции, это работает?
punctuation (could use REPLACE; not sure it there are more efficient options)
abbreviations (this is the tough one -- street = st, etc.)
Company/Restaurant/other Names standardizing: Like
Universities to Univ, CENTER to CTR, AND to &,
case
when Businnes_name like '%SUBWAY%' then 'SUBWAY'
when Businnes_name like '%MCDONALDS%' then 'MCDONALD''S'
when Businnes_name like '%MCDONALD''S%' then 'MCDONALD''S'
when Businnes_name like '%STARBUCKS%' then 'STARBUCKS'
when Businnes_name like '%DUNKIN%DONUTS%' then 'DUNKIN'' DONUTS'
when Businnes_name like '%BURGER%KING%' then 'BURGER KING'
я получил всего 100 ключевых слов, как и выше заявления в функциях
-Спасибо
1 ответ
Очистку данных лучше всего выполнять на более полном языке программирования, а не на SQL. В прошлой жизни я обнаружил, что Perl был превосходным.
Сначала несколько s{}{}g
команды, чтобы убрать некоторые вещи.
Затем sub
с сотней строк, какreturn q{MCDONALD'S} if $str =~ m{McDonald's}i;
Затем - только тогда - сохранить данные в базе данных. (Вы можете выбрать столбец для оригинала (McDonald's) и столбец для канонической формы (MCDONALD'S).