Группировка и обновление большой таблицы базы данных - PullRequest
0 голосов
/ 30 января 2012

У меня огромная таблица, содержащая 161 миллион строк.Структура таблицы entryid(varchar), dater(date), region(char), detail(varchar), views(int), и первые четыре столбца вместе в качестве первичного ключа.Я хочу выполнить следующую обработку:

  1. detail включает URL-адреса, такие как www.google.com, www.google.ca, www.google.uk, www.facebook.com, facebook.com и т. Д. Iхотите сгруппировать эти строки из одного домена, например, достаточно использовать LIKE "%.google.%" для google и LIKE "%.facebook.%" OR LIKE "facebook.%" для facebook.Но если обновить строки, может быть дубликат ключа, как использовать ON DUPLICATE KEY UPDATE для суммирования views?И есть ли более быстрый способ, кроме LIKE?

  2. Я хочу удалить столбец region, сгруппировать строки, суммировать views и вставить в новую таблицу.Как сделать это одной командой?

  3. Я хочу сгруппировать строки (и обновить views) по месяцам.

1 Ответ

0 голосов
/ 30 января 2012

Попробуйте это для MYSQL, предполагая, что для каждой строки поле сведений выглядит как www.something.com.

SELECT
   MONTH(dater),
   SUBSTRING_INDEX(SUBSTRING_INDEX(detail, '.', 2), -1) as url,
   sum(views)
from table
group by 
   MONTH(dater),
   SUBSTRING_INDEX(SUBSTRING_INDEX(detail, '.', 2), -1)

Или вы можете использовать подзапрос, чтобы он выглядел немного чище:

SELECT mth, url, sum(views) from
(
SELECT
   MONTH(dater) as mth,
   SUBSTRING_INDEX(SUBSTRING_INDEX(detail, '.', 2), -1) as url,
   views
from table) subq
group by 
   mth, url
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...