1.0.515.verify.sql 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. -- WIP-SUPPLIER.verify.sql
  2. SELECT (SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE()
  3. AND TABLE_NAME IN ('mdp_stg_s0_supplier','dim_supplier')) = 2;
  4. SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) FROM information_schema.STATISTICS
  5. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_supplier'
  6. AND INDEX_NAME = 'uk_dim_supplier' AND NON_UNIQUE = 0), '')
  7. = 'tenant_id,supplier_code';
  8. -- LEGACY_SCOPE 绝不进唯一键
  9. SELECT (SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE()
  10. AND TABLE_NAME = 'dim_supplier' AND INDEX_NAME = 'uk_dim_supplier'
  11. AND COLUMN_NAME IN ('domain_code','company_id','factory_id')) = 0;
  12. -- 🔴 supplier_name 必须可空(SortName 有 21 行 NULL;设 NOT NULL 会让 21 行被滤掉导致对账 FAIL)
  13. SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
  14. AND TABLE_NAME = 'dim_supplier' AND COLUMN_NAME = 'supplier_name' AND IS_NULLABLE = 'YES') = 1;
  15. SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
  16. AND TABLE_NAME = 'dim_supplier' AND COLUMN_NAME = 'source_updated_at' AND IS_NULLABLE = 'YES') = 1;
  17. -- RecID 无消费方(srm_purchase.supplier_id 命中 0/4449),故不得物化 legacy_source_id
  18. SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
  19. AND TABLE_NAME = 'dim_supplier'
  20. AND COLUMN_NAME IN ('legacy_source_id','rec_id','supplier_id')) = 0;
  21. -- 全空的 PII 与近空列不得被物化
  22. SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
  23. AND TABLE_NAME = 'dim_supplier'
  24. AND COLUMN_NAME IN ('address','contact','position','contact_info','certification_level',
  25. 'pur_contact','remark','cr_terms','curr','tax_class',
  26. 'ap_start_day1','ap_end_day1','ap_start_day2','ap_end_day2')) = 0;
  27. SELECT (SELECT COUNT(*) FROM `mdp_entity`
  28. WHERE `entity_code` = 'S0_SUPPLIER'
  29. AND `biz_key_expr` COLLATE utf8mb4_bin = 'Supp'
  30. AND `source_table_name` COLLATE utf8mb4_bin = 'SuppMaster'
  31. AND `target_table_name` COLLATE utf8mb4_bin = 'mdp_stg_s0_supplier'
  32. AND `status` = 1 AND `sync_mode` = 'FULL' AND `incr_column` IS NULL
  33. AND `batch_size` = 20000) = 1;
  34. -- batch_size 必须够装下最大租户(AssertNoSourceDuplicateAsync 是 >= 严格判定)
  35. SELECT (SELECT `batch_size` FROM `mdp_entity` WHERE `entity_code` = 'S0_SUPPLIER')
  36. > (SELECT MAX(c) FROM (SELECT COUNT(*) c FROM `SuppMaster` GROUP BY `tenant_id`) x);
  37. -- 源侧身份前提:tenant + Supp 无重复、无空白、无非法租户
  38. SELECT (SELECT COUNT(*) FROM (SELECT 1 FROM `SuppMaster` GROUP BY `tenant_id`,`Supp` HAVING COUNT(*) > 1) x) = 0;
  39. SELECT (SELECT COUNT(*) FROM `SuppMaster` WHERE `Supp` IS NULL OR TRIM(`Supp`) = '') = 0;
  40. SELECT (SELECT COUNT(*) FROM `SuppMaster` WHERE `tenant_id` IS NULL OR `tenant_id` <= 0) = 0;
  41. -- 未因本批放大其它 entity 的 batch_size
  42. SELECT (SELECT COUNT(*) FROM `mdp_entity` WHERE `entity_code` LIKE 'S0\_%'
  43. AND `batch_size` NOT IN (5000, 20000, 50000, 100000, 200000)) = 0;