diff --git a/system_tests/bigquery.py b/system_tests/bigquery.py
index <HASH>..<HASH> 100644
--- a/system_tests/bigquery.py
+++ b/system_tests/bigquery.py
@@ -29,11 +29,17 @@ from system_test_utils import unique_resource_id
 
 DATASET_NAME = 'system_tests' + unique_resource_id()
 
+
+def _rate_limit_exceeded(forbidden):
+    """Predicate: pass only exceptions with 'rateLimitExceeded' as reason."""
+    return any(error['reason'] == 'rateLimitExceeded'
+               for error in forbidden._errors)
+
 # We need to wait to stay within the rate limits.
 # The alternative outcome is a 403 Forbidden response from upstream, which
 # they return instead of the more appropriate 429.
 # See: https://cloud.google.com/bigquery/quota-policy
-retry_403 = RetryErrors(Forbidden)
+retry_403 = RetryErrors(Forbidden, error_predicate=_rate_limit_exceeded)
 
 
 class Config(object):
Add error predicate to 'retry_<I>'.

Exclude Forbidden exceptions which do not have 'rateLimitExceed' as the
reason for one of their errors.

Addresses:
<URL>