请教 coalesce logic design

p
pittrecon08
楼主 (北美华人网)
请教大家一个logic design 问题, 现在有7个数据源, s1,s2,s3,….s7, store into 7 tables, each table has the same 30 columns 。然后想合并成最终一个output , each column need use coalesce logic to define the source, e.g coalesce (s1,s2,s3,…,s7) as column1. each column has different logic. 老板问我可不可以把这个logic definition 放到一个单独的external mapping table 里?感觉还是直接放到sql code里更直接,请问怎么做更简单有效?可以在sql or data frame 里执行。多谢
m
miaoliu
ChatGPT的回答: 在这种情况下,将逻辑定义存储在一个单独的external mapping table中是一个更灵活和可维护的方法。这样可以在不修改SQL代码的情况下更新逻辑,同时使得逻辑更易读和集中管理。 你可以创建一个包含列名、数据源以及合并逻辑的external mapping table。例如: CREATE TABLE MappingTable ( ColumnName VARCHAR(30), DataSource1 VARCHAR(5), DataSource2 VARCHAR(5), DataSource3 VARCHAR(5), -- ... (repeat for all data sources) ); INSERT INTO MappingTable VALUES ('Column1', 's1', 's2', 's3', 's4', 's5', 's6', 's7'), -- ... (repeat for all columns) 然后,在你的SQL查询中,你可以动态生成COALESCE逻辑,使用这个external mapping table: SELECT Column1 = COALESCE(s1.Column1, s2.Column1, s3.Column1, s4.Column1, s5.Column1, s6.Column1, s7.Column1), Column2 = COALESCE(s1.Column2, s2.Column2, s3.Column2, s4.Column2, s5.Column2, s6.Column2, s7.Column2), -- ... (repeat for all columns) FROM Table1 s1 FULL OUTER JOIN Table2 s2 ON s1.PrimaryKey = s2.PrimaryKey FULL OUTER JOIN Table3 s3 ON s1.PrimaryKey = s3.PrimaryKey -- ... (repeat for all tables) 这样,你可以通过更新external mapping table来修改合并逻辑,而无需修改实际的SQL查询。这对于长期的可维护性和逻辑变更非常有帮助。
p
pittrecon08
ChatGPT的回答: 在这种情况下,将逻辑定义存储在一个单独的external mapping table中是一个更灵活和可维护的方法。这样可以在不修改SQL代码的情况下更新逻辑,同时使得逻辑更易读和集中管理。 你可以创建一个包含列名、数据源以及合并逻辑的external mapping table。例如: CREATE TABLE MappingTable ( ColumnName VARCHAR(30), DataSource1 VARCHAR(5), DataSource2 VARCHAR(5), DataSource3 VARCHAR(5), -- ... (repeat for all data sources) ); INSERT INTO MappingTable VALUES ('Column1', 's1', 's2', 's3', 's4', 's5', 's6', 's7'), -- ... (repeat for all columns) 然后,在你的SQL查询中,你可以动态生成COALESCE逻辑,使用这个external mapping table: SELECT Column1 = COALESCE(s1.Column1, s2.Column1, s3.Column1, s4.Column1, s5.Column1, s6.Column1, s7.Column1), Column2 = COALESCE(s1.Column2, s2.Column2, s3.Column2, s4.Column2, s5.Column2, s6.Column2, s7.Column2), -- ... (repeat for all columns) FROM Table1 s1 FULL OUTER JOIN Table2 s2 ON s1.PrimaryKey = s2.PrimaryKey FULL OUTER JOIN Table3 s3 ON s1.PrimaryKey = s3.PrimaryKey -- ... (repeat for all tables) 这样,你可以通过更新external mapping table来修改合并逻辑,而无需修改实际的SQL查询。这对于长期的可维护性和逻辑变更非常有帮助。
miaoliu 发表于 2023-11-21 14:34

多谢回复,所有数据源里的column name都是相同的, 构想是external mapping table 里列出各个数据源的priority number columnName S1. S2. S3. S4….S7 column1. 1. 2. 3. 4…..7 Column2. 2. 1. 3. 4…..7