✅ Azure 流分析 ✅ 构造事件流
在通常的情况下,我们使用事件处理引擎来计算延迟非常低的流数据。 在许多情况下,用户需要将持久化的历史数据或变化缓慢的数据集(即引用数据)与实时事件流相关联,以便对系统做出更明智的决策。 例如,将事件流联接到将 IP 地址映射到位置的静态数据集。 这是流分析中唯一支持的 JOIN,其中不需要临时绑定。 引用数据还可用于具有特定于设备的阈值。
示例:
如果一辆商用车辆注册到收费公司,他们可以通过收费站,而无需停止检查。 我们将使用商用车辆注册查找表来识别所有已过期登记的商用车辆。
SELECT I1.EntryTime, I1.LicensePlate, I1.TollId, R.RegistrationId
FROM Input1 I1 TIMESTAMP BY EntryTime
JOIN Registration R
ON I1.LicensePlate = R.LicensePlate
WHERE R.Expired = '1'
引用数据 JOIN 的特殊性
- 使用引用数据 JOIN 要求定义引用数据的输入源。
- 内部 JOIN(默认值)和左侧外部 JOIN 支持引用数据 JOIN,在 JOIN 运算符右侧提供引用数据。
- 数据类型是联接谓词(子句)
ON
评估中的一个重要方面。 不同数据类型(1.0
和"1"
)上的类似值可能不匹配。 建议显式将键转换为通用类型。 - 引用数据可以是静态(仅加载一次)或动态(定期刷新)。 但是,即使在动态情况下,引用数据也不会进行时间进度,因此左侧的流需要获取新事件才能生成输出。 有关详细信息,请参阅 Azure 流分析中的时间进度 。
性能注意事项
为了防止性能下降,应通过简单键相等()来定义引用联接谓词(ON
ON s.myKey = r.myKey
子句)。 使用复杂表达式或不相等会在内部产生交叉联接,然后是筛选器(完全扫描与查找),这可能会严重影响整体延迟。
如果可能,请将这些复杂表达式移动到 WHERE
查询步骤的子句,或者使用更简单的条件多次联接相同的引用数据。