如何5秒内将两张表联合成一张新表?FineBI 的这个功能太强大了

一、左右合并基础功能

1.1 版本

FineBI 版本

JAR 包版本

功能变动

5.1

5.1.5

2020-09-02

左右合并默认选择左合并

5.1.13

并集合并数据量过大时,系统主动打断更新

5.1.15

直连:新增支持「impala 数据库」中的数据表与 Excel 左右合并

1.2 应用场景

在实际使用数据的过程中经常会有需要将两张表联合在一起形成一张新表使用的情况,

假如有这样两张数据表:

① Table A:记录了学生姓名、英语成绩

② Table B:记录了学生姓名、数学成绩

如果想在一张表中就看到学生的姓名、数学成绩和英语成绩,则可以使用「姓名」字段作为「合并依据」进行左右合并。

不同的合并方式如下所示:

1.3 直连版本注意事项

  • 直连版本左右合并的两张表不能来自两个数据源中(抽数版本可以来自两个数据源)。
  • 合并后会 错:[DIRECT-ETL] unsupported data source: databases on different hosts/ports

  • 直连版本下,只有部分数据库中的表可以和 Excel 表左右合并,详细请参见:[直连]支持与Excel融合分析的数据库
  • 2. 示例

    将「销售明细」和「品牌维度」两张表的字段合到一张表进行分析。

    2.1 创建自助数据集

    1)在零售行业下找到 FineBI 自带的数据表「销售明细」表,并使用它创建自助数据集。如下图所示:

    2)勾选「销售明细」表的所有字段,如下图所示:

    注:建议用户在进行左右合并前,减少表字段名称长度,避免出现字段名称过长导致的自助数据集保存失败问题。

    2.2 设置左右合并

    1)如下图,添加左右合并:

    2)选择要左右合并的表「品牌维度」,并勾选该表中要参与左右合并的字段。如下图所示:

    注:要合并的表不能选择当前自助数据集的子表,系统会提示“该表为当前表的子表,无法选择”

    3)选择合并方式为「左合并」,并添加合并依据为「品牌编 」。如下图所示:

  • 合并依据字段必须为同一字段类型;
  • 若左右两表中有字段名一致,系统会将其自动添加为合并依据。用户可以手动删除或添加合并依据。
  • 合并方式说明:

    合并方式

    说明

    左合并

    对应 SQL 语句中的 left join

    右合并

    对应 SQL 语句中的 right join

    交集合并

    对应 SQL 语句中的 inner join

    并集合并

    对应 SQL 语句中的 full join

    2.3 效果查看

    两张表的字段合并到一张表中。

  • 抽取数据(Spider 版本):合并依据会合并成一个字段,只保留合并结果「品牌编 」,如下图所示:
  • 实时数据(直连版本):左表和右表的合并依据字段都会保留,所以有两个「品牌编 」字段,如下图所示:
  • 3. 多个合并依据

    实现「部门人数」和「销售额」合并到一张表中,如下图所示:

    无法单独使用一个字段作为合并依据,所以需要「部门、地区」字段共同作为合并依据。多个合并依据的意义即保证左右合并时数据的唯一性,如下图所示:

    4. 注意事项

    4.1 null 值不会互相匹配

    左右合并的两张表合并依据中如果有 null 值,null 之间不会互相匹配。

    4.2 产生笛卡尔积

    若进行左右合并的两张表,它们的合并依据字段中有重复项,左右合并后就会产生笛卡尔积,导致数据量膨胀。(比如说以「id」列作为合并依据,左表 id 字段不唯一,右表 id 字段不唯一,进行左右合并后就会产生笛卡尔积)

    为了不影响系统的稳定性,当并集合并后数据量满足以下情况时系统会主动打断进行过 N:N 操作的自助数据集的更新:

  • 进行并集合并后数据量超过 1 千万;
  • 膨胀系数>=5;膨胀系数:MIN (并集合并结果数据量/左表数据,并集合并结果数据量/右表数据)。例如,100w 数据和 500w 数据 N:N 结果为 2000w数据,那么 N:N 膨胀系数为: 2000w/500w =4
  • 若出现笛卡尔积,更新信息处会提示用户是否更新成功:

  • 数据集生成成功:更新时检测到笛卡尔积,数据膨胀,更新耗时增加,请检查左右合并步骤中的合并依据列数据是否有重复值。
  • 数据集生成失败:更新时检测到笛卡尔积,数据严重膨胀,操作中止。请检查左右合并步骤中的合并依据列数据是否有重复值,请确保重复值不应过多。
  • 若「更新信息」处提示生成失败,但用户依旧要使用 N:N 进行分析,可以通过过滤等手段缩减数据量达到系统不打断的要求。

    4.3 数据字段要求

    数据表的字段有空格会导致左右合并结果异常,在进行左右合并前,请确保合并数据表字段中没有空格。如下图所示:

    4.4 设置预览界面计算数据

    若创建的自助数据集为 数据分析用户 创建的或者数据处理用户在我的自助数据集创建的。

    二、左右合并匹配失败处理

    1. 概述

    1.1 背景

    左右合并时,若左右两表的合并依据字段有一点不一致,就不能成功匹配,能够合并成功的字段值必须一模一样。

    但在实际使用中,我们经常会遇到一些左右两表的字段有些许差异的情况,这就需要我们去处理字段值,让其能够成功左右合并。

    1.2 实现思路

    比如:右表的合并依据字段「城市」比左表多了“市”,导致左右匹配不成功。

    我们只需要处理一下左表的「城市」字段,为其加上“市”,让其与需要匹配的左表「城市」字段一致即可。

    同样的,如果用户左表是日期字段是年月日「yyyy-mm-dd」,右表却是年月日时分秒「yyyy-mm-dd hh:mm:ss」,可通过同样的思路截取掉右表日期字段的时分秒「hh:mm:ss」部分。

    2. 示例

    用户想将城市的「销售额」和「门店数量」合并到一张表中。

    2.1 上传数据

    1)下载示例数据:示例数据.rar

    2)将示例数据上传至 FineBI 。如下图所示:

    2.2 处理字段

    从 1.2 节可知,门店数量表中的「城市」字段比销售额表的「城市」多了“市”。

    1)添加自助数据集,勾选销售额表的字段,如下图所示:

    2)新增一列「城市1」,在原城市字段的基础上增加“市”。如下图所示:

    3)隐藏掉不需要的「城市」字段。如下图所示:

    4)处理后「城市1」字段就可以与门店数量表的「城市」字段可以匹配的上了。

    添加左右合并,选择门店数量表,合并依据分别选择「城市1」和「城市」,如下图所示:

    5)保存并更新自助数据集。两张表成功进行了左右合并,如下图所示:

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年10月18日
    下一篇 2022年10月18日

    相关推荐