Spatial Join

Glink 在 Flink 上扩展了三种类型的 spatial join,用以支持基于空间关系的 join。其中,spatial dimension join 一般用于流数据与不变数据(或缓慢变化数据)的 join,而 spatial window join 和 spatial interval join 用于双流数据的 join。

Spatial Dimension Join

spatial dimension join 一般用于流数据与维度数据的 join,通过维度数据丰富流数据的内容。在 Glink 中维度数据可以有两种存在形式,一种是以广播状态的形式存在于 Flink 的内部状态中,另一种是存在于外部空间或时空数据库中。在 SpatialDataStream API 中支持上述两种维度数据的存在形式,但是在 Spatial SQL API 中仅支持将维度数据存放在外部数据库中。

SpatialDataStream API

SpatialDataStream API 中可通过如下方式快速实现 spatial dimension join,其中 TopologyType 用于指定基于何种空间关系进行 join,JoinFunction 用于给出流数据与维度数据的具体 join 方式,TypeHint 用于指示 join 后返回的数据类型。

SpatialDataStream<Point> pointStream = ...
BroadcastSpatialDataStream<Polygon> polygonStream = ...
pointStream.spatialDimentionJoin(
    polygonStream,
    <TopologyType>,
    <JoinFunction>,
    <TypeHint>)

Spatial Window Join

spatial window join 支持双流数据的 spatial join,关于流数据上的 window join 可参考 Flink Window Join。目前 Glink 的 spatial window join 仅支持 SpatialDataStream API。

SpatialDataStream API

SpatialDataStream API 提供了双流 spatial window join 函数,可通过如下方式调用。其中 WindowAssigner 用于定义窗口,其余参数与 spatial dimension join 相同。

spatialStream1.spatialWindowJoin(
    spatialStream2,
    <TopologyType>,
    <WindowAssigner>,
    <JoinFunction>,
    <TypeHint>);

Spatial Interval Join

spatial interval join 同样用于双流 join,关于 interval join 的概念可参考 Flink Interval Join。目前 Glink 的 spatial interval join 仅支持 SpatialDataStream API。

SpatialDataStream API

SpatialDataStream API 提供了双流 spatial interval join 函数,可通过如下方式调用。其中两个 Time 用于定义 join 的时间上下界,其余参数与 spatial dimension join 相同。

spatialStream1.spatialWindowJoin(
    spatialStream2,
    <TopologyType>,
    <Time>,
    <Time>,
    <JoinFunction>,
    <TypeHint>);

Last updated

Was this helpful?