智慧水务管理系统 - 精河县供水工程综合管理平台

V1__data_engine.sql 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. -- =============================================
  2. -- 智慧水务管理系统 - 数据引擎 DDL
  3. -- 版本: V1
  4. -- 描述: 数据汇聚引擎相关表
  5. -- =============================================
  6. -- ==================== 数据源管理 ====================
  7. -- 数据源配置表
  8. CREATE TABLE IF NOT EXISTS de_data_source (
  9. id BIGSERIAL PRIMARY KEY,
  10. source_name VARCHAR(100) NOT NULL,
  11. source_code VARCHAR(50) UNIQUE NOT NULL,
  12. source_type VARCHAR(30) NOT NULL, -- mqtt/kafka/rest/websocket/database/file
  13. category VARCHAR(30), -- iot/manual/api/database
  14. connection_config JSONB, -- 连接配置(JSON)
  15. sync_mode VARCHAR(20) DEFAULT 'realtime', -- realtime/batch/scheduled
  16. sync_cron VARCHAR(50), -- 定时同步Cron表达式
  17. status SMALLINT DEFAULT 1, -- 0:禁用 1:启用
  18. description VARCHAR(500),
  19. last_sync_at TIMESTAMP,
  20. deleted SMALLINT DEFAULT 0,
  21. created_at TIMESTAMP DEFAULT NOW(),
  22. updated_at TIMESTAMP DEFAULT NOW()
  23. );
  24. COMMENT ON TABLE de_data_source IS '数据源配置表';
  25. COMMENT ON COLUMN de_data_source.source_type IS '数据源类型: mqtt/kafka/rest/websocket/database/file';
  26. COMMENT ON COLUMN de_data_source.sync_mode IS '同步模式: realtime/batch/scheduled';
  27. CREATE INDEX IF NOT EXISTS idx_de_data_source_type ON de_data_source(source_type);
  28. CREATE INDEX IF NOT EXISTS idx_de_data_source_status ON de_data_source(status);
  29. -- ==================== 数据采集 ====================
  30. -- 数据采集任务表
  31. CREATE TABLE IF NOT EXISTS de_collect_task (
  32. id BIGSERIAL PRIMARY KEY,
  33. task_name VARCHAR(100) NOT NULL,
  34. source_id BIGINT REFERENCES de_data_source(id),
  35. collect_type VARCHAR(30) NOT NULL, -- realtime/batch/manual
  36. topic VARCHAR(100), -- Kafka/MQTT topic
  37. target_table VARCHAR(100), -- 目标表名
  38. transform_rule JSONB, -- 转换规则
  39. status VARCHAR(20) DEFAULT 'pending', -- pending/running/paused/completed/failed
  40. total_count BIGINT DEFAULT 0,
  41. success_count BIGINT DEFAULT 0,
  42. fail_count BIGINT DEFAULT 0,
  43. start_time TIMESTAMP,
  44. end_time TIMESTAMP,
  45. error_msg TEXT,
  46. deleted SMALLINT DEFAULT 0,
  47. created_at TIMESTAMP DEFAULT NOW(),
  48. updated_at TIMESTAMP DEFAULT NOW()
  49. );
  50. COMMENT ON TABLE de_collect_task IS '数据采集任务表';
  51. CREATE INDEX IF NOT EXISTS idx_de_collect_task_status ON de_collect_task(status);
  52. CREATE INDEX IF NOT EXISTS idx_de_collect_task_source ON de_collect_task(source_id);
  53. -- 数据采集记录表
  54. CREATE TABLE IF NOT EXISTS de_collect_record (
  55. id BIGSERIAL PRIMARY KEY,
  56. task_id BIGINT REFERENCES de_collect_task(id),
  57. source_id BIGINT REFERENCES de_data_source(id),
  58. source_type VARCHAR(30),
  59. source_key VARCHAR(100),
  60. raw_data JSONB,
  61. processed_data JSONB,
  62. status VARCHAR(20) DEFAULT 'success', -- success/failed/skipped
  63. error_msg VARCHAR(500),
  64. collect_time TIMESTAMP DEFAULT NOW()
  65. );
  66. COMMENT ON TABLE de_collect_record IS '数据采集记录表';
  67. CREATE INDEX IF NOT EXISTS idx_de_collect_record_time ON de_collect_record(collect_time DESC);
  68. CREATE INDEX IF NOT EXISTS idx_de_collect_record_task ON de_collect_record(task_id);
  69. -- ==================== 数据接入 ====================
  70. -- API接入配置表
  71. CREATE TABLE IF NOT EXISTS de_api_config (
  72. id BIGSERIAL PRIMARY KEY,
  73. api_name VARCHAR(100) NOT NULL,
  74. api_path VARCHAR(200) UNIQUE NOT NULL,
  75. method VARCHAR(10) DEFAULT 'POST', -- GET/POST/PUT
  76. source_id BIGINT REFERENCES de_data_source(id),
  77. request_schema JSONB, -- 请求Schema定义
  78. response_schema JSONB, -- 响应Schema定义
  79. auth_type VARCHAR(20) DEFAULT 'none', -- none/token/api_key/basic
  80. rate_limit INT DEFAULT 100, -- 限流(次/分钟)
  81. status SMALLINT DEFAULT 1,
  82. deleted SMALLINT DEFAULT 0,
  83. created_at TIMESTAMP DEFAULT NOW(),
  84. updated_at TIMESTAMP DEFAULT NOW()
  85. );
  86. COMMENT ON TABLE de_api_config IS 'API接入配置表';
  87. -- ==================== 数据存储 ====================
  88. -- 存储配置表
  89. CREATE TABLE IF NOT EXISTS de_storage_config (
  90. id BIGSERIAL PRIMARY KEY,
  91. storage_name VARCHAR(100) NOT NULL,
  92. storage_type VARCHAR(30) NOT NULL, -- tdengine/postgresql/minio
  93. connection_url VARCHAR(500),
  94. username VARCHAR(100),
  95. password VARCHAR(255),
  96. database_name VARCHAR(100),
  97. bucket_name VARCHAR(100),
  98. extra_config JSONB,
  99. status SMALLINT DEFAULT 1,
  100. deleted SMALLINT DEFAULT 0,
  101. created_at TIMESTAMP DEFAULT NOW(),
  102. updated_at TIMESTAMP DEFAULT NOW()
  103. );
  104. COMMENT ON TABLE de_storage_config IS '存储配置表';
  105. -- 存储路由规则表(哪类数据存到哪)
  106. CREATE TABLE IF NOT EXISTS de_storage_route (
  107. id BIGSERIAL PRIMARY KEY,
  108. source_type VARCHAR(30) NOT NULL,
  109. data_category VARCHAR(50), -- telemetry/quality/billing/document
  110. storage_id BIGINT REFERENCES de_storage_config(id),
  111. target_table VARCHAR(100),
  112. partition_rule VARCHAR(200), -- 分区规则
  113. retention_days INT DEFAULT 365,
  114. status SMALLINT DEFAULT 1,
  115. created_at TIMESTAMP DEFAULT NOW()
  116. );
  117. COMMENT ON TABLE de_storage_route IS '存储路由规则表';
  118. -- ==================== 数据集成 ====================
  119. -- 数据同步任务表
  120. CREATE TABLE IF NOT EXISTS de_sync_task (
  121. id BIGSERIAL PRIMARY KEY,
  122. task_name VARCHAR(100) NOT NULL,
  123. source_id BIGINT REFERENCES de_data_source(id),
  124. target_storage_id BIGINT REFERENCES de_storage_config(id),
  125. sync_type VARCHAR(30) NOT NULL, -- full/incremental/cdc
  126. sync_cron VARCHAR(50),
  127. last_sync_at TIMESTAMP,
  128. last_sync_count BIGINT,
  129. status VARCHAR(20) DEFAULT 'pending', -- pending/running/paused/completed/failed
  130. error_msg TEXT,
  131. deleted SMALLINT DEFAULT 0,
  132. created_at TIMESTAMP DEFAULT NOW(),
  133. updated_at TIMESTAMP DEFAULT NOW()
  134. );
  135. COMMENT ON TABLE de_sync_task IS '数据同步任务表';
  136. CREATE INDEX IF NOT EXISTS idx_de_sync_task_status ON de_sync_task(status);
  137. -- ==================== 数据质量 ====================
  138. -- 数据质量规则表
  139. CREATE TABLE IF NOT EXISTS de_quality_rule (
  140. id BIGSERIAL PRIMARY KEY,
  141. rule_name VARCHAR(100) NOT NULL,
  142. rule_type VARCHAR(30) NOT NULL, -- completeness/validity/timeliness/consistency
  143. table_name VARCHAR(100),
  144. column_name VARCHAR(100),
  145. rule_expr VARCHAR(500), -- 规则表达式
  146. threshold DECIMAL(5,2), -- 阈值
  147. severity VARCHAR(20) DEFAULT 'warning', -- info/warning/error
  148. enabled SMALLINT DEFAULT 1,
  149. created_at TIMESTAMP DEFAULT NOW(),
  150. updated_at TIMESTAMP DEFAULT NOW()
  151. );
  152. COMMENT ON TABLE de_quality_rule IS '数据质量规则表';
  153. -- 数据质量检查记录表
  154. CREATE TABLE IF NOT EXISTS de_quality_check (
  155. id BIGSERIAL PRIMARY KEY,
  156. rule_id BIGINT REFERENCES de_quality_rule(id),
  157. check_time TIMESTAMP DEFAULT NOW(),
  158. total_count BIGINT,
  159. pass_count BIGINT,
  160. fail_count BIGINT,
  161. pass_rate DECIMAL(5,2),
  162. result_detail JSONB,
  163. status VARCHAR(20) DEFAULT 'success' -- success/failed
  164. );
  165. COMMENT ON TABLE de_quality_check IS '数据质量检查记录表';
  166. CREATE INDEX IF NOT EXISTS idx_de_quality_check_time ON de_quality_check(check_time DESC);
  167. -- ==================== 数据血缘 ====================
  168. -- 数据血缘关系表
  169. CREATE TABLE IF NOT EXISTS de_data_lineage (
  170. id BIGSERIAL PRIMARY KEY,
  171. source_table VARCHAR(100) NOT NULL,
  172. source_column VARCHAR(100),
  173. target_table VARCHAR(100) NOT NULL,
  174. target_column VARCHAR(100),
  175. transform_type VARCHAR(30), -- direct/mapping/aggregation/calculation
  176. transform_rule TEXT,
  177. description VARCHAR(500),
  178. created_at TIMESTAMP DEFAULT NOW()
  179. );
  180. COMMENT ON TABLE de_data_lineage IS '数据血缘关系表';
  181. CREATE INDEX IF NOT EXISTS idx_de_lineage_source ON de_data_lineage(source_table);
  182. CREATE INDEX IF NOT EXISTS idx_de_lineage_target ON de_data_lineage(target_table);
  183. -- ==================== 数据引擎统计 ====================
  184. -- 数据统计仪表板
  185. CREATE TABLE IF NOT EXISTS de_stat_daily (
  186. id BIGSERIAL PRIMARY KEY,
  187. stat_date DATE NOT NULL,
  188. source_id BIGINT,
  189. collect_count BIGINT DEFAULT 0,
  190. store_count BIGINT DEFAULT 0,
  191. quality_score DECIMAL(5,2),
  192. sync_count BIGINT DEFAULT 0,
  193. error_count BIGINT DEFAULT 0,
  194. created_at TIMESTAMP DEFAULT NOW(),
  195. UNIQUE(stat_date, source_id)
  196. );
  197. COMMENT ON TABLE de_stat_daily IS '日统计数据表';