在 ksqlDB 中创建一个数据流并运行连续查询的简单示例如下:
CREATE STREAM riderLocations (profileId VARCHAR, latitude DOUBLE, longitude DOUBLE) WITH (kafka_topic='locations', value_format='json', partitions=1);-- Mountain View lat, long: 37.4133, -122.1162SELECT * FROM riderLocations WHERE GEO_DISTANCE(latitude, longitude, 37.4133, -122.1162) <= 5 EMIT CHANGES;
首先,通过一个 Kafka 主题创建一个数据流 riderLocations(骑手位置);消息内容采用 json 格式存储,例如 {“profileId”: “c2309eec”, “latitude”: 37.7877, “longitude”: -122.4205} 。
然后,针对 riderLocations 数据流运行一个连续查询,返回距离 Mountain View(加州山景城)5 英里之内的骑手 。该查询会一直运行,直到被终止;并且随着事件被写入 riderLocations,它会将结果推送到客户端 。
此时,如果我们打开另一个会话连接到 ksqlDB,生成一些数据流:
INSERT INTO riderLocations (profileId, latitude, longitude) VALUES ('c2309eec', 37.7877, -122.4205);INSERT INTO riderLocations (profileId, latitude, longitude) VALUES ('18f4ea86', 37.3903, -122.0643);INSERT INTO riderLocations (profileId, latitude, longitude) VALUES ('4ab5cbad', 37.3952, -122.0813);INSERT INTO riderLocations (profileId, latitude, longitude) VALUES ('8b6eae59', 37.3944, -122.0813);INSERT INTO riderLocations (profileId, latitude, longitude) VALUES ('4a7c7b41', 37.4049, -122.0822);INSERT INTO riderLocations (profileId, latitude, longitude) VALUES ('4ddad000', 37.7857, -122.4011);
【一文带你了解不一样的SQL,惊喜多多】随着每次事件的生成,流查询语句将会在第一个会话中实时输出匹配的数据行 。
六.总结
随着互联网和大数据等新技术的发展,SQL 早已不仅仅是当年的关系数据库查询语言了;无论是面向对象特性(例如自定义类型)、文档数据(XML、JSON)的存储和处理、时态数据的存储和处理、复杂事件和流数据处理、数据科学中的多维数组以及图形数据库等各种 NoSQL 功能已经或者即将成为 SQL 标准中的一部分,One SQL to Rule Them All!
推荐阅读
- iOS|iOS 16前的最后一个版本!iOS 15.5登场:一文了解详情
- 打通前后端,这款效能提升开源“神器”你一定要了解
- 一文读懂Redis的dict字典数据结构
- 新疆维吾尔自治区|一文带你了解和田玉“前世今生”
- ARM|AMD|X86/i386|AARCH64 #了解一下#操作系统:CPU架构
- 深入了解定制 Bash
- 使用Java带你打造一款简单的外卖系统
- 满族姓氏文化你了解多少
- 痛风饮食治疗注意事项
- 上海市|现在不要去上海这边打工,为什么呢?相信大家都了解