25
25
_logger : logging .Logger = logging .getLogger (__name__ )
26
26
27
27
28
- def _update_if_necessary (dic : dict [str , str ], key : str , value : str | None , mode : str ) -> str :
28
+ def _update_if_necessary (
29
+ dic : dict [str , str | dict [str , str ]], key : str , value : str | dict [str , str ] | None , mode : str
30
+ ) -> str :
29
31
if value is not None :
30
32
if key not in dic or dic [key ] != value :
31
33
dic [key ] = value
@@ -46,6 +48,7 @@ def _create_table( # noqa: PLR0912,PLR0915
46
48
table_exist : bool ,
47
49
partitions_types : dict [str , str ] | None ,
48
50
columns_comments : dict [str , str ] | None ,
51
+ columns_parameters : dict [str , dict [str , str ]] | None ,
49
52
athena_partition_projection_settings : typing .AthenaPartitionProjectionSettings | None ,
50
53
catalog_id : str | None ,
51
54
) -> None :
@@ -130,6 +133,19 @@ def _create_table( # noqa: PLR0912,PLR0915
130
133
if name in columns_comments :
131
134
mode = _update_if_necessary (dic = par , key = "Comment" , value = columns_comments [name ], mode = mode )
132
135
136
+ # Column parameters
137
+ columns_parameters = columns_parameters if columns_parameters else {}
138
+ columns_parameters = {sanitize_column_name (k ): v for k , v in columns_parameters .items ()}
139
+ if columns_parameters :
140
+ for col in table_input ["StorageDescriptor" ]["Columns" ]:
141
+ name : str = col ["Name" ] # type: ignore[no-redef]
142
+ if name in columns_parameters :
143
+ mode = _update_if_necessary (dic = col , key = "Parameters" , value = columns_parameters [name ], mode = mode )
144
+ for par in table_input ["PartitionKeys" ]:
145
+ name = par ["Name" ]
146
+ if name in columns_parameters :
147
+ mode = _update_if_necessary (dic = par , key = "Parameters" , value = columns_parameters [name ], mode = mode )
148
+
133
149
_logger .debug ("table_input: %s" , table_input )
134
150
135
151
client_glue = _utils .client (service_name = "glue" , session = boto3_session )
@@ -275,6 +291,7 @@ def _create_parquet_table(
275
291
description : str | None ,
276
292
parameters : dict [str , str ] | None ,
277
293
columns_comments : dict [str , str ] | None ,
294
+ columns_parameters : dict [str , dict [str , str ]] | None ,
278
295
mode : str ,
279
296
catalog_versioning : bool ,
280
297
athena_partition_projection_settings : typing .AthenaPartitionProjectionSettings | None ,
@@ -311,6 +328,7 @@ def _create_parquet_table(
311
328
description = description ,
312
329
parameters = parameters ,
313
330
columns_comments = columns_comments ,
331
+ columns_parameters = columns_parameters ,
314
332
mode = mode ,
315
333
catalog_versioning = catalog_versioning ,
316
334
boto3_session = boto3_session ,
@@ -335,6 +353,7 @@ def _create_orc_table(
335
353
description : str | None ,
336
354
parameters : dict [str , str ] | None ,
337
355
columns_comments : dict [str , str ] | None ,
356
+ columns_parameters : dict [str , dict [str , str ]] | None ,
338
357
mode : str ,
339
358
catalog_versioning : bool ,
340
359
athena_partition_projection_settings : typing .AthenaPartitionProjectionSettings | None ,
@@ -371,6 +390,7 @@ def _create_orc_table(
371
390
description = description ,
372
391
parameters = parameters ,
373
392
columns_comments = columns_comments ,
393
+ columns_parameters = columns_parameters ,
374
394
mode = mode ,
375
395
catalog_versioning = catalog_versioning ,
376
396
boto3_session = boto3_session ,
@@ -394,6 +414,7 @@ def _create_csv_table(
394
414
compression : str | None ,
395
415
parameters : dict [str , str ] | None ,
396
416
columns_comments : dict [str , str ] | None ,
417
+ columns_parameters : dict [str , dict [str , str ]] | None ,
397
418
mode : str ,
398
419
catalog_versioning : bool ,
399
420
schema_evolution : bool ,
@@ -444,6 +465,7 @@ def _create_csv_table(
444
465
description = description ,
445
466
parameters = parameters ,
446
467
columns_comments = columns_comments ,
468
+ columns_parameters = columns_parameters ,
447
469
mode = mode ,
448
470
catalog_versioning = catalog_versioning ,
449
471
boto3_session = boto3_session ,
@@ -467,6 +489,7 @@ def _create_json_table(
467
489
compression : str | None ,
468
490
parameters : dict [str , str ] | None ,
469
491
columns_comments : dict [str , str ] | None ,
492
+ columns_parameters : dict [str , dict [str , str ]] | None ,
470
493
mode : str ,
471
494
catalog_versioning : bool ,
472
495
schema_evolution : bool ,
@@ -512,6 +535,7 @@ def _create_json_table(
512
535
description = description ,
513
536
parameters = parameters ,
514
537
columns_comments = columns_comments ,
538
+ columns_parameters = columns_parameters ,
515
539
mode = mode ,
516
540
catalog_versioning = catalog_versioning ,
517
541
boto3_session = boto3_session ,
@@ -713,6 +737,7 @@ def create_parquet_table(
713
737
description : str | None = None ,
714
738
parameters : dict [str , str ] | None = None ,
715
739
columns_comments : dict [str , str ] | None = None ,
740
+ columns_parameters : dict [str , dict [str , str ]] | None = None ,
716
741
mode : Literal ["overwrite" , "append" ] = "overwrite" ,
717
742
catalog_versioning : bool = False ,
718
743
athena_partition_projection_settings : typing .AthenaPartitionProjectionSettings | None = None ,
@@ -751,6 +776,8 @@ def create_parquet_table(
751
776
Key/value pairs to tag the table.
752
777
columns_comments: Dict[str, str], optional
753
778
Columns names and the related comments (e.g. {'col0': 'Column 0.', 'col1': 'Column 1.', 'col2': 'Partition.'}).
779
+ columns_parameters: Dict[str, Dict[str, str]], optional
780
+ Columns names and the related parameters (e.g. {'col0': {'par0': 'Param 0', 'par1': 'Param 1'}}).
754
781
mode: str
755
782
'overwrite' to recreate any possible existing table or 'append' to keep any possible existing table.
756
783
catalog_versioning : bool
@@ -848,6 +875,7 @@ def create_parquet_table(
848
875
description = description ,
849
876
parameters = parameters ,
850
877
columns_comments = columns_comments ,
878
+ columns_parameters = columns_parameters ,
851
879
mode = mode ,
852
880
catalog_versioning = catalog_versioning ,
853
881
athena_partition_projection_settings = athena_partition_projection_settings ,
@@ -870,6 +898,7 @@ def create_orc_table(
870
898
description : str | None = None ,
871
899
parameters : dict [str , str ] | None = None ,
872
900
columns_comments : dict [str , str ] | None = None ,
901
+ columns_parameters : dict [str , dict [str , str ]] | None = None ,
873
902
mode : Literal ["overwrite" , "append" ] = "overwrite" ,
874
903
catalog_versioning : bool = False ,
875
904
athena_partition_projection_settings : typing .AthenaPartitionProjectionSettings | None = None ,
@@ -908,6 +937,8 @@ def create_orc_table(
908
937
Key/value pairs to tag the table.
909
938
columns_comments: Dict[str, str], optional
910
939
Columns names and the related comments (e.g. {'col0': 'Column 0.', 'col1': 'Column 1.', 'col2': 'Partition.'}).
940
+ columns_parameters: Dict[str, Dict[str, str]], optional
941
+ Columns names and the related parameters (e.g. {'col0': {'par0': 'Param 0', 'par1': 'Param 1'}}).
911
942
mode: str
912
943
'overwrite' to recreate any possible existing table or 'append' to keep any possible existing table.
913
944
catalog_versioning : bool
@@ -1005,6 +1036,7 @@ def create_orc_table(
1005
1036
description = description ,
1006
1037
parameters = parameters ,
1007
1038
columns_comments = columns_comments ,
1039
+ columns_parameters = columns_parameters ,
1008
1040
mode = mode ,
1009
1041
catalog_versioning = catalog_versioning ,
1010
1042
athena_partition_projection_settings = athena_partition_projection_settings ,
@@ -1026,6 +1058,7 @@ def create_csv_table(
1026
1058
description : str | None = None ,
1027
1059
parameters : dict [str , str ] | None = None ,
1028
1060
columns_comments : dict [str , str ] | None = None ,
1061
+ columns_parameters : dict [str , dict [str , str ]] | None = None ,
1029
1062
mode : Literal ["overwrite" , "append" ] = "overwrite" ,
1030
1063
catalog_versioning : bool = False ,
1031
1064
schema_evolution : bool = False ,
@@ -1072,6 +1105,8 @@ def create_csv_table(
1072
1105
Key/value pairs to tag the table.
1073
1106
columns_comments: Dict[str, str], optional
1074
1107
Columns names and the related comments (e.g. {'col0': 'Column 0.', 'col1': 'Column 1.', 'col2': 'Partition.'}).
1108
+ columns_parameters: Dict[str, Dict[str, str]], optional
1109
+ Columns names and the related parameters (e.g. {'col0': {'par0': 'Param 0', 'par1': 'Param 1'}}).
1075
1110
mode : str
1076
1111
'overwrite' to recreate any possible existing table or 'append' to keep any possible existing table.
1077
1112
catalog_versioning : bool
@@ -1188,6 +1223,7 @@ def create_csv_table(
1188
1223
description = description ,
1189
1224
parameters = parameters ,
1190
1225
columns_comments = columns_comments ,
1226
+ columns_parameters = columns_parameters ,
1191
1227
mode = mode ,
1192
1228
catalog_versioning = catalog_versioning ,
1193
1229
schema_evolution = schema_evolution ,
@@ -1214,6 +1250,7 @@ def create_json_table(
1214
1250
description : str | None = None ,
1215
1251
parameters : dict [str , str ] | None = None ,
1216
1252
columns_comments : dict [str , str ] | None = None ,
1253
+ columns_parameters : dict [str , dict [str , str ]] | None = None ,
1217
1254
mode : Literal ["overwrite" , "append" ] = "overwrite" ,
1218
1255
catalog_versioning : bool = False ,
1219
1256
schema_evolution : bool = False ,
@@ -1253,6 +1290,8 @@ def create_json_table(
1253
1290
Key/value pairs to tag the table.
1254
1291
columns_comments: Dict[str, str], optional
1255
1292
Columns names and the related comments (e.g. {'col0': 'Column 0.', 'col1': 'Column 1.', 'col2': 'Partition.'}).
1293
+ columns_parameters: Dict[str, Dict[str, str]], optional
1294
+ Columns names and the related parameters (e.g. {'col0': {'par0': 'Param 0', 'par1': 'Param 1'}}).
1256
1295
mode : str
1257
1296
'overwrite' to recreate any possible existing table or 'append' to keep any possible existing table.
1258
1297
catalog_versioning : bool
@@ -1361,6 +1400,7 @@ def create_json_table(
1361
1400
description = description ,
1362
1401
parameters = parameters ,
1363
1402
columns_comments = columns_comments ,
1403
+ columns_parameters = columns_parameters ,
1364
1404
mode = mode ,
1365
1405
catalog_versioning = catalog_versioning ,
1366
1406
schema_evolution = schema_evolution ,
0 commit comments