【问题标题】:How to paginate results in Legacy SQL如何在旧版 SQL 中对结果进行分页
【发布时间】:2018-03-20 10:58:58
【问题描述】:

我们正在对特定请求使用旧版 SQL。由于某些内部原因,我们不能使用标准 SQL。

我们想对结果进行分页,因为我们有很多行。像这样:

SELECT ... FROM ... LIMIT 10000 30000 // In standard SQL

但在旧版 SQL 偏移中不存在。那么如何做同样的工作呢?

编辑:

我不想订购。我想分页。例如,跳过 2000 行后获取 1000 行。一个带有偏移量的简单 LIMIT 子句,就像在传统 SQL 数据库中或在 BigQuery 标准 SQL 中一样。 为此,我想使用 Big Query Legacy SQL。

【问题讨论】:

  • 请澄清——您是否要获得排序结果?或者只是列出(通常未排序的)查询结果?您使用的是哪个客户端 API?
  • 编辑完成。 :)
  • 我询问您正在使用的 API 的原因(看起来您没有解决这个问题)是有明确的API/library support for pagination。或者你只是在使用 UI?从你的问题看不清楚。
  • 我会理解,对于第一页,您不会关心订单 - 但只要您要求第二页 - 您就会隐含地介绍订单。我看到的一个选项 - 你可能只需要第一页 - 所以它可能只是随机的 20000 行?还有什么其他选择?那么,您的真实用例是什么?为什么你认为在没有订单的情况下需要分页?
  • 好的。我想逐个阅读表格的联系方式。该表没有插入、更新和删除。所以从我的角度来看,订单在请求之间不会改变,不是吗?目前,我们只使用 UI,但最后,我们使用 Node.js 驱动程序。但是通过阅读文档,我并不真正了解分页在 Node 中是如何工作的。 :s 谢谢你的帮助。

标签: google-bigquery legacy-sql


【解决方案1】:

您所说的分页是通过tabledata.list API 完成的

根据您的问题和后续 cmets - 这可能是您要走的路。即使它不涉及查询。只是您选择的客户端中的 API 或相关方法。
pageToken 参数允许您对结果进行分页
顺便说一句,这种方法的另一个好处 - 它是免费的

如果您仍需要通过查询进行分页 - 您的选项是使用 ROW_NUMBER() 在这种情况下 - 您可以使用以下查询在临时表中准备数据

SELECT <needed fields>, ROW_NUMBER() OVER() num
FROM `project.dataset.table`

然后,您可以使用 num 对其进行分页

SELECT <needed fields>
FROM `project.dataset.temp`
WHERE num BETWEEN 10000 AND 30000 

【讨论】:

    猜你喜欢
    • 2019-12-23
    • 2018-04-20
    • 2019-06-24
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2021-05-22
    • 2015-02-16
    相关资源
    最近更新 更多