更多查询示例
本文档演示了一些典型的查询模式,您可以在Timeplus中实现这些模式来解决各种用例。
创建一个 docker-compose 文件以将Proton图像与数据生成器捆绑在一起。
- 下载 docker-compose.yml 然后放入新文件夹。
- 打开终端并在此文件夹中运行 docker compose up。
- 等待几分钟,提取所有必需的镜像并启动容器。
- 使用 proton-client 运行 SQL 来查询数据:
docker exec-it <folder>-proton-1 proton-1 proton-client
你可以通过docker ps
获取容器名称。
客户场景和数据模型
你是一家汽车共享公司的首席业务分析师。 每辆车都配备了传感器,用于报告汽车位置。 客户使用移动应用程序查找附近的可用汽车,进行预订,解锁并上路。 在行程结束时,客户将汽车停好,上锁,然后结束行程。 将使用注册的信用卡自动付款。
时间敏感型见解的一些典型用例是:
- 用户在某些地点驾驶了多少辆汽车? 我们需要将一些汽车从不太繁忙的地方转移到那些热点区域吗?
- 哪些汽车的行驶速度过快或燃料不足? 服务团队可能需要采取行动。
- 哪些用户继续预订汽车然后取消? 我们是否应向这些用户发送实时通知以避免滥用。
系统中有多个数据流:
dim_user_info
包含所有注册用户信息的相对静态流。
专栏 | 类型 | 示例值 |
---|---|---|
uid | 字符串 | u00001 |
名字_name | 字符串 | Foo |
姓氏 | 字符串 | Bar |
电子邮件地址 | 字符串 | a@timeplus.io |
信用卡 | 字符串 | 371712345678910 |
两性平等 | 字符串 | F |
生日 | 字符串 | 1990-01-15 |
dim_car_info
所有注册汽车的相对静态流
专栏 | 评论 | 类型 | 示例值 |
---|---|---|---|
cid | 汽车身份证 | 字符串 | c00001 |
牌照号 | 字符串 | KM235L | |
服务中 | 如果汽车处于暂停状态(重试或保养中),则返回 false | 布尔值 | 真的 |
car_live_data
包含来自汽车传感器的最新数据的数据流。 当汽车发动机启动时,每秒报告一次数据。 否则,每半小时报告一次数据。
专栏 | 评论 | 类型 | 示例值 |
---|---|---|---|
时间 | 传感器数据的日期时间 | 日期时间 | 2022-01-12 23:00:58.476 |
cid | 汽车身份证 | 字符串 | c00001 |
经度 | 当前职位 | 浮点数 | 40.75896 |
纬度 | 当前职位 | 浮点数 | -73.985195 |
gas_percent | 气体液位百分比,100 表示油箱已满 | 小数 | 86.12 |
speed_kmh | 当前行驶速度(以 km/h 为单位) | 整数 | 56 |
total_km | 这辆车的总距离(以千米为单位)。 旅行后继续增加 | 浮点数 | 3536 |
锁定 | 汽车是否上锁 | 布尔值 | 真的 |
使用中 | 是否有人在用车 | 布尔值 | 真的 |
预订
包含行程详细信息和付款信息的数据流。 每行都是在预订生命周期内生成的
- 当用户预订汽车时,将出现一个带有 action=add 的新活动,booking_time=now,expire=now+30m
- 当用户解锁汽车时,将出现一个带有 action=service 的新事件
- 当用户完成行程并锁定汽车时,将出现一个名为 action=end 的新事件
- 当用户取消预订时,将出现一个带有 action=cancel 的新活动
- 当用户将预订再延长 30 分钟时,一个带有 action=extend 的新活动,并更新到期字段
- 如果用户未在到期时间之前解锁汽车,则会使用 action=expire 添加新事件
专栏 | 评论 | 类型 | 示例值 |
---|---|---|---|
时间 | 当事件发生时 | 日期时间 | 2022-01-12 13:00:58.476 |
出价 | 预订编号 | 字符串 | b00001 |
预订时 间 | 当用户预订汽车时。 30 分钟后过期 | 日期时间 | 2022-01-12 13:30:58.476 |
uid | 用户 ID | 字符串 | u00001 |
cid | 汽车身份证 | 字符串 | c00001 |
行动 | 其中一个值:添加、取消、延长、服务、过期、结束 | 字符串 | 添加 |
过期 | 预订何时到期 | 日期时间 | 2022-01-12 13:30:58.476 |
旅行
包含行程详细信息和付款信息的数据流。 每行都是在行程结束时生成的
专栏 | 评论 | 类型 | 示例值 |
---|---|---|---|
潮汐的 | 行程编号 | 字符串 | t00001 |
start_time | 旅行何时开始 | 日期时间 | 2022-01-12 13:00:58.476 |
end_time | 当旅程结束时 | 日期时间 | 2022-01-12 24:00:58.476 |
出价 | 预订编号 | 字符串 | b00001 |
start_lon | 起始地点 | 浮点数 | 40.75896 |
start_lat | 起始地点 | 浮点数 | -73.985195 |
end_lon | 终点位置 | 浮点数 | 42.75896 |
end_lat | 终点位置 | 浮点数 | -71.985195 |
距离 | 行驶距离(km) | 浮点数 | 23.2 |
金额 | 用户应该为旅行支付多少费用 | 小数 | 40.75 |
以下部分展示了如何查询Timeplus以了解业务。
流分析
S-TAIL:显示带或不带过滤条件的原始数据
用例: 为了开始数据探索,分析师希望显示所有最近报告的汽车物联网数据
从 car_live_data 中选择 *
或者关注哪些汽车快要耗尽汽油了(这样他们就可以派出服务小组加油或暂停汽车)
从 car_live_data 中选择时间、cid、gas_percent 其中 gas_percent < 25
结果:
时间 | cid | gas_percent | 使用中 |
---|---|---|---|
2022-01-12 23:00:58.476 | c00001 | 18 | false |
S-DOWNSAMPLING:将详细数据点转换为高级数据
用例: 每辆车上的传感器可能会报告从半秒到每 10 秒的数据。 分析师可能会降低粒度,只需要将每分钟的数据保存到下游即可
从
tumble (car_live_data,1m) 选择 window_start、avg (gas_percent) 作为 avg_percent、avg (speed_kmh) 作为 avg_speed 作为 avg_speed(car_live_data,1m)按 window_start 分组,cid
结果:
window_start | cid | 平均气体百分比 | avg_speed |
---|---|---|---|
2022-01-12 23:01:00.000 | c00001 | 34 | 35 |
More practically, the user can create a materialized view to automatically put downsampled data into a new stream/view.
将物化视图 car_live_data_1min 创建为
选择 window_start 作为时间、cid、avg (gas_percent) 作为 avg_gas、avg (speed_kmh) 作为 avg_speed
FROM tumble (car_live_data,1m) 按 window_start 分组,cid