@@ -298,33 +298,31 @@ def _resolve_query_without_cache_unload(
298298 partitioned_by : Optional [List [str ]],
299299 database : Optional [str ],
300300 data_source : Optional [str ],
301- s3_output : str ,
301+ s3_output : Optional [ str ] ,
302302 keep_files : bool ,
303303 chunksize : Union [int , bool , None ],
304304 categories : Optional [List [str ]],
305305 encryption : Optional [str ],
306306 kms_key : Optional [str ],
307307 workgroup : Optional [str ],
308- wg_config : _WorkGroupConfig ,
309308 use_threads : Union [bool , int ],
310309 s3_additional_kwargs : Optional [Dict [str , Any ]],
311310 boto3_session : boto3 .Session ,
312311 pyarrow_additional_kwargs : Optional [Dict [str , Any ]] = None ,
313312) -> Union [pd .DataFrame , Iterator [pd .DataFrame ]]:
314313 query_metadata = _unload (
315- sql ,
316- s3_output ,
317- file_format ,
318- compression ,
319- field_delimiter ,
320- partitioned_by ,
321- workgroup ,
322- wg_config ,
323- database ,
324- encryption ,
325- kms_key ,
326- boto3_session ,
327- data_source ,
314+ sql = sql ,
315+ path = s3_output ,
316+ file_format = file_format ,
317+ compression = compression ,
318+ field_delimiter = field_delimiter ,
319+ partitioned_by = partitioned_by ,
320+ workgroup = workgroup ,
321+ database = database ,
322+ encryption = encryption ,
323+ kms_key = kms_key ,
324+ boto3_session = boto3_session ,
325+ data_source = data_source ,
328326 )
329327 if file_format == "PARQUET" :
330328 return _fetch_parquet_result (
@@ -351,11 +349,13 @@ def _resolve_query_without_cache_regular(
351349 encryption : Optional [str ],
352350 workgroup : Optional [str ],
353351 kms_key : Optional [str ],
354- wg_config : _WorkGroupConfig ,
355352 use_threads : Union [bool , int ],
356353 s3_additional_kwargs : Optional [Dict [str , Any ]],
357354 boto3_session : boto3 .Session ,
358355) -> Union [pd .DataFrame , Iterator [pd .DataFrame ]]:
356+ wg_config : _WorkGroupConfig = _get_workgroup_config (session = boto3_session , workgroup = workgroup )
357+ s3_output = _get_s3_output (s3_output = s3_output , wg_config = wg_config , boto3_session = boto3_session )
358+ s3_output = s3_output [:- 1 ] if s3_output [- 1 ] == "/" else s3_output
359359 _logger .debug ("sql: %s" , sql )
360360 query_id : str = _start_query_execution (
361361 sql = sql ,
@@ -413,9 +413,6 @@ def _resolve_query_without_cache(
413413
414414 Usually called by `read_sql_query` when using cache is not possible.
415415 """
416- wg_config : _WorkGroupConfig = _get_workgroup_config (session = boto3_session , workgroup = workgroup )
417- _s3_output : str = _get_s3_output (s3_output = s3_output , wg_config = wg_config , boto3_session = boto3_session )
418- _s3_output = _s3_output [:- 1 ] if _s3_output [- 1 ] == "/" else _s3_output
419416 if ctas_approach is True :
420417 if ctas_temp_table_name is not None :
421418 name : str = catalog .sanitize_table_name (ctas_temp_table_name )
@@ -426,7 +423,7 @@ def _resolve_query_without_cache(
426423 sql = sql ,
427424 database = database ,
428425 data_source = data_source ,
429- s3_output = _s3_output ,
426+ s3_output = s3_output ,
430427 keep_files = keep_files ,
431428 chunksize = chunksize ,
432429 categories = categories ,
@@ -456,14 +453,13 @@ def _resolve_query_without_cache(
456453 partitioned_by = unload_parameters .get ("partitioned_by" ),
457454 database = database ,
458455 data_source = data_source ,
459- s3_output = _s3_output ,
456+ s3_output = s3_output ,
460457 keep_files = keep_files ,
461458 chunksize = chunksize ,
462459 categories = categories ,
463460 encryption = encryption ,
464461 kms_key = kms_key ,
465462 workgroup = workgroup ,
466- wg_config = wg_config ,
467463 use_threads = use_threads ,
468464 s3_additional_kwargs = s3_additional_kwargs ,
469465 boto3_session = boto3_session ,
@@ -473,14 +469,13 @@ def _resolve_query_without_cache(
473469 sql = sql ,
474470 database = database ,
475471 data_source = data_source ,
476- s3_output = _s3_output ,
472+ s3_output = s3_output ,
477473 keep_files = keep_files ,
478474 chunksize = chunksize ,
479475 categories = categories ,
480476 encryption = encryption ,
481477 workgroup = workgroup ,
482478 kms_key = kms_key ,
483- wg_config = wg_config ,
484479 use_threads = use_threads ,
485480 s3_additional_kwargs = s3_additional_kwargs ,
486481 boto3_session = boto3_session ,
@@ -489,19 +484,26 @@ def _resolve_query_without_cache(
489484
490485def _unload (
491486 sql : str ,
492- path : str ,
487+ path : Optional [ str ] ,
493488 file_format : str ,
494489 compression : Optional [str ],
495490 field_delimiter : Optional [str ],
496491 partitioned_by : Optional [List [str ]],
497492 workgroup : Optional [str ],
498- wg_config : _WorkGroupConfig ,
499493 database : Optional [str ],
500494 encryption : Optional [str ],
501495 kms_key : Optional [str ],
502496 boto3_session : boto3 .Session ,
503497 data_source : Optional [str ],
504498) -> _QueryMetadata :
499+ wg_config : _WorkGroupConfig = _get_workgroup_config (session = boto3_session , workgroup = workgroup )
500+ s3_output : str = _get_s3_output (s3_output = path , wg_config = wg_config , boto3_session = boto3_session )
501+ s3_output = s3_output [:- 1 ] if s3_output [- 1 ] == "/" else s3_output
502+ # Athena does not enforce a Query Result Location for UNLOAD. Thus, the workgroup output location
503+ # is only used if no path is supplied.
504+ if not path :
505+ path = s3_output
506+
505507 # Set UNLOAD parameters
506508 unload_parameters = f" format='{ file_format } '"
507509 if compression :
@@ -520,7 +522,7 @@ def _unload(
520522 wg_config = wg_config ,
521523 database = database ,
522524 data_source = data_source ,
523- s3_output = path ,
525+ s3_output = s3_output ,
524526 encryption = encryption ,
525527 kms_key = kms_key ,
526528 boto3_session = boto3_session ,
@@ -1177,24 +1179,22 @@ def unload(
11771179
11781180 """
11791181 session : boto3 .Session = _utils .ensure_session (session = boto3_session )
1180- wg_config : _WorkGroupConfig = _get_workgroup_config (session = session , workgroup = workgroup )
11811182 # Substitute query parameters
11821183 if params is None :
11831184 params = {}
11841185 for key , value in params .items ():
11851186 sql = sql .replace (f":{ key } ;" , str (value ))
11861187 return _unload (
1187- sql ,
1188- path ,
1189- file_format ,
1190- compression ,
1191- field_delimiter ,
1192- partitioned_by ,
1193- workgroup ,
1194- wg_config ,
1195- database ,
1196- encryption ,
1197- kms_key ,
1198- session ,
1199- data_source ,
1188+ sql = sql ,
1189+ path = path ,
1190+ file_format = file_format ,
1191+ compression = compression ,
1192+ field_delimiter = field_delimiter ,
1193+ partitioned_by = partitioned_by ,
1194+ workgroup = workgroup ,
1195+ database = database ,
1196+ encryption = encryption ,
1197+ kms_key = kms_key ,
1198+ boto3_session = session ,
1199+ data_source = data_source ,
12001200 )
0 commit comments