【发布时间】:2021-05-12 19:07:56
【问题描述】:
我正在评估 bigQuery。我有一张桌子,可以记录我们员工的动作。
Table (location_history):
emp String
lat String
lng String
district String
timestamp timestamp
示例:
emp | lat | lng | district| timestamp
------------------------------------------------
emp1 | 100.234 | 99.456 | ABC | 2021-02-09 03:00:00
emp1 | 100.234 | 99.456 | XYZ | 2021-02-09 04:00:00
emp1 | 100.234 | 99.456 | ABC | 2021-02-09 05:00:00
emp1 | 100.234 | 99.456 | XYZ | 2021-02-09 06:00:00
emp1 | 100.234 | 99.456 | XYZ | 2021-02-09 07:00:00
emp1 | 100.234 | 99.456 | ABC | 2021-02-09 08:00:00
emp1 | 100.234 | 99.456 | WWW | 2021-02-09 09:00:00
注意:这是每个员工在地区内的移动。员工可以按照时间戳以外的顺序从一个地区移动到另一个地区。此外,即使是一个地区,也可能有数百个重复(相同)的行,因为我们捕获了每个 lng,lat(地区是一个多边形,superArea)。
我需要跟踪访问每个地区的每位员工的历史记录。所以我可以知道哪个员工整天在哪个区。这可以是整个月的轨道。我们在上表中得到的行(每天)超过 1000 亿。
两个问题:
- 在任何存储过程(不管任何数据库)中处理大量行是否是个好主意?与语言相比,SP 的性能因素是什么(像 java 这样的服务器端,如果忽略获取和插入,而只关注迭代或操作行/结果集)
- BigQuery 是否允许对行进行迭代(从表中使用 select 语句)?否则会有什么解决方案?
提前致谢。
更新: 预期结果是计算员工在每个地区花费的时间。流程将执行:
- 查询以使用 (select * from location_history order by emp,district) 获取行
- 然后遍历每一行 cox 每隔一行依赖于前一行来计算在特定区域花费的时间
更新 2: 这应该分别计算每个员工的持续时间(将它们分组),而不是根据其他员工活动进行计算。因此,每个员工的每个第一个活动都将具有空/零持续时间,如果找到的下一个活动将从前一行进行计算。希望这是有道理的。
【问题讨论】:
-
您能否提供一个您希望从您提供的源数据示例中获得的结果示例(表格、报告等)?
-
我不确定我是否了解存储过程与您的目标之间的关系。为什么,为什么,你需要它?
-
为什么需要遍历行?
-
@al-dann 感谢您的回复。实际上,我在外部语言 cox 上关联了 SP,我想知道一种语言可以提供的迭代速度与 SP 迭代相比。加上这种顺序计算的准确解决方案应该是什么。我已经更新了我的问题
标签: sql database stored-procedures google-cloud-platform google-bigquery