V20260709_01__lobster_profile_stats_projection.sql 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. -- =====================================================
  2. -- Profile Hub: stats cache table + summary projection columns (schema only)
  3. -- Target: tenant DB (fs_tenant_*)
  4. -- Data backfill: run apply-lobster-profile-migration-all-tenants.js
  5. -- =====================================================
  6. CREATE TABLE IF NOT EXISTS lobster_profile_stats (
  7. company_id BIGINT NOT NULL PRIMARY KEY COMMENT '0=tenant total, >0=company scope',
  8. total_profiles BIGINT NOT NULL DEFAULT 0,
  9. enriched_count BIGINT NOT NULL DEFAULT 0,
  10. interaction_sum BIGINT NOT NULL DEFAULT 0,
  11. avg_conversations DECIMAL(10,2) NOT NULL DEFAULT 0,
  12. active_today BIGINT NOT NULL DEFAULT 0,
  13. refresh_time DATETIME DEFAULT CURRENT_TIMESTAMP
  14. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='lobster profile stats cache';
  15. SET @dbname = DATABASE();
  16. SET @tablename = 'lobster_user_profile';
  17. SET @columnname = 'latest_stage';
  18. SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME=@tablename AND COLUMN_NAME=@columnname)>0,'SELECT 1','ALTER TABLE lobster_user_profile ADD COLUMN latest_stage VARCHAR(64) DEFAULT NULL COMMENT ''latest stage'' AFTER variable_snapshot'));
  19. PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
  20. SET @columnname = 'latest_customer_attitude';
  21. SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME=@tablename AND COLUMN_NAME=@columnname)>0,'SELECT 1','ALTER TABLE lobster_user_profile ADD COLUMN latest_customer_attitude VARCHAR(32) DEFAULT NULL COMMENT ''latest attitude'' AFTER latest_stage'));
  22. PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
  23. SET @columnname = 'latest_summary_text';
  24. SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME=@tablename AND COLUMN_NAME=@columnname)>0,'SELECT 1','ALTER TABLE lobster_user_profile ADD COLUMN latest_summary_text VARCHAR(512) DEFAULT NULL COMMENT ''latest summary snippet'' AFTER latest_customer_attitude'));
  25. PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
  26. SET @columnname = 'profile_aggregate_preview';
  27. SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME=@tablename AND COLUMN_NAME=@columnname)>0,'SELECT 1','ALTER TABLE lobster_user_profile ADD COLUMN profile_aggregate_preview VARCHAR(420) DEFAULT NULL COMMENT ''list aggregate preview'' AFTER latest_summary_text'));
  28. PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
  29. SET @columnname = 'latest_summary_time';
  30. SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME=@tablename AND COLUMN_NAME=@columnname)>0,'SELECT 1','ALTER TABLE lobster_user_profile ADD COLUMN latest_summary_time DATETIME DEFAULT NULL COMMENT ''latest summary time'' AFTER profile_aggregate_preview'));
  31. PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
  32. SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME='lobster_user_profile' AND INDEX_NAME='idx_profile_latest_stage')>0,'SELECT 1','CREATE INDEX idx_profile_latest_stage ON lobster_user_profile (company_id, latest_stage)'));
  33. PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
  34. SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME='lobster_user_profile' AND INDEX_NAME='idx_profile_latest_attitude')>0,'SELECT 1','CREATE INDEX idx_profile_latest_attitude ON lobster_user_profile (company_id, latest_customer_attitude)'));
  35. PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
  36. SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME='lobster_user_profile' AND INDEX_NAME='idx_profile_latest_summary_time')>0,'SELECT 1','CREATE INDEX idx_profile_latest_summary_time ON lobster_user_profile (company_id, latest_summary_time)'));
  37. PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;