@@ -210,6 +210,9 @@ class Client(ClientWithProject):
210
210
default_query_job_config (Optional[google.cloud.bigquery.job.QueryJobConfig]):
211
211
Default ``QueryJobConfig``.
212
212
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.
213
216
client_info (Optional[google.api_core.client_info.ClientInfo]):
214
217
The client info used to send a user-agent string along with API
215
218
requests. If ``None``, then default info will be used. Generally,
@@ -235,6 +238,7 @@ def __init__(
235
238
_http = None ,
236
239
location = None ,
237
240
default_query_job_config = None ,
241
+ default_load_job_config = None ,
238
242
client_info = None ,
239
243
client_options = None ,
240
244
) -> None :
@@ -260,6 +264,7 @@ def __init__(
260
264
self ._connection = Connection (self , ** kw_args )
261
265
self ._location = location
262
266
self ._default_query_job_config = copy .deepcopy (default_query_job_config )
267
+ self ._default_load_job_config = copy .deepcopy (default_load_job_config )
263
268
264
269
@property
265
270
def location (self ):
@@ -277,6 +282,17 @@ def default_query_job_config(self):
277
282
def default_query_job_config (self , value : QueryJobConfig ):
278
283
self ._default_query_job_config = copy .deepcopy (value )
279
284
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
+
280
296
def close (self ):
281
297
"""Close the underlying transport objects, releasing system resources.
282
298
@@ -2330,8 +2346,8 @@ def load_table_from_uri(
2330
2346
2331
2347
Raises:
2332
2348
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.
2335
2351
"""
2336
2352
job_id = _make_job_id (job_id , job_id_prefix )
2337
2353
@@ -2349,8 +2365,12 @@ def load_table_from_uri(
2349
2365
destination = _table_arg_to_table_ref (destination , default_project = self .project )
2350
2366
2351
2367
if 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 )
2354
2374
2355
2375
load_job = job .LoadJob (job_ref , source_uris , destination , self , job_config )
2356
2376
load_job ._begin (retry = retry , timeout = timeout )
@@ -2424,8 +2444,8 @@ def load_table_from_file(
2424
2444
mode.
2425
2445
2426
2446
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.
2429
2449
"""
2430
2450
job_id = _make_job_id (job_id , job_id_prefix )
2431
2451
@@ -2437,9 +2457,15 @@ def load_table_from_file(
2437
2457
2438
2458
destination = _table_arg_to_table_ref (destination , default_project = self .project )
2439
2459
job_ref = job ._JobReference (job_id , project = project , location = location )
2460
+
2440
2461
if 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
+
2443
2469
load_job = job .LoadJob (job_ref , None , destination , self , job_config )
2444
2470
job_resource = load_job .to_api_repr ()
2445
2471
@@ -2564,21 +2590,19 @@ def load_table_from_dataframe(
2564
2590
If a usable parquet engine cannot be found. This method
2565
2591
requires :mod:`pyarrow` to be installed.
2566
2592
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.
2569
2595
"""
2570
2596
job_id = _make_job_id (job_id , job_id_prefix )
2571
2597
2572
2598
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
-
2599
+ _verify_job_config_type (job_config , LoadJobConfig )
2579
2600
else :
2580
2601
job_config = job .LoadJobConfig ()
2581
2602
2603
+ if job_config :
2604
+ job_config = job_config ._fill_from_default (self ._default_load_job_config )
2605
+
2582
2606
supported_formats = {job .SourceFormat .CSV , job .SourceFormat .PARQUET }
2583
2607
if job_config .source_format is None :
2584
2608
# default value
@@ -2791,18 +2815,19 @@ def load_table_from_json(
2791
2815
2792
2816
Raises:
2793
2817
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.
2796
2820
"""
2797
2821
job_id = _make_job_id (job_id , job_id_prefix )
2798
2822
2799
2823
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 )
2824
+ _verify_job_config_type (job_config , LoadJobConfig )
2803
2825
else :
2804
2826
job_config = job .LoadJobConfig ()
2805
2827
2828
+ if job_config :
2829
+ job_config = job_config ._fill_from_default (self ._default_load_job_config )
2830
+
2806
2831
job_config .source_format = job .SourceFormat .NEWLINE_DELIMITED_JSON
2807
2832
2808
2833
if job_config .schema is None :
0 commit comments