@@ -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 ,
236239location = None ,
237240default_query_job_config = None ,
241+ default_load_job_config = None ,
238242client_info = None ,
239243client_options = None ,
240244 )-> None :
@@ -260,6 +264,7 @@ def __init__(
260264self ._connection = Connection (self ,** kw_args )
261265self ._location = location
262266self ._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
265270def location (self ):
@@ -277,6 +282,17 @@ def default_query_job_config(self):
277282def default_query_job_config (self ,value :QueryJobConfig ):
278283self ._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+
280296def 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 """
23362352job_id = _make_job_id (job_id ,job_id_prefix )
23372353
@@ -2349,8 +2365,12 @@ def load_table_from_uri(
23492365destination = _table_arg_to_table_ref (destination ,default_project = self .project )
23502366
23512367if job_config :
2352- job_config = copy .deepcopy (job_config )
2353- _verify_job_config_type (job_config ,google .cloud .bigquery .job .LoadJobConfig )
2368+ _verify_job_config_type (job_config ,LoadJobConfig )
2369+ else :
2370+ job_config = job .LoadJobConfig ()
2371+
2372+ if job_config :
2373+ job_config = job_config ._fill_from_default (self ._default_load_job_config )
23542374
23552375load_job = job .LoadJob (job_ref ,source_uris ,destination ,self ,job_config )
23562376load_job ._begin (retry = retry ,timeout = timeout )
@@ -2424,8 +2444,8 @@ def load_table_from_file(
24242444 mode.
24252445
24262446 TypeError:
2427- If ``job_config`` is not an instance of :class:`~google.cloud.bigquery.job.LoadJobConfig`
2428- class.
2447+ If ``job_config`` is not an instance of
2448+ :class:`~google.cloud.bigquery.job.LoadJobConfig` class.
24292449 """
24302450job_id = _make_job_id (job_id ,job_id_prefix )
24312451
@@ -2437,9 +2457,15 @@ def load_table_from_file(
24372457
24382458destination = _table_arg_to_table_ref (destination ,default_project = self .project )
24392459job_ref = job ._JobReference (job_id ,project = project ,location = location )
2460+
24402461if job_config :
2441- job_config = copy .deepcopy (job_config )
2442- _verify_job_config_type (job_config ,google .cloud .bigquery .job .LoadJobConfig )
2462+ _verify_job_config_type (job_config ,LoadJobConfig )
2463+ else :
2464+ job_config = job .LoadJobConfig ()
2465+
2466+ if job_config :
2467+ job_config = job_config ._fill_from_default (self ._default_load_job_config )
2468+
24432469load_job = job .LoadJob (job_ref ,None ,destination ,self ,job_config )
24442470job_resource = load_job .to_api_repr ()
24452471
@@ -2564,21 +2590,19 @@ def load_table_from_dataframe(
25642590 If a usable parquet engine cannot be found. This method
25652591 requires :mod:`pyarrow` to be installed.
25662592 TypeError:
2567- If ``job_config`` is not an instance of :class:`~google.cloud.bigquery.job.LoadJobConfig`
2568- class.
2593+ If ``job_config`` is not an instance of
2594+ :class:`~google.cloud.bigquery.job.LoadJobConfig` class.
25692595 """
25702596job_id = _make_job_id (job_id ,job_id_prefix )
25712597
25722598if 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-
2599+ _verify_job_config_type (job_config ,LoadJobConfig )
25792600else :
25802601job_config = job .LoadJobConfig ()
25812602
2603+ if job_config :
2604+ job_config = job_config ._fill_from_default (self ._default_load_job_config )
2605+
25822606supported_formats = {job .SourceFormat .CSV ,job .SourceFormat .PARQUET }
25832607if job_config .source_format is None :
25842608# default value
@@ -2791,18 +2815,19 @@ def load_table_from_json(
27912815
27922816 Raises:
27932817 TypeError:
2794- If ``job_config`` is not an instance of :class:`~google.cloud.bigquery.job.LoadJobConfig`
2795- class.
2818+ If ``job_config`` is not an instance of
2819+ :class:`~google.cloud.bigquery.job.LoadJobConfig` class.
27962820 """
27972821job_id = _make_job_id (job_id ,job_id_prefix )
27982822
27992823if 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 )
2824+ _verify_job_config_type (job_config ,LoadJobConfig )
28032825else :
28042826job_config = job .LoadJobConfig ()
28052827
2828+ if job_config :
2829+ job_config = job_config ._fill_from_default (self ._default_load_job_config )
2830+
28062831job_config .source_format = job .SourceFormat .NEWLINE_DELIMITED_JSON
28072832
28082833if job_config .schema is None :