有同名字段的两个表如何在ETL里实现全关联
场景描述
实际业务中,业务数据一般会存放在多张不同的表,例如商品表,促销表,交易表等。做数据分析时,往往需要多表关联取数。例如现在有如下两张表,左表和右表,需要以‘A’为关联条件做全关联。
- 如果只勾选左表的字段‘A’,得到的结果是:
2. 如果只勾选右表的字段‘A’,得到的结果是:
以上情况行数是对的,但值不全。
产生原因
虽然两张表都有'A'字段,但其实这是两个不同的字段,分别是左表.A,右表.A。并且他们的值不是全包含关系。为了取到所有‘A’字段的值,我们必须在全关联时保留这两列。
解决步骤
-
将其中一个字段‘A’重命名,比如左表的'A'重命名为‘A1’。
-
以'A1'和'A'进行全关联,并选中 'A1'和'A'两列及其他需要的列。
- 但实际操作中,我们往往需要的是如下效果,可以使用COALESCE()函数解决。方法如下:
1)新建列,并用COALESCE(A1,A)取出所有的'A'列值。
2)再进行选择列和null值替换(如有null值的话)。
3)如果两表中存在多个同名字段,可以重复这样的操作。