70
70
import bigframes .dtypes
71
71
import bigframes .functions ._function_session as bff_session
72
72
import bigframes .functions .function as bff
73
+ from bigframes .session import bigquery_session
73
74
import bigframes .session ._io .bigquery as bf_io_bigquery
75
+ import bigframes .session .anonymous_dataset
74
76
import bigframes .session .clients
75
77
import bigframes .session .executor
76
78
import bigframes .session .loader
77
79
import bigframes .session .metrics
78
80
import bigframes .session .planner
79
- import bigframes .session .temp_storage
80
81
import bigframes .session .validation
81
82
82
83
# Avoid circular imports.
@@ -247,14 +248,26 @@ def __init__(
247
248
248
249
self ._metrics = bigframes .session .metrics .ExecutionMetrics ()
249
250
self ._function_session = bff_session .FunctionSession ()
250
- self ._temp_storage_manager = (
251
- bigframes .session .temp_storage .AnonymousDatasetManager (
251
+ self ._anon_dataset_manager = (
252
+ bigframes .session .anonymous_dataset .AnonymousDatasetManager (
252
253
self ._clients_provider .bqclient ,
253
254
location = self ._location ,
254
255
session_id = self ._session_id ,
255
256
kms_key = self ._bq_kms_key_name ,
256
257
)
257
258
)
259
+ # Session temp tables don't support specifying kms key, so use anon dataset if kms key specified
260
+ self ._session_resource_manager = (
261
+ bigquery_session .SessionResourceManager (
262
+ self .bqclient ,
263
+ self ._location ,
264
+ )
265
+ if (self ._bq_kms_key_name is None )
266
+ else None
267
+ )
268
+ self ._temp_storage_manager = (
269
+ self ._session_resource_manager or self ._anon_dataset_manager
270
+ )
258
271
self ._executor : bigframes .session .executor .Executor = (
259
272
bigframes .session .executor .BigQueryCachingExecutor (
260
273
bqclient = self ._clients_provider .bqclient ,
@@ -375,7 +388,7 @@ def _allows_ambiguity(self) -> bool:
375
388
376
389
@property
377
390
def _anonymous_dataset (self ):
378
- return self ._temp_storage_manager .dataset
391
+ return self ._anon_dataset_manager .dataset
379
392
380
393
def __hash__ (self ):
381
394
# Stable hash needed to use in expression tree
@@ -388,9 +401,11 @@ def close(self):
388
401
389
402
# Protect against failure when the Session is a fake for testing or
390
403
# failed to initialize.
391
- temp_storage_manager = getattr (self , "_temp_storage_manager" , None )
392
- if temp_storage_manager :
393
- self ._temp_storage_manager .clean_up_tables ()
404
+ if anon_dataset_manager := getattr (self , "_anon_dataset_manager" , None ):
405
+ anon_dataset_manager .close ()
406
+
407
+ if session_resource_manager := getattr (self , "_session_resource_manager" , None ):
408
+ session_resource_manager .close ()
394
409
395
410
remote_function_session = getattr (self , "_function_session" , None )
396
411
if remote_function_session :
@@ -906,8 +921,6 @@ def read_csv(
906
921
engine = engine ,
907
922
write_engine = write_engine ,
908
923
)
909
- table = self ._temp_storage_manager .allocate_temp_table ()
910
-
911
924
if engine is not None and engine == "bigquery" :
912
925
if any (param is not None for param in (dtype , names )):
913
926
not_supported = ("dtype" , "names" )
@@ -967,9 +980,7 @@ def read_csv(
967
980
)
968
981
969
982
job_config = bigquery .LoadJobConfig ()
970
- job_config .create_disposition = bigquery .CreateDisposition .CREATE_IF_NEEDED
971
983
job_config .source_format = bigquery .SourceFormat .CSV
972
- job_config .write_disposition = bigquery .WriteDisposition .WRITE_EMPTY
973
984
job_config .autodetect = True
974
985
job_config .field_delimiter = sep
975
986
job_config .encoding = encoding
@@ -983,9 +994,8 @@ def read_csv(
983
994
elif header > 0 :
984
995
job_config .skip_leading_rows = header
985
996
986
- return self ._loader ._read_bigquery_load_job (
997
+ return self ._loader .read_bigquery_load_job (
987
998
filepath_or_buffer ,
988
- table ,
989
999
job_config = job_config ,
990
1000
index_col = index_col ,
991
1001
columns = columns ,
@@ -1052,18 +1062,12 @@ def read_parquet(
1052
1062
engine = engine ,
1053
1063
write_engine = write_engine ,
1054
1064
)
1055
- table = self ._temp_storage_manager .allocate_temp_table ()
1056
-
1057
1065
if engine == "bigquery" :
1058
1066
job_config = bigquery .LoadJobConfig ()
1059
- job_config .create_disposition = bigquery .CreateDisposition .CREATE_IF_NEEDED
1060
1067
job_config .source_format = bigquery .SourceFormat .PARQUET
1061
- job_config .write_disposition = bigquery .WriteDisposition .WRITE_EMPTY
1062
1068
job_config .labels = {"bigframes-api" : "read_parquet" }
1063
1069
1064
- return self ._loader ._read_bigquery_load_job (
1065
- path , table , job_config = job_config
1066
- )
1070
+ return self ._loader .read_bigquery_load_job (path , job_config = job_config )
1067
1071
else :
1068
1072
if "*" in path :
1069
1073
raise ValueError (
@@ -1106,8 +1110,6 @@ def read_json(
1106
1110
engine = engine ,
1107
1111
write_engine = write_engine ,
1108
1112
)
1109
- table = self ._temp_storage_manager .allocate_temp_table ()
1110
-
1111
1113
if engine == "bigquery" :
1112
1114
1113
1115
if dtype is not None :
@@ -1131,16 +1133,13 @@ def read_json(
1131
1133
)
1132
1134
1133
1135
job_config = bigquery .LoadJobConfig ()
1134
- job_config .create_disposition = bigquery .CreateDisposition .CREATE_IF_NEEDED
1135
1136
job_config .source_format = bigquery .SourceFormat .NEWLINE_DELIMITED_JSON
1136
- job_config .write_disposition = bigquery .WriteDisposition .WRITE_EMPTY
1137
1137
job_config .autodetect = True
1138
1138
job_config .encoding = encoding
1139
1139
job_config .labels = {"bigframes-api" : "read_json" }
1140
1140
1141
- return self ._loader ._read_bigquery_load_job (
1141
+ return self ._loader .read_bigquery_load_job (
1142
1142
path_or_buf ,
1143
- table ,
1144
1143
job_config = job_config ,
1145
1144
)
1146
1145
else :
@@ -1713,7 +1712,7 @@ def _start_query_ml_ddl(
1713
1712
1714
1713
def _create_object_table (self , path : str , connection : str ) -> str :
1715
1714
"""Create a random id Object Table from the input path and connection."""
1716
- table = str (self ._loader . _storage_manager .generate_unique_resource_id ())
1715
+ table = str (self ._anon_dataset_manager .generate_unique_resource_id ())
1717
1716
1718
1717
import textwrap
1719
1718
0 commit comments