在使用 BigQuery 进行分页查询时,可以选择使用 pageToken
还是 startIndex
来指定查询的起始位置。
pageToken
进行分页:from google.cloud import bigquery
def query_with_page_token(page_token=None):
client = bigquery.Client()
query_job = client.query(
"""
SELECT *
FROM `project.dataset.table`
ORDER BY column_name
""",
# 设置pageToken
page_token=page_token
)
results = query_job.result()
# 处理查询结果
for row in results:
# 处理每一行数据
# 获取下一页的pageToken
next_page_token = results.next_page_token
return next_page_token
# 第一次查询
next_page_token = query_with_page_token()
# 后续查询
while next_page_token is not None:
next_page_token = query_with_page_token(page_token=next_page_token)
startIndex
进行分页:from google.cloud import bigquery
def query_with_start_index(start_index):
client = bigquery.Client()
query_job = client.query(
"""
SELECT *
FROM `project.dataset.table`
ORDER BY column_name
LIMIT 100
OFFSET {}
""".format(start_index)
)
results = query_job.result()
# 处理查询结果
for row in results:
# 处理每一行数据
return results.total_rows
# 第一次查询
start_index = 0
total_rows = query_with_start_index(start_index)
# 后续查询
while start_index < total_rows:
start_index += 100
query_with_start_index(start_index)
使用 pageToken
的好处是可以直接从上一个查询结果中获取下一页的 pageToken
,不需要手动计算 startIndex
。但是,如果查询结果很大,需要多次调用查询函数,可能会导致查询时间较长。
使用 startIndex
的好处是可以直接指定查询的起始位置和每页的记录数,比较直观。但是,需要手动计算每次查询的起始位置和记录数,需要注意边界条件。
根据具体的需求和使用场景,选择合适的分页方式。
上一篇:BigQuery分析中导入问题