8

我正在尝试创建类似于 Google 的 BigQuery 仪表板的东西,除了预定义的查询/视图。我遇到的问题是对数据进行分页。

tabledata 端点支持分页,您可以指定起始索引或使用页面标记,允许我执行以下操作:

query_reply = table_data_job.list(projectId=settings.PROJECT_ID,
                                  datasetId=settings.DATASET_ID,
                                  tableId=table,
                                  startIndex=offset,
                                  maxResults=page_size).execute()

这样做的问题是我想运行特定的查询(或者至少对表数据结果进行排序)。

query_data = {'query': 'SELECT * FROM my_dataset.foo_table LIMIT %s' % page_size}
query_reply = job_collection.query(projectId=settings.PROJECT_ID,
                                   body=query_data).execute()

据我所知,没有办法用上面的代码做一个偏移量。这只是 BigQuery 不适合的东西吗?我想另一种选择是在内存中进行分页并处理较小的结果集?

4

2 回答 2

6

BigQuery 查询结果是表格。因此,您可以运行查询并从结果中获取目标表,然后使用 tabledata.list() api 对结果进行分页。或者,您可以从回复中获取作业 ID 并使用jobs.getQueryResults(),它具有分页支持。

于 2013-06-05T20:05:24.293 回答
1

您只能使用 ROW_NUMBER() 使用 SQL 实现分页

这是通用模板

SELECT  t.*
FROM (
SELECT 
1 AS one, 
[field], 
ROW_NUMBER() OVER(PARTITION BY one) AS rownum
FROM [table] ) t WHERE rownum BETWEEN X AND Y
于 2016-07-27T16:19:11.170 回答