track_report_schema_fix.sql 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. -- Fix track report dimensions:
  2. -- 1. track_links stores platform and typename separately.
  3. -- 2. track_daily_report uniqueness is based on the monitored link, not display dimensions.
  4. SET @sql = (
  5. SELECT IF(
  6. COUNT(*) = 0,
  7. 'ALTER TABLE `track_links` ADD COLUMN `typename` varchar(64) NOT NULL DEFAULT '''' AFTER `platform`',
  8. 'SELECT 1'
  9. )
  10. FROM information_schema.COLUMNS
  11. WHERE TABLE_SCHEMA = DATABASE()
  12. AND TABLE_NAME = 'track_links'
  13. AND COLUMN_NAME = 'typename'
  14. );
  15. PREPARE stmt FROM @sql;
  16. EXECUTE stmt;
  17. DEALLOCATE PREPARE stmt;
  18. SET @sql = (
  19. SELECT IF(
  20. COUNT(*) = 0,
  21. 'ALTER TABLE `track_daily_report` ADD COLUMN `typename` varchar(64) NOT NULL DEFAULT '''' AFTER `platform`',
  22. 'SELECT 1'
  23. )
  24. FROM information_schema.COLUMNS
  25. WHERE TABLE_SCHEMA = DATABASE()
  26. AND TABLE_NAME = 'track_daily_report'
  27. AND COLUMN_NAME = 'typename'
  28. );
  29. PREPARE stmt FROM @sql;
  30. EXECUTE stmt;
  31. DEALLOCATE PREPARE stmt;
  32. UPDATE `track_links`
  33. SET `typename` = CASE
  34. WHEN `typename` <> '' THEN `typename`
  35. WHEN `platform` IN ('淘宝', '京东', '拼多多', 'tb', 'jd', 'pdd', '1', '9', '13') THEN ''
  36. ELSE `platform`
  37. END;
  38. UPDATE `track_links` SET `platform` = '淘宝' WHERE `id` IN (1, 2);
  39. UPDATE `track_links` SET `platform` = '京东' WHERE `id` IN (19, 20);
  40. UPDATE `track_links` SET `platform` = '拼多多' WHERE `id` IN (21, 22);
  41. SET @sql = (
  42. SELECT IF(
  43. COUNT(*) > 0,
  44. 'ALTER TABLE `track_daily_report` DROP INDEX `uk_track_daily`',
  45. 'SELECT 1'
  46. )
  47. FROM information_schema.STATISTICS
  48. WHERE TABLE_SCHEMA = DATABASE()
  49. AND TABLE_NAME = 'track_daily_report'
  50. AND INDEX_NAME = 'uk_track_daily'
  51. );
  52. PREPARE stmt FROM @sql;
  53. EXECUTE stmt;
  54. DEALLOCATE PREPARE stmt;
  55. UPDATE `track_daily_report` d
  56. JOIN `track_links` l ON d.`track_link_id` = l.`id`
  57. SET d.`platform` = l.`platform`,
  58. d.`typename` = l.`typename`,
  59. d.`scene` = l.`scene`,
  60. d.`unique_id` = l.`unique_id`;
  61. DROP TEMPORARY TABLE IF EXISTS `tmp_track_daily_keep`;
  62. DROP TEMPORARY TABLE IF EXISTS `tmp_track_daily_merge`;
  63. CREATE TEMPORARY TABLE `tmp_track_daily_keep` AS
  64. SELECT MIN(`id`) AS `id`
  65. FROM `track_daily_report`
  66. GROUP BY `report_date`, `event_type`, `track_link_id`;
  67. CREATE TEMPORARY TABLE `tmp_track_daily_merge` AS
  68. SELECT
  69. `report_date`,
  70. `event_type`,
  71. `track_link_id`,
  72. MAX(`event_count`) AS `event_count`
  73. FROM `track_daily_report`
  74. GROUP BY `report_date`, `event_type`, `track_link_id`;
  75. UPDATE `track_daily_report` d
  76. JOIN `tmp_track_daily_merge` m
  77. ON d.`report_date` = m.`report_date`
  78. AND d.`event_type` = m.`event_type`
  79. AND d.`track_link_id` = m.`track_link_id`
  80. SET d.`event_count` = m.`event_count`
  81. WHERE d.`id` IN (SELECT `id` FROM `tmp_track_daily_keep`);
  82. DELETE d
  83. FROM `track_daily_report` d
  84. LEFT JOIN `tmp_track_daily_keep` k ON d.`id` = k.`id`
  85. WHERE k.`id` IS NULL;
  86. DROP TEMPORARY TABLE `tmp_track_daily_keep`;
  87. DROP TEMPORARY TABLE `tmp_track_daily_merge`;
  88. ALTER TABLE `track_daily_report`
  89. ADD UNIQUE KEY `uk_track_daily` (`report_date`, `event_type`, `track_link_id`);