Dav*_*542 2 bigdata google-bigquery google-cloud-platform
我试图通过使用偏移量获取特定行号来模拟 BigQuery 中的分页。看起来检索结果的时间随着偏移量的增加而逐渐减少,直到出现ResourcesExceeded错误。以下是一些查询示例:
是否有更好的方法可以在 BigQuery 中使用相当于“偏移”的功能,而不会导致性能下降?我知道这可能需要一个不存在的灵丹妙药,但我想知道是否有解决方法可以实现上述目标。如果没有,如果有人可以建议一种替代方法来获得上述内容(例如kinetica或cassandra或任何其他方法),我们将不胜感激。
BigQuery 等系统中的偏移量通过读取并丢弃所有结果直到偏移量来工作。
您需要使用列作为下限,以使引擎能够直接从键范围的该部分启动,您不能让引擎在查询中有效地随机查找。
例如,假设您想按费率代码、上车和下车时间查看出租车行程:
SELECT *
FROM [nyc-tlc:green.trips_2014]
ORDER BY rate_code ASC, pickup_datetime ASC, dropoff_datetime ASC
LIMIT 100
Run Code Online (Sandbox Code Playgroud)
如果您通过 OFFSET 100000 执行此操作,则需要 4 秒,第一行是:
pickup_datetime: 2014-01-06 04:11:34.000 UTC
dropoff_datetime: 2014-01-06 04:15:54.000 UTC
rate_code: 1
Run Code Online (Sandbox Code Playgroud)
如果我使用这些日期和速率值而不是偏移量,则查询只需要 2.9 秒:
SELECT *
FROM [nyc-tlc:green.trips_2014]
WHERE rate_code >= 1
AND pickup_datetime >= "2014-01-06 04:11:34.000 UTC"
AND dropoff_datetime >= "2014-01-06 04:15:54.000 UTC"
ORDER BY rate_code ASC, pickup_datetime ASC, dropoff_datetime ASC
limit 100
Run Code Online (Sandbox Code Playgroud)
那么这是什么意思?与其允许用户指定特定的结果#范围(例如,从 100000 开始的新行),不如以更自然的形式指定它(例如,2015 年 1 月 6 日开始的行程如何。
如果您想要变得更奇特并且确实需要允许用户特定的实际行号,您可以通过提前计算行范围来提高效率,例如查询所有内容一次并记住一小时开始时的行号每天(8760 个值),甚至分钟(525600 个值)。然后您可以使用它来更好地猜测有效的启动。查找给定行范围(例如在云数据存储中)的最接近的日期/分钟,然后将该用户查询转换为上面更高效的版本。
| 归档时间: |
|
| 查看次数: |
10318 次 |
| 最近记录: |