参考数据 JOIN

✅ 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 流分析中的时间进度

性能注意事项

为了防止性能下降,应通过简单键相等()来定义引用联接谓词(ONON s.myKey = r.myKey子句)。 使用复杂表达式或不相等会在内部产生交叉联接,然后是筛选器(完全扫描与查找),这可能会严重影响整体延迟。

如果可能,请将这些复杂表达式移动到 WHERE 查询步骤的子句,或者使用更简单的条件多次联接相同的引用数据。

另请参阅