@@ -210,6 +210,9 @@ class Client(ClientWithProject):
210210 default_query_job_config (Optional[google.cloud.bigquery.job.QueryJobConfig]):
211211 Default ``QueryJobConfig``.
212212 Will be merged into job configs passed into the ``query`` method.
213+ default_load_job_config (Optional[google.cloud.bigquery.job.LoadJobConfig]):
214+ Default ``LoadJobConfig``.
215+ Will be merged into job configs passed into the ``load_table_*`` methods.
213216 client_info (Optional[google.api_core.client_info.ClientInfo]):
214217 The client info used to send a user-agent string along with API
215218 requests. If ``None``, then default info will be used. Generally,
@@ -235,6 +238,7 @@ def __init__(
235238 _http = None ,
236239 location = None ,
237240 default_query_job_config = None ,
241+ default_load_job_config = None ,
238242 client_info = None ,
239243 client_options = None ,
240244 ) -> None :
@@ -260,6 +264,7 @@ def __init__(
260264 self ._connection = Connection (self , ** kw_args )
261265 self ._location = location
262266 self ._default_query_job_config = copy .deepcopy (default_query_job_config )
267+ self ._default_load_job_config = copy .deepcopy (default_load_job_config )
263268
264269 @property
265270 def location (self ):
@@ -277,6 +282,17 @@ def default_query_job_config(self):
277282 def default_query_job_config (self , value : QueryJobConfig ):
278283 self ._default_query_job_config = copy .deepcopy (value )
279284
285+ @property
286+ def default_load_job_config (self ):
287+ """Default ``LoadJobConfig``.
288+ Will be merged into job configs passed into the ``load_table_*`` methods.
289+ """
290+ return self ._default_load_job_config
291+
292+ @default_load_job_config .setter
293+ def default_load_job_config (self , value : LoadJobConfig ):
294+ self ._default_load_job_config = copy .deepcopy (value )
295+
280296 def close (self ):
281297 """Close the underlying transport objects, releasing system resources.
282298
@@ -2330,8 +2346,8 @@ def load_table_from_uri(
23302346
23312347 Raises:
23322348 TypeError:
2333- If ``job_config`` is not an instance of :class:`~google.cloud.bigquery.job.LoadJobConfig`
2334- class.
2349+ If ``job_config`` is not an instance of
2350+ :class:`~google.cloud.bigquery.job.LoadJobConfig` class.
23352351 """
23362352 job_id = _make_job_id (job_id , job_id_prefix )
23372353
@@ -2348,9 +2364,12 @@ def load_table_from_uri(
23482364
23492365 destination = _table_arg_to_table_ref (destination , default_project = self .project )
23502366
2351- if job_config :
2352- job_config = copy .deepcopy (job_config )
2353- _verify_job_config_type (job_config , google .cloud .bigquery .job .LoadJobConfig )
2367+ if job_config is not None :
2368+ _verify_job_config_type (job_config , LoadJobConfig )
2369+ else :
2370+ job_config = job .LoadJobConfig ()
2371+
2372+ job_config = job_config ._fill_from_default (self ._default_load_job_config )
23542373
23552374 load_job = job .LoadJob (job_ref , source_uris , destination , self , job_config )
23562375 load_job ._begin (retry = retry , timeout = timeout )
@@ -2424,8 +2443,8 @@ def load_table_from_file(
24242443 mode.
24252444
24262445 TypeError:
2427- If ``job_config`` is not an instance of :class:`~google.cloud.bigquery.job.LoadJobConfig`
2428- class.
2446+ If ``job_config`` is not an instance of
2447+ :class:`~google.cloud.bigquery.job.LoadJobConfig` class.
24292448 """
24302449 job_id = _make_job_id (job_id , job_id_prefix )
24312450
@@ -2437,9 +2456,14 @@ def load_table_from_file(
24372456
24382457 destination = _table_arg_to_table_ref (destination , default_project = self .project )
24392458 job_ref = job ._JobReference (job_id , project = project , location = location )
2440- if job_config :
2441- job_config = copy .deepcopy (job_config )
2442- _verify_job_config_type (job_config , google .cloud .bigquery .job .LoadJobConfig )
2459+
2460+ if job_config is not None :
2461+ _verify_job_config_type (job_config , LoadJobConfig )
2462+ else :
2463+ job_config = job .LoadJobConfig ()
2464+
2465+ job_config = job_config ._fill_from_default (self ._default_load_job_config )
2466+
24432467 load_job = job .LoadJob (job_ref , None , destination , self , job_config )
24442468 job_resource = load_job .to_api_repr ()
24452469
@@ -2564,21 +2588,18 @@ def load_table_from_dataframe(
25642588 If a usable parquet engine cannot be found. This method
25652589 requires :mod:`pyarrow` to be installed.
25662590 TypeError:
2567- If ``job_config`` is not an instance of :class:`~google.cloud.bigquery.job.LoadJobConfig`
2568- class.
2591+ If ``job_config`` is not an instance of
2592+ :class:`~google.cloud.bigquery.job.LoadJobConfig` class.
25692593 """
25702594 job_id = _make_job_id (job_id , job_id_prefix )
25712595
2572- if job_config :
2573- _verify_job_config_type (job_config , google .cloud .bigquery .job .LoadJobConfig )
2574- # Make a copy so that the job config isn't modified in-place.
2575- job_config_properties = copy .deepcopy (job_config ._properties )
2576- job_config = job .LoadJobConfig ()
2577- job_config ._properties = job_config_properties
2578-
2596+ if job_config is not None :
2597+ _verify_job_config_type (job_config , LoadJobConfig )
25792598 else :
25802599 job_config = job .LoadJobConfig ()
25812600
2601+ job_config = job_config ._fill_from_default (self ._default_load_job_config )
2602+
25822603 supported_formats = {job .SourceFormat .CSV , job .SourceFormat .PARQUET }
25832604 if job_config .source_format is None :
25842605 # default value
@@ -2791,18 +2812,18 @@ def load_table_from_json(
27912812
27922813 Raises:
27932814 TypeError:
2794- If ``job_config`` is not an instance of :class:`~google.cloud.bigquery.job.LoadJobConfig`
2795- class.
2815+ If ``job_config`` is not an instance of
2816+ :class:`~google.cloud.bigquery.job.LoadJobConfig` class.
27962817 """
27972818 job_id = _make_job_id (job_id , job_id_prefix )
27982819
2799- if job_config :
2800- _verify_job_config_type (job_config , google .cloud .bigquery .job .LoadJobConfig )
2801- # Make a copy so that the job config isn't modified in-place.
2802- job_config = copy .deepcopy (job_config )
2820+ if job_config is not None :
2821+ _verify_job_config_type (job_config , LoadJobConfig )
28032822 else :
28042823 job_config = job .LoadJobConfig ()
28052824
2825+ job_config = job_config ._fill_from_default (self ._default_load_job_config )
2826+
28062827 job_config .source_format = job .SourceFormat .NEWLINE_DELIMITED_JSON
28072828
28082829 if job_config .schema is None :
0 commit comments