引用数据 JOIN(Azure 流分析)

通常,我们使用事件处理引擎来计算延迟很低的流数据。 在许多情况下,用户需要将永久保留的历史数据或者变化缓慢的数据集(又称引用数据)与实时事件流关联,以便就系统做出更明智的决策。 例如,将我的事件流联接到静态数据集,以将 IP 地址映射到相关位置。 在不需要临时绑定的流分析中,这是唯一受支持的 JOIN 操作。 引用数据还可用于具有特定于设备的阈值。

示例

如果某商用车在 Toll Company 登记,则它们无需停车检查,即可通过收费站。 我们将使用商用车登记查找表来标识所有登记期已过的商用车。

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 查询步骤的 子句,或者使用更简单的条件多次联接相同的引用数据。

另请参阅