Skip to content

Commit 27e7abd

Browse files
shubha-rajantswast
authored andcommitted
Add max_results parameter to QueryJob.result(). (#9167)
* added max_results param to QueryJob.result() * added test to check that max_results param appears in tabledata.list call arguments
1 parent 0b663e4 commit 27e7abd

2 files changed

Lines changed: 45 additions & 2 deletions

File tree

bigquery/google/cloud/bigquery/job.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2905,7 +2905,9 @@ def _begin(self, client=None, retry=DEFAULT_RETRY):
29052905
exc.message += self._format_for_exception(self.query, self.job_id)
29062906
raise
29072907

2908-
def result(self, timeout=None, page_size=None, retry=DEFAULT_RETRY):
2908+
def result(
2909+
self, timeout=None, page_size=None, retry=DEFAULT_RETRY, max_results=None
2910+
):
29092911
"""Start the job and wait for it to complete and get the result.
29102912
29112913
Args:
@@ -2956,7 +2958,9 @@ def result(self, timeout=None, page_size=None, retry=DEFAULT_RETRY):
29562958
dest_table_ref = self.destination
29572959
dest_table = Table(dest_table_ref, schema=schema)
29582960
dest_table._properties["numRows"] = self._query_results.total_rows
2959-
rows = self._client.list_rows(dest_table, page_size=page_size, retry=retry)
2961+
rows = self._client.list_rows(
2962+
dest_table, page_size=page_size, retry=retry, max_results=max_results
2963+
)
29602964
rows._preserve_order = _contains_order_by(self.query)
29612965
return rows
29622966

bigquery/tests/unit/test_job.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4133,6 +4133,45 @@ def test_result(self):
41334133
# on the response from tabledata.list.
41344134
self.assertEqual(result.total_rows, 1)
41354135

4136+
def test_result_with_max_results(self):
4137+
from google.cloud.bigquery.table import RowIterator
4138+
4139+
query_resource = {
4140+
"jobComplete": True,
4141+
"jobReference": {"projectId": self.PROJECT, "jobId": self.JOB_ID},
4142+
"schema": {"fields": [{"name": "col1", "type": "STRING"}]},
4143+
"totalRows": "5",
4144+
}
4145+
tabledata_resource = {
4146+
"totalRows": "5",
4147+
"pageToken": None,
4148+
"rows": [
4149+
{"f": [{"v": "abc"}]},
4150+
{"f": [{"v": "def"}]},
4151+
{"f": [{"v": "ghi"}]},
4152+
],
4153+
}
4154+
connection = _make_connection(query_resource, tabledata_resource)
4155+
client = _make_client(self.PROJECT, connection=connection)
4156+
resource = self._make_resource(ended=True)
4157+
job = self._get_target_class().from_api_repr(resource, client)
4158+
4159+
max_results = 3
4160+
4161+
result = job.result(max_results=max_results)
4162+
4163+
self.assertIsInstance(result, RowIterator)
4164+
self.assertEqual(result.total_rows, 5)
4165+
4166+
rows = list(result)
4167+
4168+
self.assertEqual(len(rows), 3)
4169+
self.assertEqual(len(connection.api_request.call_args_list), 2)
4170+
tabledata_list_request = connection.api_request.call_args_list[1]
4171+
self.assertEqual(
4172+
tabledata_list_request[1]["query_params"]["maxResults"], max_results
4173+
)
4174+
41364175
def test_result_w_empty_schema(self):
41374176
from google.cloud.bigquery.table import _EmptyRowIterator
41384177

0 commit comments

Comments
 (0)