google-cloud-bigquery 3.31.0__tar.gz → 3.32.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {google_cloud_bigquery-3.31.0/google_cloud_bigquery.egg-info → google_cloud_bigquery-3.32.0}/PKG-INFO +2 -2
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/_job_helpers.py +42 -1
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/client.py +3 -12
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/dataset.py +210 -16
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/enums.py +20 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/job/query.py +15 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/table.py +177 -26
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/version.py +1 -1
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0/google_cloud_bigquery.egg-info}/PKG-INFO +2 -2
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google_cloud_bigquery.egg-info/requires.txt +1 -1
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/pyproject.toml +1 -1
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/system/test_pandas.py +1 -6
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/job/test_query_config.py +5 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test__job_helpers.py +12 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_dataset.py +507 -14
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_dbapi_cursor.py +1 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_job_retry.py +13 -5
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_table.py +169 -8
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/LICENSE +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/MANIFEST.in +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/README.rst +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/_helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/_http.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/_pandas_helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/_pyarrow_helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/_tqdm_helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/_versions_helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/dbapi/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/dbapi/_helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/dbapi/connection.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/dbapi/cursor.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/dbapi/exceptions.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/dbapi/types.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/encryption_configuration.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/exceptions.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/external_config.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/format_options.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/iam.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/job/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/job/base.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/job/copy_.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/job/extract.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/job/load.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/magics/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/magics/line_arg_parser/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/magics/line_arg_parser/exceptions.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/magics/line_arg_parser/lexer.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/magics/line_arg_parser/parser.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/magics/line_arg_parser/visitors.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/magics/magics.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/model.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/opentelemetry_tracing.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/py.typed +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/query.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/retry.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/routine/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/routine/routine.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/schema.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/standard_sql.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery_v2/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery_v2/types/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery_v2/types/encryption_config.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery_v2/types/model.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery_v2/types/model_reference.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery_v2/types/standard_sql.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery_v2/types/table_reference.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google_cloud_bigquery.egg-info/SOURCES.txt +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google_cloud_bigquery.egg-info/dependency_links.txt +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google_cloud_bigquery.egg-info/top_level.txt +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/setup.cfg +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/setup.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/data/characters.json +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/data/characters.jsonl +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/data/colors.avro +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/data/numeric_38_12.parquet +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/data/people.csv +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/data/scalars.csv +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/data/scalars.jsonl +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/data/scalars_extreme.jsonl +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/data/scalars_schema.json +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/data/scalars_schema_csv.json +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/data/schema.json +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/scrub_datasets.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/system/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/system/conftest.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/system/helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/system/test_arrow.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/system/test_client.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/system/test_job_retry.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/system/test_list_rows.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/system/test_magics.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/system/test_query.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/system/test_structs.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/_helpers/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/_helpers/test_cell_data_parser.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/_helpers/test_data_frame_cell_data_parser.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/_helpers/test_scalar_query_param_parser.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/conftest.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/job/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/job/helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/job/test_base.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/job/test_copy.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/job/test_extract.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/job/test_load.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/job/test_load_config.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/job/test_query.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/job/test_query_pandas.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/job/test_query_stats.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/line_arg_parser/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/line_arg_parser/test_lexer.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/line_arg_parser/test_parser.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/line_arg_parser/test_visitors.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/model/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/model/test_model.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/model/test_model_reference.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/routine/__init__.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/routine/test_remote_function_options.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/routine/test_routine.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/routine/test_routine_argument.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/routine/test_routine_reference.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test__helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test__http.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test__pandas_helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test__pyarrow_helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test__versions_helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_client.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_create_dataset.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_dbapi__helpers.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_dbapi_connection.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_dbapi_types.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_delete_dataset.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_encryption_configuration.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_external_config.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_format_options.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_legacy_types.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_list_datasets.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_list_jobs.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_list_models.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_list_projects.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_list_routines.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_list_tables.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_magics.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_opentelemetry_tracing.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_packaging.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_query.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_retry.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_schema.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_signature_compatibility.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_standard_sql_types.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_table_arrow.py +0 -0
- {google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/tests/unit/test_table_pandas.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: google-cloud-bigquery
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.32.0
|
|
4
4
|
Summary: Google BigQuery API client library
|
|
5
5
|
Author-email: Google LLC <googleapis-packages@google.com>
|
|
6
6
|
License: Apache 2.0
|
|
@@ -33,7 +33,7 @@ Requires-Dist: grpcio<2.0.0,>=1.47.0; extra == "bqstorage"
|
|
|
33
33
|
Requires-Dist: grpcio<2.0.0,>=1.49.1; python_version >= "3.11" and extra == "bqstorage"
|
|
34
34
|
Requires-Dist: pyarrow>=4.0.0; extra == "bqstorage"
|
|
35
35
|
Provides-Extra: pandas
|
|
36
|
-
Requires-Dist: pandas>=1.
|
|
36
|
+
Requires-Dist: pandas>=1.3.0; extra == "pandas"
|
|
37
37
|
Requires-Dist: pandas-gbq>=0.26.1; extra == "pandas"
|
|
38
38
|
Requires-Dist: grpcio<2.0.0,>=1.47.0; extra == "pandas"
|
|
39
39
|
Requires-Dist: grpcio<2.0.0,>=1.49.1; python_version >= "3.11" and extra == "pandas"
|
{google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/_job_helpers.py
RENAMED
|
@@ -39,7 +39,9 @@ import copy
|
|
|
39
39
|
import functools
|
|
40
40
|
import os
|
|
41
41
|
import uuid
|
|
42
|
+
import textwrap
|
|
42
43
|
from typing import Any, Dict, Optional, TYPE_CHECKING, Union
|
|
44
|
+
import warnings
|
|
43
45
|
|
|
44
46
|
import google.api_core.exceptions as core_exceptions
|
|
45
47
|
from google.api_core import retry as retries
|
|
@@ -198,6 +200,44 @@ def _validate_job_config(request_body: Dict[str, Any], invalid_key: str):
|
|
|
198
200
|
raise ValueError(f"got unexpected key {repr(invalid_key)} in job_config")
|
|
199
201
|
|
|
200
202
|
|
|
203
|
+
def validate_job_retry(job_id: Optional[str], job_retry: Optional[retries.Retry]):
|
|
204
|
+
"""Catch common mistakes, such as setting a job_id and job_retry at the same
|
|
205
|
+
time.
|
|
206
|
+
"""
|
|
207
|
+
if job_id is not None and job_retry is not None:
|
|
208
|
+
# TODO(tswast): To avoid breaking changes but still allow a default
|
|
209
|
+
# query job retry, we currently only raise if they explicitly set a
|
|
210
|
+
# job_retry other than the default. In a future version, we may want to
|
|
211
|
+
# avoid this check for DEFAULT_JOB_RETRY and always raise.
|
|
212
|
+
if job_retry is not google.cloud.bigquery.retry.DEFAULT_JOB_RETRY:
|
|
213
|
+
raise TypeError(
|
|
214
|
+
textwrap.dedent(
|
|
215
|
+
"""
|
|
216
|
+
`job_retry` was provided, but the returned job is
|
|
217
|
+
not retryable, because a custom `job_id` was
|
|
218
|
+
provided. To customize the job ID and allow for job
|
|
219
|
+
retries, set job_id_prefix, instead.
|
|
220
|
+
"""
|
|
221
|
+
).strip()
|
|
222
|
+
)
|
|
223
|
+
else:
|
|
224
|
+
warnings.warn(
|
|
225
|
+
textwrap.dedent(
|
|
226
|
+
"""
|
|
227
|
+
job_retry must be explicitly set to None if job_id is set.
|
|
228
|
+
BigQuery cannot retry a failed job by using the exact
|
|
229
|
+
same ID. Setting job_id without explicitly disabling
|
|
230
|
+
job_retry will raise an error in the future. To avoid this
|
|
231
|
+
warning, either use job_id_prefix instead (preferred) or
|
|
232
|
+
set job_retry=None.
|
|
233
|
+
"""
|
|
234
|
+
).strip(),
|
|
235
|
+
category=FutureWarning,
|
|
236
|
+
# user code -> client.query / client.query_and_wait -> validate_job_retry
|
|
237
|
+
stacklevel=3,
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
|
|
201
241
|
def _to_query_request(
|
|
202
242
|
job_config: Optional[job.QueryJobConfig] = None,
|
|
203
243
|
*,
|
|
@@ -308,7 +348,7 @@ def query_jobs_query(
|
|
|
308
348
|
project: str,
|
|
309
349
|
retry: retries.Retry,
|
|
310
350
|
timeout: Optional[float],
|
|
311
|
-
job_retry: retries.Retry,
|
|
351
|
+
job_retry: Optional[retries.Retry],
|
|
312
352
|
) -> job.QueryJob:
|
|
313
353
|
"""Initiate a query using jobs.query with jobCreationMode=JOB_CREATION_REQUIRED.
|
|
314
354
|
|
|
@@ -564,6 +604,7 @@ def _supported_by_jobs_query(request_body: Dict[str, Any]) -> bool:
|
|
|
564
604
|
"maximumBytesBilled",
|
|
565
605
|
"requestId",
|
|
566
606
|
"createSession",
|
|
607
|
+
"writeIncrementalResults",
|
|
567
608
|
}
|
|
568
609
|
|
|
569
610
|
unsupported_keys = request_keys - keys_allowlist
|
{google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/client.py
RENAMED
|
@@ -3388,7 +3388,7 @@ class Client(ClientWithProject):
|
|
|
3388
3388
|
project: Optional[str] = None,
|
|
3389
3389
|
retry: retries.Retry = DEFAULT_RETRY,
|
|
3390
3390
|
timeout: TimeoutType = DEFAULT_TIMEOUT,
|
|
3391
|
-
job_retry: retries.Retry = DEFAULT_JOB_RETRY,
|
|
3391
|
+
job_retry: Optional[retries.Retry] = DEFAULT_JOB_RETRY,
|
|
3392
3392
|
api_method: Union[str, enums.QueryApiMethod] = enums.QueryApiMethod.INSERT,
|
|
3393
3393
|
) -> job.QueryJob:
|
|
3394
3394
|
"""Run a SQL query.
|
|
@@ -3455,18 +3455,9 @@ class Client(ClientWithProject):
|
|
|
3455
3455
|
class, or if both ``job_id`` and non-``None`` non-default
|
|
3456
3456
|
``job_retry`` are provided.
|
|
3457
3457
|
"""
|
|
3458
|
-
|
|
3459
|
-
if (
|
|
3460
|
-
job_id_given
|
|
3461
|
-
and job_retry is not None
|
|
3462
|
-
and job_retry is not DEFAULT_JOB_RETRY
|
|
3463
|
-
):
|
|
3464
|
-
raise TypeError(
|
|
3465
|
-
"`job_retry` was provided, but the returned job is"
|
|
3466
|
-
" not retryable, because a custom `job_id` was"
|
|
3467
|
-
" provided."
|
|
3468
|
-
)
|
|
3458
|
+
_job_helpers.validate_job_retry(job_id, job_retry)
|
|
3469
3459
|
|
|
3460
|
+
job_id_given = job_id is not None
|
|
3470
3461
|
if job_id_given and api_method == enums.QueryApiMethod.QUERY:
|
|
3471
3462
|
raise TypeError(
|
|
3472
3463
|
"`job_id` was provided, but the 'QUERY' `api_method` was requested."
|
{google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/dataset.py
RENAMED
|
@@ -19,6 +19,7 @@ from __future__ import absolute_import
|
|
|
19
19
|
import copy
|
|
20
20
|
|
|
21
21
|
import typing
|
|
22
|
+
from typing import Optional, List, Dict, Any, Union
|
|
22
23
|
|
|
23
24
|
import google.cloud._helpers # type: ignore
|
|
24
25
|
|
|
@@ -29,8 +30,6 @@ from google.cloud.bigquery.table import Table, TableReference
|
|
|
29
30
|
from google.cloud.bigquery.encryption_configuration import EncryptionConfiguration
|
|
30
31
|
from google.cloud.bigquery import external_config
|
|
31
32
|
|
|
32
|
-
from typing import Optional, List, Dict, Any, Union
|
|
33
|
-
|
|
34
33
|
|
|
35
34
|
def _get_table_reference(self, table_id: str) -> TableReference:
|
|
36
35
|
"""Constructs a TableReference.
|
|
@@ -299,12 +298,15 @@ class AccessEntry(object):
|
|
|
299
298
|
role: Optional[str] = None,
|
|
300
299
|
entity_type: Optional[str] = None,
|
|
301
300
|
entity_id: Optional[Union[Dict[str, Any], str]] = None,
|
|
301
|
+
**kwargs,
|
|
302
302
|
):
|
|
303
|
-
self._properties = {}
|
|
303
|
+
self._properties: Dict[str, Any] = {}
|
|
304
304
|
if entity_type is not None:
|
|
305
305
|
self._properties[entity_type] = entity_id
|
|
306
306
|
self._properties["role"] = role
|
|
307
|
-
self._entity_type = entity_type
|
|
307
|
+
self._entity_type: Optional[str] = entity_type
|
|
308
|
+
for prop, val in kwargs.items():
|
|
309
|
+
setattr(self, prop, val)
|
|
308
310
|
|
|
309
311
|
@property
|
|
310
312
|
def role(self) -> Optional[str]:
|
|
@@ -331,6 +333,9 @@ class AccessEntry(object):
|
|
|
331
333
|
if isinstance(value, str):
|
|
332
334
|
value = DatasetReference.from_string(value).to_api_repr()
|
|
333
335
|
|
|
336
|
+
if isinstance(value, DatasetReference):
|
|
337
|
+
value = value.to_api_repr()
|
|
338
|
+
|
|
334
339
|
if isinstance(value, (Dataset, DatasetListItem)):
|
|
335
340
|
value = value.reference.to_api_repr()
|
|
336
341
|
|
|
@@ -438,15 +443,65 @@ class AccessEntry(object):
|
|
|
438
443
|
def special_group(self, value):
|
|
439
444
|
self._properties["specialGroup"] = value
|
|
440
445
|
|
|
446
|
+
@property
|
|
447
|
+
def condition(self) -> Optional["Condition"]:
|
|
448
|
+
"""Optional[Condition]: The IAM condition associated with this entry."""
|
|
449
|
+
value = typing.cast(Dict[str, Any], self._properties.get("condition"))
|
|
450
|
+
return Condition.from_api_repr(value) if value else None
|
|
451
|
+
|
|
452
|
+
@condition.setter
|
|
453
|
+
def condition(self, value: Union["Condition", dict, None]):
|
|
454
|
+
"""Set the IAM condition for this entry."""
|
|
455
|
+
if value is None:
|
|
456
|
+
self._properties["condition"] = None
|
|
457
|
+
elif isinstance(value, Condition):
|
|
458
|
+
self._properties["condition"] = value.to_api_repr()
|
|
459
|
+
elif isinstance(value, dict):
|
|
460
|
+
self._properties["condition"] = value
|
|
461
|
+
else:
|
|
462
|
+
raise TypeError("condition must be a Condition object, dict, or None")
|
|
463
|
+
|
|
441
464
|
@property
|
|
442
465
|
def entity_type(self) -> Optional[str]:
|
|
443
466
|
"""The entity_type of the entry."""
|
|
467
|
+
|
|
468
|
+
# The api_repr for an AccessEntry object is expected to be a dict with
|
|
469
|
+
# only a few keys. Two keys that may be present are role and condition.
|
|
470
|
+
# Any additional key is going to have one of ~eight different names:
|
|
471
|
+
# userByEmail, groupByEmail, domain, dataset, specialGroup, view,
|
|
472
|
+
# routine, iamMember
|
|
473
|
+
|
|
474
|
+
# if self._entity_type is None, see if it needs setting
|
|
475
|
+
# i.e. is there a key: value pair that should be associated with
|
|
476
|
+
# entity_type and entity_id?
|
|
477
|
+
if self._entity_type is None:
|
|
478
|
+
resource = self._properties.copy()
|
|
479
|
+
# we are empyting the dict to get to the last `key: value`` pair
|
|
480
|
+
# so we don't keep these first entries
|
|
481
|
+
_ = resource.pop("role", None)
|
|
482
|
+
_ = resource.pop("condition", None)
|
|
483
|
+
|
|
484
|
+
try:
|
|
485
|
+
# we only need entity_type, because entity_id gets set elsewhere.
|
|
486
|
+
entity_type, _ = resource.popitem()
|
|
487
|
+
except KeyError:
|
|
488
|
+
entity_type = None
|
|
489
|
+
|
|
490
|
+
self._entity_type = entity_type
|
|
491
|
+
|
|
444
492
|
return self._entity_type
|
|
445
493
|
|
|
446
494
|
@property
|
|
447
495
|
def entity_id(self) -> Optional[Union[Dict[str, Any], str]]:
|
|
448
496
|
"""The entity_id of the entry."""
|
|
449
|
-
|
|
497
|
+
if self.entity_type:
|
|
498
|
+
entity_type = self.entity_type
|
|
499
|
+
else:
|
|
500
|
+
return None
|
|
501
|
+
return typing.cast(
|
|
502
|
+
Optional[Union[Dict[str, Any], str]],
|
|
503
|
+
self._properties.get(entity_type, None),
|
|
504
|
+
)
|
|
450
505
|
|
|
451
506
|
def __eq__(self, other):
|
|
452
507
|
if not isinstance(other, AccessEntry):
|
|
@@ -465,7 +520,16 @@ class AccessEntry(object):
|
|
|
465
520
|
Returns:
|
|
466
521
|
Tuple: The contents of this :class:`~google.cloud.bigquery.dataset.AccessEntry`.
|
|
467
522
|
"""
|
|
523
|
+
|
|
468
524
|
properties = self._properties.copy()
|
|
525
|
+
|
|
526
|
+
# Dicts are not hashable.
|
|
527
|
+
# Convert condition to a hashable datatype(s)
|
|
528
|
+
condition = properties.get("condition")
|
|
529
|
+
if isinstance(condition, dict):
|
|
530
|
+
condition_key = tuple(sorted(condition.items()))
|
|
531
|
+
properties["condition"] = condition_key
|
|
532
|
+
|
|
469
533
|
prop_tup = tuple(sorted(properties.items()))
|
|
470
534
|
return (self.role, self._entity_type, self.entity_id, prop_tup)
|
|
471
535
|
|
|
@@ -492,19 +556,11 @@ class AccessEntry(object):
|
|
|
492
556
|
Returns:
|
|
493
557
|
google.cloud.bigquery.dataset.AccessEntry:
|
|
494
558
|
Access entry parsed from ``resource``.
|
|
495
|
-
|
|
496
|
-
Raises:
|
|
497
|
-
ValueError:
|
|
498
|
-
If the resource has more keys than ``role`` and one additional
|
|
499
|
-
key.
|
|
500
559
|
"""
|
|
501
|
-
entry = resource.copy()
|
|
502
|
-
role = entry.pop("role", None)
|
|
503
|
-
entity_type, entity_id = entry.popitem()
|
|
504
|
-
if len(entry) != 0:
|
|
505
|
-
raise ValueError("Entry has unexpected keys remaining.", entry)
|
|
506
560
|
|
|
507
|
-
|
|
561
|
+
access_entry = cls()
|
|
562
|
+
access_entry._properties = resource.copy()
|
|
563
|
+
return access_entry
|
|
508
564
|
|
|
509
565
|
|
|
510
566
|
class Dataset(object):
|
|
@@ -533,6 +589,7 @@ class Dataset(object):
|
|
|
533
589
|
"default_rounding_mode": "defaultRoundingMode",
|
|
534
590
|
"resource_tags": "resourceTags",
|
|
535
591
|
"external_catalog_dataset_options": "externalCatalogDatasetOptions",
|
|
592
|
+
"access_policy_version": "accessPolicyVersion",
|
|
536
593
|
}
|
|
537
594
|
|
|
538
595
|
def __init__(self, dataset_ref) -> None:
|
|
@@ -923,6 +980,16 @@ class Dataset(object):
|
|
|
923
980
|
self._PROPERTY_TO_API_FIELD["external_catalog_dataset_options"]
|
|
924
981
|
] = (value.to_api_repr() if value is not None else None)
|
|
925
982
|
|
|
983
|
+
@property
|
|
984
|
+
def access_policy_version(self):
|
|
985
|
+
return self._properties.get("accessPolicyVersion")
|
|
986
|
+
|
|
987
|
+
@access_policy_version.setter
|
|
988
|
+
def access_policy_version(self, value):
|
|
989
|
+
if not isinstance(value, int) and value is not None:
|
|
990
|
+
raise ValueError("Pass an integer, or None")
|
|
991
|
+
self._properties["accessPolicyVersion"] = value
|
|
992
|
+
|
|
926
993
|
@classmethod
|
|
927
994
|
def from_string(cls, full_dataset_id: str) -> "Dataset":
|
|
928
995
|
"""Construct a dataset from fully-qualified dataset ID.
|
|
@@ -1074,3 +1141,130 @@ class DatasetListItem(object):
|
|
|
1074
1141
|
model = _get_model_reference
|
|
1075
1142
|
|
|
1076
1143
|
routine = _get_routine_reference
|
|
1144
|
+
|
|
1145
|
+
|
|
1146
|
+
class Condition(object):
|
|
1147
|
+
"""Represents a textual expression in the Common Expression Language (CEL) syntax.
|
|
1148
|
+
|
|
1149
|
+
Typically used for filtering or policy rules, such as in IAM Conditions
|
|
1150
|
+
or BigQuery row/column access policies.
|
|
1151
|
+
|
|
1152
|
+
See:
|
|
1153
|
+
https://cloud.google.com/iam/docs/reference/rest/Shared.Types/Expr
|
|
1154
|
+
https://github.com/google/cel-spec
|
|
1155
|
+
|
|
1156
|
+
Args:
|
|
1157
|
+
expression (str):
|
|
1158
|
+
The condition expression string using CEL syntax. This is required.
|
|
1159
|
+
Example: ``resource.type == "compute.googleapis.com/Instance"``
|
|
1160
|
+
title (Optional[str]):
|
|
1161
|
+
An optional title for the condition, providing a short summary.
|
|
1162
|
+
Example: ``"Request is for a GCE instance"``
|
|
1163
|
+
description (Optional[str]):
|
|
1164
|
+
An optional description of the condition, providing a detailed explanation.
|
|
1165
|
+
Example: ``"This condition checks whether the resource is a GCE instance."``
|
|
1166
|
+
"""
|
|
1167
|
+
|
|
1168
|
+
def __init__(
|
|
1169
|
+
self,
|
|
1170
|
+
expression: str,
|
|
1171
|
+
title: Optional[str] = None,
|
|
1172
|
+
description: Optional[str] = None,
|
|
1173
|
+
):
|
|
1174
|
+
self._properties: Dict[str, Any] = {}
|
|
1175
|
+
# Use setters to initialize properties, which also handle validation
|
|
1176
|
+
self.expression = expression
|
|
1177
|
+
self.title = title
|
|
1178
|
+
self.description = description
|
|
1179
|
+
|
|
1180
|
+
@property
|
|
1181
|
+
def title(self) -> Optional[str]:
|
|
1182
|
+
"""Optional[str]: The title for the condition."""
|
|
1183
|
+
return self._properties.get("title")
|
|
1184
|
+
|
|
1185
|
+
@title.setter
|
|
1186
|
+
def title(self, value: Optional[str]):
|
|
1187
|
+
if value is not None and not isinstance(value, str):
|
|
1188
|
+
raise ValueError("Pass a string for title, or None")
|
|
1189
|
+
self._properties["title"] = value
|
|
1190
|
+
|
|
1191
|
+
@property
|
|
1192
|
+
def description(self) -> Optional[str]:
|
|
1193
|
+
"""Optional[str]: The description for the condition."""
|
|
1194
|
+
return self._properties.get("description")
|
|
1195
|
+
|
|
1196
|
+
@description.setter
|
|
1197
|
+
def description(self, value: Optional[str]):
|
|
1198
|
+
if value is not None and not isinstance(value, str):
|
|
1199
|
+
raise ValueError("Pass a string for description, or None")
|
|
1200
|
+
self._properties["description"] = value
|
|
1201
|
+
|
|
1202
|
+
@property
|
|
1203
|
+
def expression(self) -> str:
|
|
1204
|
+
"""str: The expression string for the condition."""
|
|
1205
|
+
|
|
1206
|
+
# Cast assumes expression is always set due to __init__ validation
|
|
1207
|
+
return typing.cast(str, self._properties.get("expression"))
|
|
1208
|
+
|
|
1209
|
+
@expression.setter
|
|
1210
|
+
def expression(self, value: str):
|
|
1211
|
+
if not isinstance(value, str):
|
|
1212
|
+
raise ValueError("Pass a non-empty string for expression")
|
|
1213
|
+
if not value:
|
|
1214
|
+
raise ValueError("expression cannot be an empty string")
|
|
1215
|
+
self._properties["expression"] = value
|
|
1216
|
+
|
|
1217
|
+
def to_api_repr(self) -> Dict[str, Any]:
|
|
1218
|
+
"""Construct the API resource representation of this Condition."""
|
|
1219
|
+
return self._properties
|
|
1220
|
+
|
|
1221
|
+
@classmethod
|
|
1222
|
+
def from_api_repr(cls, resource: Dict[str, Any]) -> "Condition":
|
|
1223
|
+
"""Factory: construct a Condition instance given its API representation."""
|
|
1224
|
+
|
|
1225
|
+
# Ensure required fields are present in the resource if necessary
|
|
1226
|
+
if "expression" not in resource:
|
|
1227
|
+
raise ValueError("API representation missing required 'expression' field.")
|
|
1228
|
+
|
|
1229
|
+
return cls(
|
|
1230
|
+
expression=resource["expression"],
|
|
1231
|
+
title=resource.get("title"),
|
|
1232
|
+
description=resource.get("description"),
|
|
1233
|
+
)
|
|
1234
|
+
|
|
1235
|
+
def __eq__(self, other: object) -> bool:
|
|
1236
|
+
"""Check for equality based on expression, title, and description."""
|
|
1237
|
+
if not isinstance(other, Condition):
|
|
1238
|
+
return NotImplemented
|
|
1239
|
+
return self._key() == other._key()
|
|
1240
|
+
|
|
1241
|
+
def _key(self):
|
|
1242
|
+
"""A tuple key that uniquely describes this field.
|
|
1243
|
+
Used to compute this instance's hashcode and evaluate equality.
|
|
1244
|
+
Returns:
|
|
1245
|
+
Tuple: The contents of this :class:`~google.cloud.bigquery.dataset.AccessEntry`.
|
|
1246
|
+
"""
|
|
1247
|
+
|
|
1248
|
+
properties = self._properties.copy()
|
|
1249
|
+
|
|
1250
|
+
# Dicts are not hashable.
|
|
1251
|
+
# Convert object to a hashable datatype(s)
|
|
1252
|
+
prop_tup = tuple(sorted(properties.items()))
|
|
1253
|
+
return prop_tup
|
|
1254
|
+
|
|
1255
|
+
def __ne__(self, other: object) -> bool:
|
|
1256
|
+
"""Check for inequality."""
|
|
1257
|
+
return not self == other
|
|
1258
|
+
|
|
1259
|
+
def __hash__(self) -> int:
|
|
1260
|
+
"""Generate a hash based on expression, title, and description."""
|
|
1261
|
+
return hash(self._key())
|
|
1262
|
+
|
|
1263
|
+
def __repr__(self) -> str:
|
|
1264
|
+
"""Return a string representation of the Condition object."""
|
|
1265
|
+
parts = [f"expression={self.expression!r}"]
|
|
1266
|
+
if self.title is not None:
|
|
1267
|
+
parts.append(f"title={self.title!r}")
|
|
1268
|
+
if self.description is not None:
|
|
1269
|
+
parts.append(f"description={self.description!r}")
|
|
1270
|
+
return f"Condition({', '.join(parts)})"
|
{google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/enums.py
RENAMED
|
@@ -338,6 +338,10 @@ class WriteDisposition(object):
|
|
|
338
338
|
WRITE_TRUNCATE = "WRITE_TRUNCATE"
|
|
339
339
|
"""If the table already exists, BigQuery overwrites the table data."""
|
|
340
340
|
|
|
341
|
+
WRITE_TRUNCATE_DATA = "WRITE_TRUNCATE_DATA"
|
|
342
|
+
"""For existing tables, truncate data but preserve existing schema
|
|
343
|
+
and constraints."""
|
|
344
|
+
|
|
341
345
|
WRITE_EMPTY = "WRITE_EMPTY"
|
|
342
346
|
"""If the table already exists and contains data, a 'duplicate' error is
|
|
343
347
|
returned in the job result."""
|
|
@@ -387,3 +391,19 @@ class RoundingMode(str, enum.Enum):
|
|
|
387
391
|
ROUNDING_MODE_UNSPECIFIED = enum.auto()
|
|
388
392
|
ROUND_HALF_AWAY_FROM_ZERO = enum.auto()
|
|
389
393
|
ROUND_HALF_EVEN = enum.auto()
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
class BigLakeFileFormat(object):
|
|
397
|
+
FILE_FORMAT_UNSPECIFIED = "FILE_FORMAT_UNSPECIFIED"
|
|
398
|
+
"""The default unspecified value."""
|
|
399
|
+
|
|
400
|
+
PARQUET = "PARQUET"
|
|
401
|
+
"""Apache Parquet format."""
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
class BigLakeTableFormat(object):
|
|
405
|
+
TABLE_FORMAT_UNSPECIFIED = "TABLE_FORMAT_UNSPECIFIED"
|
|
406
|
+
"""The default unspecified value."""
|
|
407
|
+
|
|
408
|
+
ICEBERG = "ICEBERG"
|
|
409
|
+
"""Apache Iceberg format."""
|
{google_cloud_bigquery-3.31.0 → google_cloud_bigquery-3.32.0}/google/cloud/bigquery/job/query.py
RENAMED
|
@@ -674,6 +674,21 @@ class QueryJobConfig(_JobConfig):
|
|
|
674
674
|
def write_disposition(self, value):
|
|
675
675
|
self._set_sub_prop("writeDisposition", value)
|
|
676
676
|
|
|
677
|
+
@property
|
|
678
|
+
def write_incremental_results(self) -> Optional[bool]:
|
|
679
|
+
"""This is only supported for a SELECT query using a temporary table.
|
|
680
|
+
|
|
681
|
+
If set, the query is allowed to write results incrementally to the temporary result
|
|
682
|
+
table. This may incur a performance penalty. This option cannot be used with Legacy SQL.
|
|
683
|
+
|
|
684
|
+
This feature is not generally available.
|
|
685
|
+
"""
|
|
686
|
+
return self._get_sub_prop("writeIncrementalResults")
|
|
687
|
+
|
|
688
|
+
@write_incremental_results.setter
|
|
689
|
+
def write_incremental_results(self, value):
|
|
690
|
+
self._set_sub_prop("writeIncrementalResults", value)
|
|
691
|
+
|
|
677
692
|
@property
|
|
678
693
|
def table_definitions(self):
|
|
679
694
|
"""Dict[str, google.cloud.bigquery.external_config.ExternalConfig]:
|