如何找到来自 2 个不同 KSQL 流的 2 个经纬度对之间的距离
how to find the distance between 2 lat-lon pair coming from 2 different KSQL streams
我有一个 KSQL 数据流名称 'stream_car_1',它以经纬度对流的形式给出了它的当前位置。我有另一个 KSQL 数据流 'stream_car_2',它以经纬度对流的形式给出了它的当前位置。我每次都必须实时找到这两辆车之间的地理距离。这可以通过 KSQL 实现吗?如果是,怎么做?
在不知道你的确切数据模型的情况下很难给出具体的答案,但这里有一个例子:
直接通过新流创建测试主题:
ksql> CREATE STREAM CAR1 (ID INT, LAT DOUBLE, LON DOUBLE) WITH (KAFKA_TOPIC='car1', VALUE_FORMAT='AVRO', PARTITIONS=1);
Message
----------------
Stream created
----------------
ksql> CREATE STREAM CAR2 (ID INT, LAT DOUBLE, LON DOUBLE) WITH (KAFKA_TOPIC='car2', VALUE_FORMAT='AVRO', PARTITIONS=1);
Message
----------------
Stream created
----------------
添加一些测试数据
ksql> INSERT INTO CAR1 (ID, LAT, LON) VALUES (1,53.917719, -1.801575);
ksql> INSERT INTO CAR2 (ID, LAT, LON) VALUES (1,53.910515, -1.788787);
从题目开始查询
ksql> SET 'auto.offset.reset' = 'earliest';
Successfully changed local property 'auto.offset.reset' to 'earliest'. Use the UNSET command to revert your change.
进行流-流连接,使用GEO_DISTANCE
函数进行计算:
ksql> SELECT GEO_DISTANCE(C1.LAT, C1.LON, C2.LAT, C2.LON, 'KM') AS DISTANCE_BETWEEN_KM
FROM CAR1 C1
LEFT JOIN CAR2 C2
WITHIN 10 MINUTES
ON C1.ID=C2.ID
EMIT CHANGES;
+----------------------+
|DISTANCE_BETWEEN_KM |
+----------------------+
|1.1589376248164969 |
我有一个 KSQL 数据流名称 'stream_car_1',它以经纬度对流的形式给出了它的当前位置。我有另一个 KSQL 数据流 'stream_car_2',它以经纬度对流的形式给出了它的当前位置。我每次都必须实时找到这两辆车之间的地理距离。这可以通过 KSQL 实现吗?如果是,怎么做?
在不知道你的确切数据模型的情况下很难给出具体的答案,但这里有一个例子:
直接通过新流创建测试主题:
ksql> CREATE STREAM CAR1 (ID INT, LAT DOUBLE, LON DOUBLE) WITH (KAFKA_TOPIC='car1', VALUE_FORMAT='AVRO', PARTITIONS=1); Message ---------------- Stream created ---------------- ksql> CREATE STREAM CAR2 (ID INT, LAT DOUBLE, LON DOUBLE) WITH (KAFKA_TOPIC='car2', VALUE_FORMAT='AVRO', PARTITIONS=1); Message ---------------- Stream created ----------------
添加一些测试数据
ksql> INSERT INTO CAR1 (ID, LAT, LON) VALUES (1,53.917719, -1.801575); ksql> INSERT INTO CAR2 (ID, LAT, LON) VALUES (1,53.910515, -1.788787);
从题目开始查询
ksql> SET 'auto.offset.reset' = 'earliest'; Successfully changed local property 'auto.offset.reset' to 'earliest'. Use the UNSET command to revert your change.
进行流-流连接,使用
GEO_DISTANCE
函数进行计算:ksql> SELECT GEO_DISTANCE(C1.LAT, C1.LON, C2.LAT, C2.LON, 'KM') AS DISTANCE_BETWEEN_KM FROM CAR1 C1 LEFT JOIN CAR2 C2 WITHIN 10 MINUTES ON C1.ID=C2.ID EMIT CHANGES; +----------------------+ |DISTANCE_BETWEEN_KM | +----------------------+ |1.1589376248164969 |