1. 概述
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 设置预览界面计算数据
若创建的自助数据集为 数据分析用户 创建的或者数据处理用户在我的自助数据集创建的。
当数据量比较大时,可以在数据集的编辑过程中使用前 5000 行进行计算,使计算更为流畅,如下图所示: