使用事件处理程序编辑器处理事件数据
事件处理程序编辑器采用无代码体验,只需拖放即可设计出活动数据处理逻辑。 本文介绍如何使用编辑器来设计你的处理逻辑。
注意
现在,创建事件流时,将会默认启用增强功能。 如果你有使用标准功能创建的事件流,则这些事件流将继续正常工作。 你仍然可以像往常一样编辑和使用它们。 建议创建新的事件流来替换标准事件流,以便可以利用增强型事件流的其他功能和优势。
先决条件
开始之前,你必须满足以下先决条件:
- 使用“参与者”或更高权限在 Fabric 容量许可证模式(或)试用许可证模式下访问工作区。
使用编辑器设计事件处理
要使用无代码编辑器对数据流执行流处理操作,请遵照以下步骤执行:
如果尚未处于编辑模式,请选择功能区上的“编辑”。 请确保连接的操作的上游节点具有架构。
要在编辑模式下在流节点与目的地之间插入事件处理运算符,你可以使用以下两种方法之一:
选择“管理字段”运算符节点。 在“管理字段”配置面板中,选择要输出的字段。 如果要添加所有字段,请选择“添加所有字段”。 还可以使用内置函数添加新字段以聚合来自上游的数据。 (目前支持的内置函数是“字符串函数”、“日期和时间函数”、“数学函数”中的某些函数。若要找到这些函数,请在
built-in
上进行搜索。)配置“管理字段”运算符后,选择“刷新”以验证此运算符生成的测试结果。
如果有任何配置错误,它们将显示在底部窗格的“创作错误”选项卡中。
如果测试结果正确,请选择“发布”以保存事件处理逻辑并返回到实时视图。
完成这些步骤后,可以直观显示事件流如何在“实时视图”中开始流式传输和处理数据。
事件处理编辑器
事件处理器编辑器(编辑模式下的画布)允许你将数据转换到各种目的地。 进入“编辑”模式,为数据流设计流处理操作。
编辑模式包括画布和下部窗格,可在其中:
- 通过拖放操作建立事件数据转换逻辑。
- 从头到尾预览每个处理节点中的测试结果。
- 发现处理节点中存在的任何创作错误。
编辑器布局
- 功能区菜单和画布(在图像中编号为 1):在此窗格中,可以通过(从“转换事件”菜单中)选择运算符并通过新创建的运算符节点连接流和目的地节点来设计数据转换逻辑。 可以拖放连接线,也可以选择和删除连接。
- 右编辑窗格(在图像中编号为 2):此窗格允许你配置所选节点或查看流名称。
- 包含数据预览和创作错误选项卡的底部窗格(在图像中编号为 3):在此窗格中,使用“测试结果”选项卡预览所选节点中的测试结果。“创作错误”选项卡列出了操作节点中任何不完整或不正确的配置。
支持的节点类型和示例
下面是支持在引入之前添加运算符的目的地类型:
- Lakehouse
- KQL 数据库(引入前的事件处理)
- 派生流
- Activator
注意
对于不支持预引入运算符添加的目的地,可以首先添加派生流作为运算符的输出。 然后,将预期的目的地追加到此派生流。
Lakehouse 和 KQL 数据库中的事件处理器(引入前的事件处理)允许在将数据引入目的地之前处理该数据。
先决条件
开始之前,你必须满足以下先决条件:
- 使用“参与者”或更高权限在 Fabric 容量许可证模式(或)试用许可证模式下访问工作区。
- 使用“参与者”或更高权限获取湖屋或 KQL 数据库所在工作区的访问权限。
使用编辑器设计事件处理
若要使用事件处理程序编辑器设计事件处理,请执行以下操作:
添加一个湖屋目标并在右侧窗格中输入必要参数。 (有关详细说明,请参阅 在事件流中添加和管理目标。)
选择“打开事件处理程序”。 会出现“事件处理编辑器”屏幕。
在“事件处理编辑器”画布中,选择事件流节点。 在右侧的“Eventstream”窗格中,你可以预览数据架构或更改数据类型。
若要在事件处理器编辑器中在此事件流与目标之间插入事件处理运算符,可以使用以下两种方法之一:
选择“管理字段”运算符节点。 在“管理字段”配置面板中,选择要输出的字段。 如果要添加所有字段,请选择“添加所有字段”。 还可以使用内置函数添加新字段以聚合来自上游的数据。 (目前支持的内置函数是“字符串函数”、“日期和时间函数”、“数学函数”中的某些函数。若要找到这些函数,请在“内置”上进行搜索。)
配置“管理字段”运算符后,选择“刷新静态预览”来预览此运算符生成的数据。
如果有任何配置错误,它们将显示在底部窗格的“创作错误”选项卡中。
如果预览数据看起来正确无误,请选择“完成”来保存事件处理逻辑,并返回到湖屋目标配置屏幕。
选择“添加”,完成湖屋目标的配置。
事件处理程序编辑器
使用事件处理程序可将要引入到湖屋目标的数据进行转换。 配置湖屋目标时,可以在 Lakehouse 目标配置屏幕中间找到“打开事件处理器”选项。
选择“打开事件处理程序”将启动“事件处理编辑器”屏幕,可在其中定义数据转换逻辑。
事件处理程序编辑器包括画布和下部窗格,可在其中:
- 通过拖放操作建立事件数据转换逻辑。
- 从头到尾预览每个处理节点中的数据。
- 发现处理节点中存在的任何创作错误。
屏幕布局类似于主编辑器。 它由三个部分组成,如下图所示:
带关系图视图的画布:在此窗格中,可以通过(从“操作”菜单中)选择运算符来设计数据转换逻辑,并通过新创建的运算符节点连接事件流和目标节点。 可以拖放连接线,也可以选择和删除连接。
右侧编辑窗格:在此窗格处可以配置所选的运算节点,或查看时间流和目标的架构。
包含数据预览和创作错误选项卡的底部窗格:在此窗格中,使用“数据预览”选项卡预览所选节点中的数据。“创作错误”选项卡列出了操作节点中任何不完整或不正确的配置。
创作错误
“创作错误”是指由于操作节点配置不完整或不正确而导致的“事件处理程序编辑器”中发生的错误,有助于发现并解决事件处理程序中的潜在问题。
可以在事件处理程序编辑器的底部面板中查看“创作错误”。 底部面板列出了所有创作错误,每个创作错误有四列:
- 节点 ID:指示发生创作错误的操作节点 ID。
- 节点类型:指示发生创作错误的操作节点类型。
- 级别:指示创作错误的严重性,分为“严重”和“信息”两个级别。 严重级别创作错误意味着事件处理程序出现严重问题,无法保存或运行。 信息级别创作错误意味着事件处理程序有一些提示或建议,可以帮助你优化或改进事件处理程序。
- 错误:指示创作错误的特定信息,简要描述创作错误的原因和影响。 可以选择“显示详细信息”选项卡来查看详细信息。
由于 Eventstream 和 KQL 数据库支持不同数据类型,数据类型转换过程可能会生成创作错误。
下表显示了从 Eventstream 到 KQL 数据库的数据类型转换结果。 列表示 Eventstream 支持的数据类型,行表示 KQL 数据库支持的数据类型。 这些单元格指示转换结果,可能是以下三个结果之一:
✔️ 表示成功转换,未生成错误或警告。
❌ 表示无法转换,生成严重创作错误。 错误消息类似于:列“{0}”的数据类型“{1}”与所选 KQL 表中的预期类型“{2}”不匹配,不能自动转换。
⚠️ 表示可能但不准确的转换,生成信息创作错误。 错误消息类似于:列“{0}”的数据类型“{1}”与所选 KQL 表中的预期类型“{2}”不完全匹配。 它会自动转换为“{2}”。
string | 布尔 | datetime | 动态 | guid | int | long | real | timespan | 十进制 | |
---|---|---|---|---|---|---|---|---|---|---|
Int64 | ❌ | ❌ | ❌ | ✔️ | ❌ | ⚠️ | ✔️ | ⚠️ | ❌ | ✔️ |
双精度 | ❌ | ❌ | ❌ | ✔️ | ❌ | ❌ | ❌ | ⚠️ | ❌ | ⚠️ |
字符串 | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
日期/时间 | ⚠️ | ❌ | ✔️ | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
记录 | ⚠️ | ❌ | ❌ | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
数组 | ⚠️ | ❌ | ❌ | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
如表中所示,某些数据类型转换成功,例如字符串到字符串。 这些转换不会生成任何创作错误,并且不会影响事件处理器的运行。
某些数据类型转换无法成功,例如 int 到字符串。 这些转换会生成严重级别的创作错误,导致事件处理程序无法保存。 需要在 Eventstream 或 KQL 表中更改数据类型,以避免这些错误。
某些数据类型转换可能成功,但并不准确,例如 int 到 real。 这些转换会生成信息级别创作错误,指示数据类型不匹配以及自动转换结果。 这些转换可能会导致数据丢失精度或结构。 可以选择忽略这些错误,或者修改 Eventstream 或 KQL 表中的数据类型,以优化事件处理程序。
转换运算符
事件处理程序提供 6 种运算符,可根据业务需求使用这 6 种运算符转换事件数据。
聚合
使用“聚合”转换来计算一段时间内每次新事件发生时的聚合(总和、最小值、最大值或平均值)。 此操作还允许重命名这些计算列,并根据数据中的其他维度筛选或切片聚合。 在同一转换中可以有一个或多个聚合。
- 运算符名称:指定聚合运算的名称。
- 添加聚合函数:在聚合运算中添加一个或多个聚合。
- 类型:选择聚合类型:总和、最小值、最大值或平均值。
- 字段:选择要处理的列。
- 名称:定义此聚合函数的名称。
- 分区依据:选择用于对聚合进行分组的列。
- 过去一段时间内的聚合值:指定聚合的时间窗口(默认值为 5 秒)。
展开
使用“扩展”数组转换可为数组中的每个值创建一个新行。 可以选择“为缺失/空数组创建行”,或“不为缺失/空数组创建行”。
筛选器
使用“筛选器”转换以基于输入中的字段值筛选事件。 根据数据类型(数值或文本),转换会保留与所选条件匹配的值,例如 is null 或 is not null。
Group by
使用“分组依据”转换计算某个时间窗口内所有事件的聚合。 可以按一个或多个字段中的值进行分组。 就像聚合转换允许重命名列一样,但提供了更多聚合选项,并包含更复杂的时间窗口选项。 与“聚合”类似,你可以为每个转换添加多个聚合。
转换中可用的聚合如下:
- 平均值
- 计数
- 最大值
- 最小值
- 百分位(连续和离散)
- 标准偏差
- Sum
- Variance
在实时流方案中,对临时窗口中包含的数据执行操作是一种常见模式。 事件处理程序支持与 Group by 运算符集成的开窗函数。 可以在此运算符的设置中定义它。
管理字段
可以通过“管理字段”转换来添加、删除、更改数据类型或重命名从输入或其他转换中传入的字段。 通过侧窗格上的设置,可通过选择“添加字段”添加一个新字段、添加多个字段或一次添加所有字段。
此外,还可以使用内置函数添加新字段,以聚合来自上游的数据。 (目前支持的内置函数是“字符串函数”、“日期和时间函数”和“数学函数”中的某些函数。若要找到这些函数,请在“内置”上进行搜索。)
下表显示了使用管理字段更改数据类型的结果。 这些列表示原始数据类型,行表示目标数据类型。
- 如果单元格中出现 ✔️,则表示可以直接转换,并且目标数据类型选项显示在下拉列表中。
- 如果单元格中出现 ❌,则表示不能转换,并且目标数据类型选项未显示在下拉列表中。
- 如果单元格中出现 ⚠,则表示可以转换,但需要满足某些条件,如字符串格式必须符合目标数据类型的要求。 例如,从字符串转换为 int 时,字符串必须是有效的整数形式,例如
123
,而不是abc
。
Int64 | 双精度 | 字符串 | 日期/时间 | Record | 数组 | |
---|---|---|---|---|---|---|
Int64 | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ |
双精度 | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ |
字符串 | ⚠️ | ⚠️ | ✔️ | ⚠️ | ❌ | ❌ |
日期/时间 | ❌ | ❌ | ✔️ | ✔️ | ❌ | ❌ |
记录 | ❌ | ❌ | ✔️ | ❌ | ✔️ | ❌ |
数组 | ❌ | ❌ | ✔️ | ❌ | ❌ | ✔️ |
Union
使用“联合”转换可以连接两个或多个节点,并将具有共享字段(具有相同名称和数据类型)的事件添加到一个表中。 不匹配的字段将被删除,不包含在输出中。
Join
可以使用“联接”转换根据所选的字段对合并两个输入中的事件。 如果不选择字段对,默认情况下连接是基于时间。 默认设置使此转换不同于批处理转换。
与常规联接一样,对于联接逻辑,还可以使用选项:
- 内部联接:只包括两个表(其中字段对匹配)中的记录。
- 左外部联接:包含左侧(第一个)表中的所有记录,并且仅包含第二个表中与字段对匹配的记录。 如果没有匹配项,则第二个输入中的字段为空。