active_metadata.py 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. """Persistence models for active metadata discovery and field lineage."""
  2. from sqlalchemy.dialects.postgresql import JSONB, UUID
  3. from app import db
  4. from app.core.common.identifiers import new_governance_uid
  5. class ActiveMetadataPlan(db.Model):
  6. __tablename__ = "active_metadata_plans"
  7. __table_args__ = {"schema": "public"}
  8. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  9. source_uid = db.Column(UUID(as_uuid=False), nullable=False)
  10. name = db.Column(db.String(300), nullable=False)
  11. source_kind = db.Column(db.String(20), nullable=False)
  12. schedule_type = db.Column(db.String(20), nullable=False)
  13. schedule_expression = db.Column(db.String(120))
  14. discovery_mode = db.Column(db.String(20), nullable=False)
  15. scope = db.Column(JSONB, nullable=False)
  16. cursor_state = db.Column(JSONB, nullable=False)
  17. owner_uid = db.Column(UUID(as_uuid=False), nullable=False)
  18. enabled = db.Column(db.Boolean, nullable=False)
  19. current_version = db.Column(db.Integer, nullable=False)
  20. created_by = db.Column(UUID(as_uuid=False), nullable=False)
  21. class ActiveMetadataRun(db.Model):
  22. __tablename__ = "active_metadata_runs"
  23. __table_args__ = (
  24. db.UniqueConstraint("plan_uid", "batch_key"),
  25. {"schema": "public"},
  26. )
  27. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  28. plan_uid = db.Column(UUID(as_uuid=False), nullable=False)
  29. batch_key = db.Column(db.String(160), nullable=False)
  30. status = db.Column(db.String(20), nullable=False)
  31. attempt_count = db.Column(db.Integer, nullable=False)
  32. cursor_before = db.Column(JSONB, nullable=False)
  33. cursor_after = db.Column(JSONB, nullable=False)
  34. snapshot_hash = db.Column(db.String(64))
  35. statistics = db.Column(JSONB, nullable=False)
  36. failure_code = db.Column(db.String(80))
  37. failure_reason = db.Column(db.String(500))
  38. actor_uid = db.Column(UUID(as_uuid=False), nullable=False)
  39. class ActiveMetadataAsset(db.Model):
  40. __tablename__ = "active_metadata_assets"
  41. __table_args__ = (
  42. db.UniqueConstraint("source_uid", "asset_key"),
  43. {"schema": "public"},
  44. )
  45. uid = db.Column(UUID(as_uuid=False), primary_key=True)
  46. source_uid = db.Column(UUID(as_uuid=False), nullable=False)
  47. asset_key = db.Column(db.String(500), nullable=False)
  48. namespace = db.Column(db.String(200), nullable=False)
  49. name = db.Column(db.String(200), nullable=False)
  50. asset_type = db.Column(db.String(40), nullable=False)
  51. lifecycle_status = db.Column(db.String(30), nullable=False)
  52. current_version = db.Column(db.Integer, nullable=False)
  53. content_hash = db.Column(db.String(64), nullable=False)
  54. snapshot = db.Column(JSONB, nullable=False)
  55. health = db.Column(JSONB, nullable=False)
  56. last_run_uid = db.Column(UUID(as_uuid=False), nullable=False)
  57. class ActiveMetadataAssetVersion(db.Model):
  58. __tablename__ = "active_metadata_asset_versions"
  59. __table_args__ = (
  60. db.UniqueConstraint("asset_uid", "version"),
  61. {"schema": "public"},
  62. )
  63. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  64. asset_uid = db.Column(UUID(as_uuid=False), nullable=False)
  65. version = db.Column(db.Integer, nullable=False)
  66. run_uid = db.Column(UUID(as_uuid=False), nullable=False)
  67. content_hash = db.Column(db.String(64), nullable=False)
  68. snapshot = db.Column(JSONB, nullable=False)
  69. actor_uid = db.Column(UUID(as_uuid=False), nullable=False)
  70. class ActiveMetadataChange(db.Model):
  71. __tablename__ = "active_metadata_changes"
  72. __table_args__ = {"schema": "public"}
  73. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  74. run_uid = db.Column(UUID(as_uuid=False), nullable=False)
  75. asset_uid = db.Column(UUID(as_uuid=False), nullable=False)
  76. asset_key = db.Column(db.String(500), nullable=False)
  77. field_name = db.Column(db.String(200))
  78. change_type = db.Column(db.String(40), nullable=False)
  79. before_state = db.Column(JSONB)
  80. after_state = db.Column(JSONB)
  81. status = db.Column(db.String(20), nullable=False)
  82. class ActiveMetadataLineage(db.Model):
  83. __tablename__ = "active_metadata_lineage"
  84. __table_args__ = {"schema": "public"}
  85. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  86. run_uid = db.Column(UUID(as_uuid=False), nullable=False)
  87. parse_status = db.Column(db.String(20), nullable=False)
  88. source_asset = db.Column(db.String(500))
  89. source_field = db.Column(db.String(200))
  90. target_asset = db.Column(db.String(500))
  91. target_field = db.Column(db.String(200))
  92. relation_type = db.Column(db.String(40), nullable=False)
  93. evidence = db.Column(JSONB, nullable=False)
  94. failure_reason = db.Column(db.String(500))
  95. class ActiveMetadataHealthSignal(db.Model):
  96. __tablename__ = "active_metadata_health_signals"
  97. __table_args__ = {"schema": "public"}
  98. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  99. asset_uid = db.Column(UUID(as_uuid=False), nullable=False)
  100. run_uid = db.Column(UUID(as_uuid=False), nullable=False)
  101. signal_type = db.Column(db.String(30), nullable=False)
  102. value = db.Column(JSONB)
  103. status = db.Column(db.String(20), nullable=False)
  104. evidence = db.Column(JSONB, nullable=False)
  105. class ActiveMetadataCorrection(db.Model):
  106. __tablename__ = "active_metadata_corrections"
  107. __table_args__ = {"schema": "public"}
  108. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  109. asset_uid = db.Column(UUID(as_uuid=False), nullable=False)
  110. field_name = db.Column(db.String(200))
  111. proposed_value = db.Column(JSONB, nullable=False)
  112. reason = db.Column(db.String(500), nullable=False)
  113. assignee_uid = db.Column(UUID(as_uuid=False), nullable=False)
  114. status = db.Column(db.String(20), nullable=False)
  115. resolution = db.Column(JSONB, nullable=False)
  116. current_version = db.Column(db.Integer, nullable=False)
  117. submitted_by = db.Column(UUID(as_uuid=False), nullable=False)
  118. resolved_by = db.Column(UUID(as_uuid=False))
  119. class ActiveMetadataCorrectionAudit(db.Model):
  120. __tablename__ = "active_metadata_correction_audits"
  121. __table_args__ = (
  122. db.UniqueConstraint("correction_uid", "version"),
  123. {"schema": "public"},
  124. )
  125. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  126. correction_uid = db.Column(UUID(as_uuid=False), nullable=False)
  127. version = db.Column(db.Integer, nullable=False)
  128. action = db.Column(db.String(40), nullable=False)
  129. before_state = db.Column(JSONB)
  130. after_state = db.Column(JSONB, nullable=False)
  131. actor_uid = db.Column(UUID(as_uuid=False), nullable=False)