aws-cdk.aws-s3tables-alpha 2.208.0a0__py3-none-any.whl → 2.209.0a0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of aws-cdk.aws-s3tables-alpha might be problematic. Click here for more details.

@@ -38,6 +38,57 @@ sample_table_bucket = TableBucket(scope, "ExampleTableBucket",
38
38
  )
39
39
  ```
40
40
 
41
+ ### Define an S3 Tables Namespace
42
+
43
+ ```python
44
+ # Build a namespace
45
+ sample_namespace = Namespace(scope, "ExampleNamespace",
46
+ namespace_name="example-namespace-1",
47
+ table_bucket=table_bucket
48
+ )
49
+ ```
50
+
51
+ ### Define an S3 Table
52
+
53
+ ```python
54
+ # Build a table
55
+ sample_table = Table(scope, "ExampleTable",
56
+ table_name="example_table",
57
+ namespace=namespace,
58
+ open_table_format=OpenTableFormat.ICEBERG,
59
+ without_metadata=True
60
+ )
61
+
62
+ # Build a table with an Iceberg Schema
63
+ sample_table_with_schema = Table(scope, "ExampleSchemaTable",
64
+ table_name="example_table_with_schema",
65
+ namespace=namespace,
66
+ open_table_format=OpenTableFormat.ICEBERG,
67
+ iceberg_metadata=IcebergMetadataProperty(
68
+ iceberg_schema=IcebergSchemaProperty(
69
+ schema_field_list=[SchemaFieldProperty(
70
+ name="id",
71
+ type="int",
72
+ required=True
73
+ ), SchemaFieldProperty(
74
+ name="name",
75
+ type="string"
76
+ )
77
+ ]
78
+ )
79
+ ),
80
+ compaction=CompactionProperty(
81
+ status=Status.ENABLED,
82
+ target_file_size_mb=128
83
+ ),
84
+ snapshot_management=SnapshotManagementProperty(
85
+ status=Status.ENABLED,
86
+ max_snapshot_age_hours=48,
87
+ min_snapshots_to_keep=5
88
+ )
89
+ )
90
+ ```
91
+
41
92
  Learn more about table buckets maintenance operations and default behavior from the [S3 Tables User Guide](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-table-buckets-maintenance.html)
42
93
 
43
94
  ### Controlling Table Bucket Permissions
@@ -109,8 +160,8 @@ encrypted_bucket_auto = TableBucket(scope, "EncryptedTableBucketAuto",
109
160
 
110
161
  L2 Construct support for:
111
162
 
112
- * Namespaces
113
- * Tables
163
+ * Table Policy
164
+ * KMS encryption support for Tables
114
165
  '''
115
166
  from pkgutil import extend_path
116
167
  __path__ = extend_path(__path__, __name__)
@@ -150,6 +201,267 @@ import aws_cdk.aws_kms as _aws_cdk_aws_kms_ceddda9d
150
201
  import constructs as _constructs_77d1e7e8
151
202
 
152
203
 
204
+ @jsii.data_type(
205
+ jsii_type="@aws-cdk/aws-s3tables-alpha.CompactionProperty",
206
+ jsii_struct_bases=[],
207
+ name_mapping={"status": "status", "target_file_size_mb": "targetFileSizeMb"},
208
+ )
209
+ class CompactionProperty:
210
+ def __init__(self, *, status: "Status", target_file_size_mb: jsii.Number) -> None:
211
+ '''(experimental) Settings governing the Compaction maintenance action.
212
+
213
+ :param status: (experimental) Status of the compaction maintenance action.
214
+ :param target_file_size_mb: (experimental) Target file size in megabytes for compaction.
215
+
216
+ :default: - No compaction settings
217
+
218
+ :stability: experimental
219
+ :exampleMetadata: infused
220
+
221
+ Example::
222
+
223
+ # Build a table
224
+ sample_table = Table(scope, "ExampleTable",
225
+ table_name="example_table",
226
+ namespace=namespace,
227
+ open_table_format=OpenTableFormat.ICEBERG,
228
+ without_metadata=True
229
+ )
230
+
231
+ # Build a table with an Iceberg Schema
232
+ sample_table_with_schema = Table(scope, "ExampleSchemaTable",
233
+ table_name="example_table_with_schema",
234
+ namespace=namespace,
235
+ open_table_format=OpenTableFormat.ICEBERG,
236
+ iceberg_metadata=IcebergMetadataProperty(
237
+ iceberg_schema=IcebergSchemaProperty(
238
+ schema_field_list=[SchemaFieldProperty(
239
+ name="id",
240
+ type="int",
241
+ required=True
242
+ ), SchemaFieldProperty(
243
+ name="name",
244
+ type="string"
245
+ )
246
+ ]
247
+ )
248
+ ),
249
+ compaction=CompactionProperty(
250
+ status=Status.ENABLED,
251
+ target_file_size_mb=128
252
+ ),
253
+ snapshot_management=SnapshotManagementProperty(
254
+ status=Status.ENABLED,
255
+ max_snapshot_age_hours=48,
256
+ min_snapshots_to_keep=5
257
+ )
258
+ )
259
+ '''
260
+ if __debug__:
261
+ type_hints = typing.get_type_hints(_typecheckingstub__ea606cde59917b73fdb198d73eabdbbe686fdbd73e01ef72284a9061ea612d80)
262
+ check_type(argname="argument status", value=status, expected_type=type_hints["status"])
263
+ check_type(argname="argument target_file_size_mb", value=target_file_size_mb, expected_type=type_hints["target_file_size_mb"])
264
+ self._values: typing.Dict[builtins.str, typing.Any] = {
265
+ "status": status,
266
+ "target_file_size_mb": target_file_size_mb,
267
+ }
268
+
269
+ @builtins.property
270
+ def status(self) -> "Status":
271
+ '''(experimental) Status of the compaction maintenance action.
272
+
273
+ :stability: experimental
274
+ '''
275
+ result = self._values.get("status")
276
+ assert result is not None, "Required property 'status' is missing"
277
+ return typing.cast("Status", result)
278
+
279
+ @builtins.property
280
+ def target_file_size_mb(self) -> jsii.Number:
281
+ '''(experimental) Target file size in megabytes for compaction.
282
+
283
+ :stability: experimental
284
+ '''
285
+ result = self._values.get("target_file_size_mb")
286
+ assert result is not None, "Required property 'target_file_size_mb' is missing"
287
+ return typing.cast(jsii.Number, result)
288
+
289
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
290
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
291
+
292
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
293
+ return not (rhs == self)
294
+
295
+ def __repr__(self) -> str:
296
+ return "CompactionProperty(%s)" % ", ".join(
297
+ k + "=" + repr(v) for k, v in self._values.items()
298
+ )
299
+
300
+
301
+ @jsii.interface(jsii_type="@aws-cdk/aws-s3tables-alpha.INamespace")
302
+ class INamespace(_aws_cdk_ceddda9d.IResource, typing_extensions.Protocol):
303
+ '''(experimental) Represents an S3 Tables Namespace.
304
+
305
+ :stability: experimental
306
+ '''
307
+
308
+ @builtins.property
309
+ @jsii.member(jsii_name="namespaceName")
310
+ def namespace_name(self) -> builtins.str:
311
+ '''(experimental) The name of this namespace.
312
+
313
+ :stability: experimental
314
+ :attribute: true
315
+ '''
316
+ ...
317
+
318
+ @builtins.property
319
+ @jsii.member(jsii_name="tableBucket")
320
+ def table_bucket(self) -> "ITableBucket":
321
+ '''(experimental) The table bucket which this namespace belongs to.
322
+
323
+ :stability: experimental
324
+ :attribute: true
325
+ '''
326
+ ...
327
+
328
+
329
+ class _INamespaceProxy(
330
+ jsii.proxy_for(_aws_cdk_ceddda9d.IResource), # type: ignore[misc]
331
+ ):
332
+ '''(experimental) Represents an S3 Tables Namespace.
333
+
334
+ :stability: experimental
335
+ '''
336
+
337
+ __jsii_type__: typing.ClassVar[str] = "@aws-cdk/aws-s3tables-alpha.INamespace"
338
+
339
+ @builtins.property
340
+ @jsii.member(jsii_name="namespaceName")
341
+ def namespace_name(self) -> builtins.str:
342
+ '''(experimental) The name of this namespace.
343
+
344
+ :stability: experimental
345
+ :attribute: true
346
+ '''
347
+ return typing.cast(builtins.str, jsii.get(self, "namespaceName"))
348
+
349
+ @builtins.property
350
+ @jsii.member(jsii_name="tableBucket")
351
+ def table_bucket(self) -> "ITableBucket":
352
+ '''(experimental) The table bucket which this namespace belongs to.
353
+
354
+ :stability: experimental
355
+ :attribute: true
356
+ '''
357
+ return typing.cast("ITableBucket", jsii.get(self, "tableBucket"))
358
+
359
+ # Adding a "__jsii_proxy_class__(): typing.Type" function to the interface
360
+ typing.cast(typing.Any, INamespace).__jsii_proxy_class__ = lambda : _INamespaceProxy
361
+
362
+
363
+ @jsii.interface(jsii_type="@aws-cdk/aws-s3tables-alpha.ITable")
364
+ class ITable(_aws_cdk_ceddda9d.IResource, typing_extensions.Protocol):
365
+ '''(experimental) Represents an S3 Table.
366
+
367
+ :stability: experimental
368
+ '''
369
+
370
+ @builtins.property
371
+ @jsii.member(jsii_name="tableArn")
372
+ def table_arn(self) -> builtins.str:
373
+ '''(experimental) The ARN of this table.
374
+
375
+ :stability: experimental
376
+ :attribute: true
377
+ '''
378
+ ...
379
+
380
+ @builtins.property
381
+ @jsii.member(jsii_name="tableName")
382
+ def table_name(self) -> builtins.str:
383
+ '''(experimental) The name of this table.
384
+
385
+ :stability: experimental
386
+ :attribute: true
387
+ '''
388
+ ...
389
+
390
+ @builtins.property
391
+ @jsii.member(jsii_name="account")
392
+ def account(self) -> typing.Optional[builtins.str]:
393
+ '''(experimental) The accountId containing this table.
394
+
395
+ :stability: experimental
396
+ :attribute: true
397
+ '''
398
+ ...
399
+
400
+ @builtins.property
401
+ @jsii.member(jsii_name="region")
402
+ def region(self) -> typing.Optional[builtins.str]:
403
+ '''(experimental) The region containing this table.
404
+
405
+ :stability: experimental
406
+ :attribute: true
407
+ '''
408
+ ...
409
+
410
+
411
+ class _ITableProxy(
412
+ jsii.proxy_for(_aws_cdk_ceddda9d.IResource), # type: ignore[misc]
413
+ ):
414
+ '''(experimental) Represents an S3 Table.
415
+
416
+ :stability: experimental
417
+ '''
418
+
419
+ __jsii_type__: typing.ClassVar[str] = "@aws-cdk/aws-s3tables-alpha.ITable"
420
+
421
+ @builtins.property
422
+ @jsii.member(jsii_name="tableArn")
423
+ def table_arn(self) -> builtins.str:
424
+ '''(experimental) The ARN of this table.
425
+
426
+ :stability: experimental
427
+ :attribute: true
428
+ '''
429
+ return typing.cast(builtins.str, jsii.get(self, "tableArn"))
430
+
431
+ @builtins.property
432
+ @jsii.member(jsii_name="tableName")
433
+ def table_name(self) -> builtins.str:
434
+ '''(experimental) The name of this table.
435
+
436
+ :stability: experimental
437
+ :attribute: true
438
+ '''
439
+ return typing.cast(builtins.str, jsii.get(self, "tableName"))
440
+
441
+ @builtins.property
442
+ @jsii.member(jsii_name="account")
443
+ def account(self) -> typing.Optional[builtins.str]:
444
+ '''(experimental) The accountId containing this table.
445
+
446
+ :stability: experimental
447
+ :attribute: true
448
+ '''
449
+ return typing.cast(typing.Optional[builtins.str], jsii.get(self, "account"))
450
+
451
+ @builtins.property
452
+ @jsii.member(jsii_name="region")
453
+ def region(self) -> typing.Optional[builtins.str]:
454
+ '''(experimental) The region containing this table.
455
+
456
+ :stability: experimental
457
+ :attribute: true
458
+ '''
459
+ return typing.cast(typing.Optional[builtins.str], jsii.get(self, "region"))
460
+
461
+ # Adding a "__jsii_proxy_class__(): typing.Type" function to the interface
462
+ typing.cast(typing.Any, ITable).__jsii_proxy_class__ = lambda : _ITableProxy
463
+
464
+
153
465
  @jsii.interface(jsii_type="@aws-cdk/aws-s3tables-alpha.ITableBucket")
154
466
  class ITableBucket(_aws_cdk_ceddda9d.IResource, typing_extensions.Protocol):
155
467
  '''(experimental) Interface definition for S3 Table Buckets.
@@ -388,63 +700,1066 @@ class _ITableBucketProxy(
388
700
  If encryption is used, permission to use the key to decrypt the contents
389
701
  of the bucket will also be granted to the same principal.
390
702
 
391
- :param identity: The principal to allow read permissions to.
392
- :param table_id: Allow the permissions to all tables using '*' or to single table by its unique ID.
703
+ :param identity: The principal to allow read permissions to.
704
+ :param table_id: Allow the permissions to all tables using '*' or to single table by its unique ID.
705
+
706
+ :stability: experimental
707
+ '''
708
+ if __debug__:
709
+ type_hints = typing.get_type_hints(_typecheckingstub__853d3e698d103ae1fe304d2239745ee798278fcd22f673c7ae8e9b33884c90a9)
710
+ check_type(argname="argument identity", value=identity, expected_type=type_hints["identity"])
711
+ check_type(argname="argument table_id", value=table_id, expected_type=type_hints["table_id"])
712
+ return typing.cast(_aws_cdk_aws_iam_ceddda9d.Grant, jsii.invoke(self, "grantRead", [identity, table_id]))
713
+
714
+ @jsii.member(jsii_name="grantReadWrite")
715
+ def grant_read_write(
716
+ self,
717
+ identity: _aws_cdk_aws_iam_ceddda9d.IGrantable,
718
+ table_id: builtins.str,
719
+ ) -> _aws_cdk_aws_iam_ceddda9d.Grant:
720
+ '''(experimental) Grant read and write permissions for this table bucket and its tables to an IAM principal (Role/Group/User).
721
+
722
+ If encryption is used, permission to use the key to encrypt/decrypt the contents
723
+ of the bucket will also be granted to the same principal.
724
+
725
+ :param identity: The principal to allow read and write permissions to.
726
+ :param table_id: Allow the permissions to all tables using '*' or to single table by its unique ID.
727
+
728
+ :stability: experimental
729
+ '''
730
+ if __debug__:
731
+ type_hints = typing.get_type_hints(_typecheckingstub__1c9eb5186509f26b2c015223d6e2614c16cc34d5c2608ca3903b133360e23990)
732
+ check_type(argname="argument identity", value=identity, expected_type=type_hints["identity"])
733
+ check_type(argname="argument table_id", value=table_id, expected_type=type_hints["table_id"])
734
+ return typing.cast(_aws_cdk_aws_iam_ceddda9d.Grant, jsii.invoke(self, "grantReadWrite", [identity, table_id]))
735
+
736
+ @jsii.member(jsii_name="grantWrite")
737
+ def grant_write(
738
+ self,
739
+ identity: _aws_cdk_aws_iam_ceddda9d.IGrantable,
740
+ table_id: builtins.str,
741
+ ) -> _aws_cdk_aws_iam_ceddda9d.Grant:
742
+ '''(experimental) Grant write permissions for this table bucket and its tables to an IAM principal (Role/Group/User).
743
+
744
+ If encryption is used, permission to use the key to encrypt the contents
745
+ of the bucket will also be granted to the same principal.
746
+
747
+ :param identity: The principal to allow write permissions to.
748
+ :param table_id: Allow the permissions to all tables using '*' or to single table by its unique ID.
749
+
750
+ :stability: experimental
751
+ '''
752
+ if __debug__:
753
+ type_hints = typing.get_type_hints(_typecheckingstub__65fa831e505e76e1fe23a8a8d8ce97bb97ebff683edbf67f37020df64c040fdb)
754
+ check_type(argname="argument identity", value=identity, expected_type=type_hints["identity"])
755
+ check_type(argname="argument table_id", value=table_id, expected_type=type_hints["table_id"])
756
+ return typing.cast(_aws_cdk_aws_iam_ceddda9d.Grant, jsii.invoke(self, "grantWrite", [identity, table_id]))
757
+
758
+ # Adding a "__jsii_proxy_class__(): typing.Type" function to the interface
759
+ typing.cast(typing.Any, ITableBucket).__jsii_proxy_class__ = lambda : _ITableBucketProxy
760
+
761
+
762
+ @jsii.data_type(
763
+ jsii_type="@aws-cdk/aws-s3tables-alpha.IcebergMetadataProperty",
764
+ jsii_struct_bases=[],
765
+ name_mapping={"iceberg_schema": "icebergSchema"},
766
+ )
767
+ class IcebergMetadataProperty:
768
+ def __init__(
769
+ self,
770
+ *,
771
+ iceberg_schema: typing.Union["IcebergSchemaProperty", typing.Dict[builtins.str, typing.Any]],
772
+ ) -> None:
773
+ '''(experimental) Contains details about the metadata for an Iceberg table.
774
+
775
+ :param iceberg_schema: (experimental) Contains details about the schema for an Iceberg table.
776
+
777
+ :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3tables-table-icebergmetadata.html
778
+ :stability: experimental
779
+ :exampleMetadata: infused
780
+
781
+ Example::
782
+
783
+ # Build a table
784
+ sample_table = Table(scope, "ExampleTable",
785
+ table_name="example_table",
786
+ namespace=namespace,
787
+ open_table_format=OpenTableFormat.ICEBERG,
788
+ without_metadata=True
789
+ )
790
+
791
+ # Build a table with an Iceberg Schema
792
+ sample_table_with_schema = Table(scope, "ExampleSchemaTable",
793
+ table_name="example_table_with_schema",
794
+ namespace=namespace,
795
+ open_table_format=OpenTableFormat.ICEBERG,
796
+ iceberg_metadata=IcebergMetadataProperty(
797
+ iceberg_schema=IcebergSchemaProperty(
798
+ schema_field_list=[SchemaFieldProperty(
799
+ name="id",
800
+ type="int",
801
+ required=True
802
+ ), SchemaFieldProperty(
803
+ name="name",
804
+ type="string"
805
+ )
806
+ ]
807
+ )
808
+ ),
809
+ compaction=CompactionProperty(
810
+ status=Status.ENABLED,
811
+ target_file_size_mb=128
812
+ ),
813
+ snapshot_management=SnapshotManagementProperty(
814
+ status=Status.ENABLED,
815
+ max_snapshot_age_hours=48,
816
+ min_snapshots_to_keep=5
817
+ )
818
+ )
819
+ '''
820
+ if isinstance(iceberg_schema, dict):
821
+ iceberg_schema = IcebergSchemaProperty(**iceberg_schema)
822
+ if __debug__:
823
+ type_hints = typing.get_type_hints(_typecheckingstub__f8230e6a4eadd2193ba7389b1a23bde451e68a07c19bcda56cba1c321d75d5f0)
824
+ check_type(argname="argument iceberg_schema", value=iceberg_schema, expected_type=type_hints["iceberg_schema"])
825
+ self._values: typing.Dict[builtins.str, typing.Any] = {
826
+ "iceberg_schema": iceberg_schema,
827
+ }
828
+
829
+ @builtins.property
830
+ def iceberg_schema(self) -> "IcebergSchemaProperty":
831
+ '''(experimental) Contains details about the schema for an Iceberg table.
832
+
833
+ :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3tables-table-icebergmetadata.html#cfn-s3tables-table-icebergmetadata-icebergschema
834
+ :stability: experimental
835
+ '''
836
+ result = self._values.get("iceberg_schema")
837
+ assert result is not None, "Required property 'iceberg_schema' is missing"
838
+ return typing.cast("IcebergSchemaProperty", result)
839
+
840
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
841
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
842
+
843
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
844
+ return not (rhs == self)
845
+
846
+ def __repr__(self) -> str:
847
+ return "IcebergMetadataProperty(%s)" % ", ".join(
848
+ k + "=" + repr(v) for k, v in self._values.items()
849
+ )
850
+
851
+
852
+ @jsii.data_type(
853
+ jsii_type="@aws-cdk/aws-s3tables-alpha.IcebergSchemaProperty",
854
+ jsii_struct_bases=[],
855
+ name_mapping={"schema_field_list": "schemaFieldList"},
856
+ )
857
+ class IcebergSchemaProperty:
858
+ def __init__(
859
+ self,
860
+ *,
861
+ schema_field_list: typing.Sequence[typing.Union["SchemaFieldProperty", typing.Dict[builtins.str, typing.Any]]],
862
+ ) -> None:
863
+ '''(experimental) Contains details about the schema for an Iceberg table.
864
+
865
+ :param schema_field_list: (experimental) Contains details about the schema for an Iceberg table.
866
+
867
+ :stability: experimental
868
+ :exampleMetadata: infused
869
+
870
+ Example::
871
+
872
+ # Build a table
873
+ sample_table = Table(scope, "ExampleTable",
874
+ table_name="example_table",
875
+ namespace=namespace,
876
+ open_table_format=OpenTableFormat.ICEBERG,
877
+ without_metadata=True
878
+ )
879
+
880
+ # Build a table with an Iceberg Schema
881
+ sample_table_with_schema = Table(scope, "ExampleSchemaTable",
882
+ table_name="example_table_with_schema",
883
+ namespace=namespace,
884
+ open_table_format=OpenTableFormat.ICEBERG,
885
+ iceberg_metadata=IcebergMetadataProperty(
886
+ iceberg_schema=IcebergSchemaProperty(
887
+ schema_field_list=[SchemaFieldProperty(
888
+ name="id",
889
+ type="int",
890
+ required=True
891
+ ), SchemaFieldProperty(
892
+ name="name",
893
+ type="string"
894
+ )
895
+ ]
896
+ )
897
+ ),
898
+ compaction=CompactionProperty(
899
+ status=Status.ENABLED,
900
+ target_file_size_mb=128
901
+ ),
902
+ snapshot_management=SnapshotManagementProperty(
903
+ status=Status.ENABLED,
904
+ max_snapshot_age_hours=48,
905
+ min_snapshots_to_keep=5
906
+ )
907
+ )
908
+ '''
909
+ if __debug__:
910
+ type_hints = typing.get_type_hints(_typecheckingstub__f4da2961c1ead632b855491f63cf76c4886c0e7a3d1795c1533655124a5dccb6)
911
+ check_type(argname="argument schema_field_list", value=schema_field_list, expected_type=type_hints["schema_field_list"])
912
+ self._values: typing.Dict[builtins.str, typing.Any] = {
913
+ "schema_field_list": schema_field_list,
914
+ }
915
+
916
+ @builtins.property
917
+ def schema_field_list(self) -> typing.List["SchemaFieldProperty"]:
918
+ '''(experimental) Contains details about the schema for an Iceberg table.
919
+
920
+ :stability: experimental
921
+ '''
922
+ result = self._values.get("schema_field_list")
923
+ assert result is not None, "Required property 'schema_field_list' is missing"
924
+ return typing.cast(typing.List["SchemaFieldProperty"], result)
925
+
926
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
927
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
928
+
929
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
930
+ return not (rhs == self)
931
+
932
+ def __repr__(self) -> str:
933
+ return "IcebergSchemaProperty(%s)" % ", ".join(
934
+ k + "=" + repr(v) for k, v in self._values.items()
935
+ )
936
+
937
+
938
+ @jsii.implements(INamespace)
939
+ class Namespace(
940
+ _aws_cdk_ceddda9d.Resource,
941
+ metaclass=jsii.JSIIMeta,
942
+ jsii_type="@aws-cdk/aws-s3tables-alpha.Namespace",
943
+ ):
944
+ '''(experimental) An S3 Tables Namespace with helpers.
945
+
946
+ A namespace is a logical container for tables within a table bucket.
947
+
948
+ :stability: experimental
949
+ :exampleMetadata: infused
950
+
951
+ Example::
952
+
953
+ # Build a namespace
954
+ sample_namespace = Namespace(scope, "ExampleNamespace",
955
+ namespace_name="example-namespace-1",
956
+ table_bucket=table_bucket
957
+ )
958
+ '''
959
+
960
+ def __init__(
961
+ self,
962
+ scope: _constructs_77d1e7e8.Construct,
963
+ id: builtins.str,
964
+ *,
965
+ namespace_name: builtins.str,
966
+ table_bucket: ITableBucket,
967
+ removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
968
+ ) -> None:
969
+ '''
970
+ :param scope: -
971
+ :param id: -
972
+ :param namespace_name: (experimental) A name for the namespace.
973
+ :param table_bucket: (experimental) The table bucket this namespace belongs to.
974
+ :param removal_policy: (experimental) Policy to apply when the policy is removed from this stack. Default: RemovalPolicy.DESTROY
975
+
976
+ :stability: experimental
977
+ '''
978
+ if __debug__:
979
+ type_hints = typing.get_type_hints(_typecheckingstub__ea3444f2b1f25cee0bac27bf1e4c044f18ded5f025356448c35a47f4611915d5)
980
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
981
+ check_type(argname="argument id", value=id, expected_type=type_hints["id"])
982
+ props = NamespaceProps(
983
+ namespace_name=namespace_name,
984
+ table_bucket=table_bucket,
985
+ removal_policy=removal_policy,
986
+ )
987
+
988
+ jsii.create(self.__class__, self, [scope, id, props])
989
+
990
+ @jsii.member(jsii_name="fromNamespaceAttributes")
991
+ @builtins.classmethod
992
+ def from_namespace_attributes(
993
+ cls,
994
+ scope: _constructs_77d1e7e8.Construct,
995
+ id: builtins.str,
996
+ *,
997
+ namespace_name: builtins.str,
998
+ table_bucket: ITableBucket,
999
+ ) -> INamespace:
1000
+ '''(experimental) Import an existing namespace from its attributes.
1001
+
1002
+ :param scope: -
1003
+ :param id: -
1004
+ :param namespace_name: (experimental) The name of the namespace.
1005
+ :param table_bucket: (experimental) The table bucket this namespace belongs to.
1006
+
1007
+ :stability: experimental
1008
+ '''
1009
+ if __debug__:
1010
+ type_hints = typing.get_type_hints(_typecheckingstub__429e6100662356607de36bc4f09397c07482d4becdff99cdf1257c1b95547276)
1011
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
1012
+ check_type(argname="argument id", value=id, expected_type=type_hints["id"])
1013
+ attrs = NamespaceAttributes(
1014
+ namespace_name=namespace_name, table_bucket=table_bucket
1015
+ )
1016
+
1017
+ return typing.cast(INamespace, jsii.sinvoke(cls, "fromNamespaceAttributes", [scope, id, attrs]))
1018
+
1019
+ @jsii.member(jsii_name="validateNamespaceName")
1020
+ @builtins.classmethod
1021
+ def validate_namespace_name(cls, namespace_name: builtins.str) -> None:
1022
+ '''(experimental) See https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-naming.html.
1023
+
1024
+ :param namespace_name: Name of the namespace.
1025
+
1026
+ :stability: experimental
1027
+ :throws: UnscopedValidationError if any naming errors are detected
1028
+ '''
1029
+ if __debug__:
1030
+ type_hints = typing.get_type_hints(_typecheckingstub__4a07351eb257958d2290e548252c46a7c8963c7bc2f700e83671f819e4b7dbd5)
1031
+ check_type(argname="argument namespace_name", value=namespace_name, expected_type=type_hints["namespace_name"])
1032
+ return typing.cast(None, jsii.sinvoke(cls, "validateNamespaceName", [namespace_name]))
1033
+
1034
+ @jsii.python.classproperty
1035
+ @jsii.member(jsii_name="PROPERTY_INJECTION_ID")
1036
+ def PROPERTY_INJECTION_ID(cls) -> builtins.str:
1037
+ '''(experimental) Uniquely identifies this class.
1038
+
1039
+ :stability: experimental
1040
+ '''
1041
+ return typing.cast(builtins.str, jsii.sget(cls, "PROPERTY_INJECTION_ID"))
1042
+
1043
+ @builtins.property
1044
+ @jsii.member(jsii_name="namespaceName")
1045
+ def namespace_name(self) -> builtins.str:
1046
+ '''(experimental) The name of this namespace.
1047
+
1048
+ :stability: experimental
1049
+ '''
1050
+ return typing.cast(builtins.str, jsii.get(self, "namespaceName"))
1051
+
1052
+ @builtins.property
1053
+ @jsii.member(jsii_name="tableBucket")
1054
+ def table_bucket(self) -> ITableBucket:
1055
+ '''(experimental) The table bucket which this namespace belongs to.
1056
+
1057
+ :stability: experimental
1058
+ '''
1059
+ return typing.cast(ITableBucket, jsii.get(self, "tableBucket"))
1060
+
1061
+
1062
+ @jsii.data_type(
1063
+ jsii_type="@aws-cdk/aws-s3tables-alpha.NamespaceAttributes",
1064
+ jsii_struct_bases=[],
1065
+ name_mapping={"namespace_name": "namespaceName", "table_bucket": "tableBucket"},
1066
+ )
1067
+ class NamespaceAttributes:
1068
+ def __init__(
1069
+ self,
1070
+ *,
1071
+ namespace_name: builtins.str,
1072
+ table_bucket: ITableBucket,
1073
+ ) -> None:
1074
+ '''(experimental) Attributes for importing an existing namespace.
1075
+
1076
+ :param namespace_name: (experimental) The name of the namespace.
1077
+ :param table_bucket: (experimental) The table bucket this namespace belongs to.
1078
+
1079
+ :stability: experimental
1080
+ :exampleMetadata: fixture=_generated
1081
+
1082
+ Example::
1083
+
1084
+ # The code below shows an example of how to instantiate this type.
1085
+ # The values are placeholders you should change.
1086
+ import aws_cdk.aws_s3tables_alpha as s3tables_alpha
1087
+
1088
+ # table_bucket: s3tables_alpha.TableBucket
1089
+
1090
+ namespace_attributes = s3tables_alpha.NamespaceAttributes(
1091
+ namespace_name="namespaceName",
1092
+ table_bucket=table_bucket
1093
+ )
1094
+ '''
1095
+ if __debug__:
1096
+ type_hints = typing.get_type_hints(_typecheckingstub__8f79f8c2998fe357462fbff82a75e82ed3236dd34caffcf6f6267cffcdda3275)
1097
+ check_type(argname="argument namespace_name", value=namespace_name, expected_type=type_hints["namespace_name"])
1098
+ check_type(argname="argument table_bucket", value=table_bucket, expected_type=type_hints["table_bucket"])
1099
+ self._values: typing.Dict[builtins.str, typing.Any] = {
1100
+ "namespace_name": namespace_name,
1101
+ "table_bucket": table_bucket,
1102
+ }
1103
+
1104
+ @builtins.property
1105
+ def namespace_name(self) -> builtins.str:
1106
+ '''(experimental) The name of the namespace.
1107
+
1108
+ :stability: experimental
1109
+ '''
1110
+ result = self._values.get("namespace_name")
1111
+ assert result is not None, "Required property 'namespace_name' is missing"
1112
+ return typing.cast(builtins.str, result)
1113
+
1114
+ @builtins.property
1115
+ def table_bucket(self) -> ITableBucket:
1116
+ '''(experimental) The table bucket this namespace belongs to.
1117
+
1118
+ :stability: experimental
1119
+ '''
1120
+ result = self._values.get("table_bucket")
1121
+ assert result is not None, "Required property 'table_bucket' is missing"
1122
+ return typing.cast(ITableBucket, result)
1123
+
1124
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
1125
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
1126
+
1127
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
1128
+ return not (rhs == self)
1129
+
1130
+ def __repr__(self) -> str:
1131
+ return "NamespaceAttributes(%s)" % ", ".join(
1132
+ k + "=" + repr(v) for k, v in self._values.items()
1133
+ )
1134
+
1135
+
1136
+ @jsii.data_type(
1137
+ jsii_type="@aws-cdk/aws-s3tables-alpha.NamespaceProps",
1138
+ jsii_struct_bases=[],
1139
+ name_mapping={
1140
+ "namespace_name": "namespaceName",
1141
+ "table_bucket": "tableBucket",
1142
+ "removal_policy": "removalPolicy",
1143
+ },
1144
+ )
1145
+ class NamespaceProps:
1146
+ def __init__(
1147
+ self,
1148
+ *,
1149
+ namespace_name: builtins.str,
1150
+ table_bucket: ITableBucket,
1151
+ removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
1152
+ ) -> None:
1153
+ '''(experimental) Parameters for constructing a Namespace.
1154
+
1155
+ :param namespace_name: (experimental) A name for the namespace.
1156
+ :param table_bucket: (experimental) The table bucket this namespace belongs to.
1157
+ :param removal_policy: (experimental) Policy to apply when the policy is removed from this stack. Default: RemovalPolicy.DESTROY
1158
+
1159
+ :stability: experimental
1160
+ :exampleMetadata: infused
1161
+
1162
+ Example::
1163
+
1164
+ # Build a namespace
1165
+ sample_namespace = Namespace(scope, "ExampleNamespace",
1166
+ namespace_name="example-namespace-1",
1167
+ table_bucket=table_bucket
1168
+ )
1169
+ '''
1170
+ if __debug__:
1171
+ type_hints = typing.get_type_hints(_typecheckingstub__fd18f87a98f23ccaea0f0c36db6b294de2ffbbb509594c9bfa49f26b6b0d0e7a)
1172
+ check_type(argname="argument namespace_name", value=namespace_name, expected_type=type_hints["namespace_name"])
1173
+ check_type(argname="argument table_bucket", value=table_bucket, expected_type=type_hints["table_bucket"])
1174
+ check_type(argname="argument removal_policy", value=removal_policy, expected_type=type_hints["removal_policy"])
1175
+ self._values: typing.Dict[builtins.str, typing.Any] = {
1176
+ "namespace_name": namespace_name,
1177
+ "table_bucket": table_bucket,
1178
+ }
1179
+ if removal_policy is not None:
1180
+ self._values["removal_policy"] = removal_policy
1181
+
1182
+ @builtins.property
1183
+ def namespace_name(self) -> builtins.str:
1184
+ '''(experimental) A name for the namespace.
1185
+
1186
+ :stability: experimental
1187
+ '''
1188
+ result = self._values.get("namespace_name")
1189
+ assert result is not None, "Required property 'namespace_name' is missing"
1190
+ return typing.cast(builtins.str, result)
1191
+
1192
+ @builtins.property
1193
+ def table_bucket(self) -> ITableBucket:
1194
+ '''(experimental) The table bucket this namespace belongs to.
1195
+
1196
+ :stability: experimental
1197
+ '''
1198
+ result = self._values.get("table_bucket")
1199
+ assert result is not None, "Required property 'table_bucket' is missing"
1200
+ return typing.cast(ITableBucket, result)
1201
+
1202
+ @builtins.property
1203
+ def removal_policy(self) -> typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy]:
1204
+ '''(experimental) Policy to apply when the policy is removed from this stack.
1205
+
1206
+ :default: RemovalPolicy.DESTROY
1207
+
1208
+ :stability: experimental
1209
+ '''
1210
+ result = self._values.get("removal_policy")
1211
+ return typing.cast(typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy], result)
1212
+
1213
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
1214
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
1215
+
1216
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
1217
+ return not (rhs == self)
1218
+
1219
+ def __repr__(self) -> str:
1220
+ return "NamespaceProps(%s)" % ", ".join(
1221
+ k + "=" + repr(v) for k, v in self._values.items()
1222
+ )
1223
+
1224
+
1225
+ @jsii.enum(jsii_type="@aws-cdk/aws-s3tables-alpha.OpenTableFormat")
1226
+ class OpenTableFormat(enum.Enum):
1227
+ '''(experimental) Supported open table formats.
1228
+
1229
+ :stability: experimental
1230
+ '''
1231
+
1232
+ ICEBERG = "ICEBERG"
1233
+ '''(experimental) Apache Iceberg table format.
1234
+
1235
+ :stability: experimental
1236
+ '''
1237
+
1238
+
1239
+ @jsii.data_type(
1240
+ jsii_type="@aws-cdk/aws-s3tables-alpha.SchemaFieldProperty",
1241
+ jsii_struct_bases=[],
1242
+ name_mapping={"name": "name", "type": "type", "required": "required"},
1243
+ )
1244
+ class SchemaFieldProperty:
1245
+ def __init__(
1246
+ self,
1247
+ *,
1248
+ name: builtins.str,
1249
+ type: builtins.str,
1250
+ required: typing.Optional[builtins.bool] = None,
1251
+ ) -> None:
1252
+ '''(experimental) Contains details about a schema field.
1253
+
1254
+ :param name: (experimental) The name of the field.
1255
+ :param type: (experimental) The field type. S3 Tables supports all Apache Iceberg primitive types. For more information, see the `Apache Iceberg documentation <https://docs.aws.amazon.com/https://iceberg.apache.org/spec/#primitive-types>`_.
1256
+ :param required: (experimental) A Boolean value that specifies whether values are required for each row in this field. By default, this is ``false`` and null values are allowed in the field. If this is ``true``, the field does not allow null values. Default: false
1257
+
1258
+ :stability: experimental
1259
+ :exampleMetadata: fixture=_generated
1260
+
1261
+ Example::
1262
+
1263
+ # The code below shows an example of how to instantiate this type.
1264
+ # The values are placeholders you should change.
1265
+ import aws_cdk.aws_s3tables_alpha as s3tables_alpha
1266
+
1267
+ schema_field_property = s3tables_alpha.SchemaFieldProperty(
1268
+ name="name",
1269
+ type="type",
1270
+
1271
+ # the properties below are optional
1272
+ required=False
1273
+ )
1274
+ '''
1275
+ if __debug__:
1276
+ type_hints = typing.get_type_hints(_typecheckingstub__798c061a7214691172814263e161286845f9f56262e641ae55c93d363ce227c1)
1277
+ check_type(argname="argument name", value=name, expected_type=type_hints["name"])
1278
+ check_type(argname="argument type", value=type, expected_type=type_hints["type"])
1279
+ check_type(argname="argument required", value=required, expected_type=type_hints["required"])
1280
+ self._values: typing.Dict[builtins.str, typing.Any] = {
1281
+ "name": name,
1282
+ "type": type,
1283
+ }
1284
+ if required is not None:
1285
+ self._values["required"] = required
1286
+
1287
+ @builtins.property
1288
+ def name(self) -> builtins.str:
1289
+ '''(experimental) The name of the field.
1290
+
1291
+ :stability: experimental
1292
+ '''
1293
+ result = self._values.get("name")
1294
+ assert result is not None, "Required property 'name' is missing"
1295
+ return typing.cast(builtins.str, result)
1296
+
1297
+ @builtins.property
1298
+ def type(self) -> builtins.str:
1299
+ '''(experimental) The field type.
1300
+
1301
+ S3 Tables supports all Apache Iceberg primitive types. For more information, see the `Apache Iceberg documentation <https://docs.aws.amazon.com/https://iceberg.apache.org/spec/#primitive-types>`_.
1302
+
1303
+ :stability: experimental
1304
+ '''
1305
+ result = self._values.get("type")
1306
+ assert result is not None, "Required property 'type' is missing"
1307
+ return typing.cast(builtins.str, result)
1308
+
1309
+ @builtins.property
1310
+ def required(self) -> typing.Optional[builtins.bool]:
1311
+ '''(experimental) A Boolean value that specifies whether values are required for each row in this field.
1312
+
1313
+ By default, this is ``false`` and null values are allowed in the field. If this is ``true``, the field does not allow null values.
1314
+
1315
+ :default: false
1316
+
1317
+ :stability: experimental
1318
+ '''
1319
+ result = self._values.get("required")
1320
+ return typing.cast(typing.Optional[builtins.bool], result)
1321
+
1322
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
1323
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
1324
+
1325
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
1326
+ return not (rhs == self)
1327
+
1328
+ def __repr__(self) -> str:
1329
+ return "SchemaFieldProperty(%s)" % ", ".join(
1330
+ k + "=" + repr(v) for k, v in self._values.items()
1331
+ )
1332
+
1333
+
1334
+ @jsii.data_type(
1335
+ jsii_type="@aws-cdk/aws-s3tables-alpha.SnapshotManagementProperty",
1336
+ jsii_struct_bases=[],
1337
+ name_mapping={
1338
+ "max_snapshot_age_hours": "maxSnapshotAgeHours",
1339
+ "min_snapshots_to_keep": "minSnapshotsToKeep",
1340
+ "status": "status",
1341
+ },
1342
+ )
1343
+ class SnapshotManagementProperty:
1344
+ def __init__(
1345
+ self,
1346
+ *,
1347
+ max_snapshot_age_hours: typing.Optional[jsii.Number] = None,
1348
+ min_snapshots_to_keep: typing.Optional[jsii.Number] = None,
1349
+ status: typing.Optional["Status"] = None,
1350
+ ) -> None:
1351
+ '''(experimental) Contains details about the snapshot management settings for an Iceberg table.
1352
+
1353
+ A snapshot is expired when it exceeds MinSnapshotsToKeep and MaxSnapshotAgeHours.
1354
+
1355
+ :param max_snapshot_age_hours: (experimental) The maximum age of a snapshot before it can be expired. Default: - No maximum age
1356
+ :param min_snapshots_to_keep: (experimental) The minimum number of snapshots to keep. Default: - No minimum number
1357
+ :param status: (experimental) Indicates whether the SnapshotManagement maintenance action is enabled. Default: - Not specified
1358
+
1359
+ :default: - No snapshot management settings
1360
+
1361
+ :stability: experimental
1362
+ :exampleMetadata: infused
1363
+
1364
+ Example::
1365
+
1366
+ # Build a table
1367
+ sample_table = Table(scope, "ExampleTable",
1368
+ table_name="example_table",
1369
+ namespace=namespace,
1370
+ open_table_format=OpenTableFormat.ICEBERG,
1371
+ without_metadata=True
1372
+ )
1373
+
1374
+ # Build a table with an Iceberg Schema
1375
+ sample_table_with_schema = Table(scope, "ExampleSchemaTable",
1376
+ table_name="example_table_with_schema",
1377
+ namespace=namespace,
1378
+ open_table_format=OpenTableFormat.ICEBERG,
1379
+ iceberg_metadata=IcebergMetadataProperty(
1380
+ iceberg_schema=IcebergSchemaProperty(
1381
+ schema_field_list=[SchemaFieldProperty(
1382
+ name="id",
1383
+ type="int",
1384
+ required=True
1385
+ ), SchemaFieldProperty(
1386
+ name="name",
1387
+ type="string"
1388
+ )
1389
+ ]
1390
+ )
1391
+ ),
1392
+ compaction=CompactionProperty(
1393
+ status=Status.ENABLED,
1394
+ target_file_size_mb=128
1395
+ ),
1396
+ snapshot_management=SnapshotManagementProperty(
1397
+ status=Status.ENABLED,
1398
+ max_snapshot_age_hours=48,
1399
+ min_snapshots_to_keep=5
1400
+ )
1401
+ )
1402
+ '''
1403
+ if __debug__:
1404
+ type_hints = typing.get_type_hints(_typecheckingstub__74aebe9bead3fb2bce88d441c25d815202759baedd02c817c6e08d2e1dfad2b2)
1405
+ check_type(argname="argument max_snapshot_age_hours", value=max_snapshot_age_hours, expected_type=type_hints["max_snapshot_age_hours"])
1406
+ check_type(argname="argument min_snapshots_to_keep", value=min_snapshots_to_keep, expected_type=type_hints["min_snapshots_to_keep"])
1407
+ check_type(argname="argument status", value=status, expected_type=type_hints["status"])
1408
+ self._values: typing.Dict[builtins.str, typing.Any] = {}
1409
+ if max_snapshot_age_hours is not None:
1410
+ self._values["max_snapshot_age_hours"] = max_snapshot_age_hours
1411
+ if min_snapshots_to_keep is not None:
1412
+ self._values["min_snapshots_to_keep"] = min_snapshots_to_keep
1413
+ if status is not None:
1414
+ self._values["status"] = status
1415
+
1416
+ @builtins.property
1417
+ def max_snapshot_age_hours(self) -> typing.Optional[jsii.Number]:
1418
+ '''(experimental) The maximum age of a snapshot before it can be expired.
1419
+
1420
+ :default: - No maximum age
1421
+
1422
+ :stability: experimental
1423
+ '''
1424
+ result = self._values.get("max_snapshot_age_hours")
1425
+ return typing.cast(typing.Optional[jsii.Number], result)
1426
+
1427
+ @builtins.property
1428
+ def min_snapshots_to_keep(self) -> typing.Optional[jsii.Number]:
1429
+ '''(experimental) The minimum number of snapshots to keep.
1430
+
1431
+ :default: - No minimum number
1432
+
1433
+ :stability: experimental
1434
+ '''
1435
+ result = self._values.get("min_snapshots_to_keep")
1436
+ return typing.cast(typing.Optional[jsii.Number], result)
1437
+
1438
+ @builtins.property
1439
+ def status(self) -> typing.Optional["Status"]:
1440
+ '''(experimental) Indicates whether the SnapshotManagement maintenance action is enabled.
1441
+
1442
+ :default: - Not specified
1443
+
1444
+ :stability: experimental
1445
+ '''
1446
+ result = self._values.get("status")
1447
+ return typing.cast(typing.Optional["Status"], result)
1448
+
1449
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
1450
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
1451
+
1452
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
1453
+ return not (rhs == self)
1454
+
1455
+ def __repr__(self) -> str:
1456
+ return "SnapshotManagementProperty(%s)" % ", ".join(
1457
+ k + "=" + repr(v) for k, v in self._values.items()
1458
+ )
1459
+
1460
+
1461
+ @jsii.enum(jsii_type="@aws-cdk/aws-s3tables-alpha.Status")
1462
+ class Status(enum.Enum):
1463
+ '''(experimental) Status values for maintenance actions.
1464
+
1465
+ :stability: experimental
1466
+ :exampleMetadata: infused
1467
+
1468
+ Example::
1469
+
1470
+ # Build a table
1471
+ sample_table = Table(scope, "ExampleTable",
1472
+ table_name="example_table",
1473
+ namespace=namespace,
1474
+ open_table_format=OpenTableFormat.ICEBERG,
1475
+ without_metadata=True
1476
+ )
1477
+
1478
+ # Build a table with an Iceberg Schema
1479
+ sample_table_with_schema = Table(scope, "ExampleSchemaTable",
1480
+ table_name="example_table_with_schema",
1481
+ namespace=namespace,
1482
+ open_table_format=OpenTableFormat.ICEBERG,
1483
+ iceberg_metadata=IcebergMetadataProperty(
1484
+ iceberg_schema=IcebergSchemaProperty(
1485
+ schema_field_list=[SchemaFieldProperty(
1486
+ name="id",
1487
+ type="int",
1488
+ required=True
1489
+ ), SchemaFieldProperty(
1490
+ name="name",
1491
+ type="string"
1492
+ )
1493
+ ]
1494
+ )
1495
+ ),
1496
+ compaction=CompactionProperty(
1497
+ status=Status.ENABLED,
1498
+ target_file_size_mb=128
1499
+ ),
1500
+ snapshot_management=SnapshotManagementProperty(
1501
+ status=Status.ENABLED,
1502
+ max_snapshot_age_hours=48,
1503
+ min_snapshots_to_keep=5
1504
+ )
1505
+ )
1506
+ '''
1507
+
1508
+ ENABLED = "ENABLED"
1509
+ '''(experimental) Enable the maintenance action.
1510
+
1511
+ :stability: experimental
1512
+ '''
1513
+ DISABLED = "DISABLED"
1514
+ '''(experimental) Disable the maintenance action.
1515
+
1516
+ :stability: experimental
1517
+ '''
1518
+
1519
+
1520
+ @jsii.implements(ITable)
1521
+ class Table(
1522
+ _aws_cdk_ceddda9d.Resource,
1523
+ metaclass=jsii.JSIIMeta,
1524
+ jsii_type="@aws-cdk/aws-s3tables-alpha.Table",
1525
+ ):
1526
+ '''(experimental) An S3 Table with helpers.
1527
+
1528
+ :stability: experimental
1529
+ :exampleMetadata: infused
1530
+
1531
+ Example::
1532
+
1533
+ # Build a table
1534
+ sample_table = Table(scope, "ExampleTable",
1535
+ table_name="example_table",
1536
+ namespace=namespace,
1537
+ open_table_format=OpenTableFormat.ICEBERG,
1538
+ without_metadata=True
1539
+ )
1540
+
1541
+ # Build a table with an Iceberg Schema
1542
+ sample_table_with_schema = Table(scope, "ExampleSchemaTable",
1543
+ table_name="example_table_with_schema",
1544
+ namespace=namespace,
1545
+ open_table_format=OpenTableFormat.ICEBERG,
1546
+ iceberg_metadata=IcebergMetadataProperty(
1547
+ iceberg_schema=IcebergSchemaProperty(
1548
+ schema_field_list=[SchemaFieldProperty(
1549
+ name="id",
1550
+ type="int",
1551
+ required=True
1552
+ ), SchemaFieldProperty(
1553
+ name="name",
1554
+ type="string"
1555
+ )
1556
+ ]
1557
+ )
1558
+ ),
1559
+ compaction=CompactionProperty(
1560
+ status=Status.ENABLED,
1561
+ target_file_size_mb=128
1562
+ ),
1563
+ snapshot_management=SnapshotManagementProperty(
1564
+ status=Status.ENABLED,
1565
+ max_snapshot_age_hours=48,
1566
+ min_snapshots_to_keep=5
1567
+ )
1568
+ )
1569
+ '''
1570
+
1571
+ def __init__(
1572
+ self,
1573
+ scope: _constructs_77d1e7e8.Construct,
1574
+ id: builtins.str,
1575
+ *,
1576
+ namespace: INamespace,
1577
+ open_table_format: OpenTableFormat,
1578
+ table_name: builtins.str,
1579
+ compaction: typing.Optional[typing.Union[CompactionProperty, typing.Dict[builtins.str, typing.Any]]] = None,
1580
+ iceberg_metadata: typing.Optional[typing.Union[IcebergMetadataProperty, typing.Dict[builtins.str, typing.Any]]] = None,
1581
+ removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
1582
+ snapshot_management: typing.Optional[typing.Union[SnapshotManagementProperty, typing.Dict[builtins.str, typing.Any]]] = None,
1583
+ without_metadata: typing.Optional[builtins.bool] = None,
1584
+ ) -> None:
1585
+ '''
1586
+ :param scope: -
1587
+ :param id: -
1588
+ :param namespace: (experimental) The namespace under which this table is created.
1589
+ :param open_table_format: (experimental) Format of this table. Currently, the only supported value is OpenTableFormat.ICEBERG.
1590
+ :param table_name: (experimental) Name of this table, unique within the namespace.
1591
+ :param compaction: (experimental) Settings governing the Compaction maintenance action. Default: Amazon S3 selects the best compaction strategy based on your table sort order.
1592
+ :param iceberg_metadata: (experimental) Contains details about the metadata for an Iceberg table. Default: table is created without any metadata
1593
+ :param removal_policy: (experimental) Controls what happens to this table it it stoped being managed by cloudformation. Default: RETAIN
1594
+ :param snapshot_management: (experimental) Contains details about the snapshot management settings for an Iceberg table. Default: enabled: MinimumSnapshots is 1 by default and MaximumSnapshotAge is 120 hours by default.
1595
+ :param without_metadata: (experimental) If true, indicates that you don't want to specify a schema for the table. This property is mutually exclusive to 'IcebergMetadata'. Default: false
1596
+
1597
+ :stability: experimental
1598
+ '''
1599
+ if __debug__:
1600
+ type_hints = typing.get_type_hints(_typecheckingstub__9e5378cdcc21935af950b3c144ea6d1e345b4c98cccbf5fe2a92dff410ed06cf)
1601
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
1602
+ check_type(argname="argument id", value=id, expected_type=type_hints["id"])
1603
+ props = TableProps(
1604
+ namespace=namespace,
1605
+ open_table_format=open_table_format,
1606
+ table_name=table_name,
1607
+ compaction=compaction,
1608
+ iceberg_metadata=iceberg_metadata,
1609
+ removal_policy=removal_policy,
1610
+ snapshot_management=snapshot_management,
1611
+ without_metadata=without_metadata,
1612
+ )
1613
+
1614
+ jsii.create(self.__class__, self, [scope, id, props])
1615
+
1616
+ @jsii.member(jsii_name="fromTableAttributes")
1617
+ @builtins.classmethod
1618
+ def from_table_attributes(
1619
+ cls,
1620
+ scope: _constructs_77d1e7e8.Construct,
1621
+ id: builtins.str,
1622
+ *,
1623
+ table_arn: builtins.str,
1624
+ table_name: builtins.str,
1625
+ ) -> ITable:
1626
+ '''(experimental) Defines a Table construct that represents an external table.
1627
+
1628
+ :param scope: The parent creating construct (usually ``this``).
1629
+ :param id: The construct's name.
1630
+ :param table_arn: (experimental) The table's ARN.
1631
+ :param table_name: (experimental) Name of this table.
1632
+
1633
+ :stability: experimental
1634
+ '''
1635
+ if __debug__:
1636
+ type_hints = typing.get_type_hints(_typecheckingstub__c92fbe73fcedcf34bbbc9a2359a274432437ec47317161e4c88ea9d209155ffd)
1637
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
1638
+ check_type(argname="argument id", value=id, expected_type=type_hints["id"])
1639
+ attrs = TableAttributes(table_arn=table_arn, table_name=table_name)
1640
+
1641
+ return typing.cast(ITable, jsii.sinvoke(cls, "fromTableAttributes", [scope, id, attrs]))
1642
+
1643
+ @jsii.member(jsii_name="validateTableName")
1644
+ @builtins.classmethod
1645
+ def validate_table_name(cls, table_name: builtins.str) -> None:
1646
+ '''(experimental) See https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-naming.html.
1647
+
1648
+ :param table_name: Name of the table.
1649
+
1650
+ :stability: experimental
1651
+ :throws: UnscopedValidationError if any naming errors are detected
1652
+ '''
1653
+ if __debug__:
1654
+ type_hints = typing.get_type_hints(_typecheckingstub__536e137c7e7454507b9ec796514d014c3913e8c528dfeba351b5e0e36ba8e228)
1655
+ check_type(argname="argument table_name", value=table_name, expected_type=type_hints["table_name"])
1656
+ return typing.cast(None, jsii.sinvoke(cls, "validateTableName", [table_name]))
1657
+
1658
+ @jsii.python.classproperty
1659
+ @jsii.member(jsii_name="PROPERTY_INJECTION_ID")
1660
+ def PROPERTY_INJECTION_ID(cls) -> builtins.str:
1661
+ '''(experimental) Uniquely identifies this class.
1662
+
1663
+ :stability: experimental
1664
+ '''
1665
+ return typing.cast(builtins.str, jsii.sget(cls, "PROPERTY_INJECTION_ID"))
1666
+
1667
+ @builtins.property
1668
+ @jsii.member(jsii_name="namespace")
1669
+ def namespace(self) -> INamespace:
1670
+ '''(experimental) The namespace containing this table.
1671
+
1672
+ :stability: experimental
1673
+ '''
1674
+ return typing.cast(INamespace, jsii.get(self, "namespace"))
1675
+
1676
+ @builtins.property
1677
+ @jsii.member(jsii_name="tableArn")
1678
+ def table_arn(self) -> builtins.str:
1679
+ '''(experimental) The unique Amazon Resource Name (arn) of this table.
1680
+
1681
+ :stability: experimental
1682
+ '''
1683
+ return typing.cast(builtins.str, jsii.get(self, "tableArn"))
1684
+
1685
+ @builtins.property
1686
+ @jsii.member(jsii_name="tableName")
1687
+ def table_name(self) -> builtins.str:
1688
+ '''(experimental) The name of this table.
393
1689
 
394
1690
  :stability: experimental
395
1691
  '''
396
- if __debug__:
397
- type_hints = typing.get_type_hints(_typecheckingstub__853d3e698d103ae1fe304d2239745ee798278fcd22f673c7ae8e9b33884c90a9)
398
- check_type(argname="argument identity", value=identity, expected_type=type_hints["identity"])
399
- check_type(argname="argument table_id", value=table_id, expected_type=type_hints["table_id"])
400
- return typing.cast(_aws_cdk_aws_iam_ceddda9d.Grant, jsii.invoke(self, "grantRead", [identity, table_id]))
1692
+ return typing.cast(builtins.str, jsii.get(self, "tableName"))
401
1693
 
402
- @jsii.member(jsii_name="grantReadWrite")
403
- def grant_read_write(
404
- self,
405
- identity: _aws_cdk_aws_iam_ceddda9d.IGrantable,
406
- table_id: builtins.str,
407
- ) -> _aws_cdk_aws_iam_ceddda9d.Grant:
408
- '''(experimental) Grant read and write permissions for this table bucket and its tables to an IAM principal (Role/Group/User).
409
1694
 
410
- If encryption is used, permission to use the key to encrypt/decrypt the contents
411
- of the bucket will also be granted to the same principal.
1695
+ @jsii.data_type(
1696
+ jsii_type="@aws-cdk/aws-s3tables-alpha.TableAttributes",
1697
+ jsii_struct_bases=[],
1698
+ name_mapping={"table_arn": "tableArn", "table_name": "tableName"},
1699
+ )
1700
+ class TableAttributes:
1701
+ def __init__(self, *, table_arn: builtins.str, table_name: builtins.str) -> None:
1702
+ '''(experimental) A reference to a table outside this stack.
412
1703
 
413
- :param identity: The principal to allow read and write permissions to.
414
- :param table_id: Allow the permissions to all tables using '*' or to single table by its unique ID.
1704
+ The tableName, region, and account can be provided explicitly
1705
+ or will be inferred from the tableArn
1706
+
1707
+ :param table_arn: (experimental) The table's ARN.
1708
+ :param table_name: (experimental) Name of this table.
415
1709
 
416
1710
  :stability: experimental
1711
+ :exampleMetadata: fixture=_generated
1712
+
1713
+ Example::
1714
+
1715
+ # The code below shows an example of how to instantiate this type.
1716
+ # The values are placeholders you should change.
1717
+ import aws_cdk.aws_s3tables_alpha as s3tables_alpha
1718
+
1719
+ table_attributes = s3tables_alpha.TableAttributes(
1720
+ table_arn="tableArn",
1721
+ table_name="tableName"
1722
+ )
417
1723
  '''
418
1724
  if __debug__:
419
- type_hints = typing.get_type_hints(_typecheckingstub__1c9eb5186509f26b2c015223d6e2614c16cc34d5c2608ca3903b133360e23990)
420
- check_type(argname="argument identity", value=identity, expected_type=type_hints["identity"])
421
- check_type(argname="argument table_id", value=table_id, expected_type=type_hints["table_id"])
422
- return typing.cast(_aws_cdk_aws_iam_ceddda9d.Grant, jsii.invoke(self, "grantReadWrite", [identity, table_id]))
1725
+ type_hints = typing.get_type_hints(_typecheckingstub__20a648b98b2aa2a4eec0f744feac0d8ec3ee06e18fb2a623e889d224bf8fec03)
1726
+ check_type(argname="argument table_arn", value=table_arn, expected_type=type_hints["table_arn"])
1727
+ check_type(argname="argument table_name", value=table_name, expected_type=type_hints["table_name"])
1728
+ self._values: typing.Dict[builtins.str, typing.Any] = {
1729
+ "table_arn": table_arn,
1730
+ "table_name": table_name,
1731
+ }
423
1732
 
424
- @jsii.member(jsii_name="grantWrite")
425
- def grant_write(
426
- self,
427
- identity: _aws_cdk_aws_iam_ceddda9d.IGrantable,
428
- table_id: builtins.str,
429
- ) -> _aws_cdk_aws_iam_ceddda9d.Grant:
430
- '''(experimental) Grant write permissions for this table bucket and its tables to an IAM principal (Role/Group/User).
1733
+ @builtins.property
1734
+ def table_arn(self) -> builtins.str:
1735
+ '''(experimental) The table's ARN.
431
1736
 
432
- If encryption is used, permission to use the key to encrypt the contents
433
- of the bucket will also be granted to the same principal.
1737
+ :stability: experimental
1738
+ '''
1739
+ result = self._values.get("table_arn")
1740
+ assert result is not None, "Required property 'table_arn' is missing"
1741
+ return typing.cast(builtins.str, result)
434
1742
 
435
- :param identity: The principal to allow write permissions to.
436
- :param table_id: Allow the permissions to all tables using '*' or to single table by its unique ID.
1743
+ @builtins.property
1744
+ def table_name(self) -> builtins.str:
1745
+ '''(experimental) Name of this table.
437
1746
 
438
1747
  :stability: experimental
439
1748
  '''
440
- if __debug__:
441
- type_hints = typing.get_type_hints(_typecheckingstub__65fa831e505e76e1fe23a8a8d8ce97bb97ebff683edbf67f37020df64c040fdb)
442
- check_type(argname="argument identity", value=identity, expected_type=type_hints["identity"])
443
- check_type(argname="argument table_id", value=table_id, expected_type=type_hints["table_id"])
444
- return typing.cast(_aws_cdk_aws_iam_ceddda9d.Grant, jsii.invoke(self, "grantWrite", [identity, table_id]))
1749
+ result = self._values.get("table_name")
1750
+ assert result is not None, "Required property 'table_name' is missing"
1751
+ return typing.cast(builtins.str, result)
445
1752
 
446
- # Adding a "__jsii_proxy_class__(): typing.Type" function to the interface
447
- typing.cast(typing.Any, ITableBucket).__jsii_proxy_class__ = lambda : _ITableBucketProxy
1753
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
1754
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
1755
+
1756
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
1757
+ return not (rhs == self)
1758
+
1759
+ def __repr__(self) -> str:
1760
+ return "TableAttributes(%s)" % ", ".join(
1761
+ k + "=" + repr(v) for k, v in self._values.items()
1762
+ )
448
1763
 
449
1764
 
450
1765
  @jsii.implements(ITableBucket)
@@ -1317,6 +2632,220 @@ class TableBucketProps:
1317
2632
  )
1318
2633
 
1319
2634
 
2635
+ @jsii.data_type(
2636
+ jsii_type="@aws-cdk/aws-s3tables-alpha.TableProps",
2637
+ jsii_struct_bases=[],
2638
+ name_mapping={
2639
+ "namespace": "namespace",
2640
+ "open_table_format": "openTableFormat",
2641
+ "table_name": "tableName",
2642
+ "compaction": "compaction",
2643
+ "iceberg_metadata": "icebergMetadata",
2644
+ "removal_policy": "removalPolicy",
2645
+ "snapshot_management": "snapshotManagement",
2646
+ "without_metadata": "withoutMetadata",
2647
+ },
2648
+ )
2649
+ class TableProps:
2650
+ def __init__(
2651
+ self,
2652
+ *,
2653
+ namespace: INamespace,
2654
+ open_table_format: OpenTableFormat,
2655
+ table_name: builtins.str,
2656
+ compaction: typing.Optional[typing.Union[CompactionProperty, typing.Dict[builtins.str, typing.Any]]] = None,
2657
+ iceberg_metadata: typing.Optional[typing.Union[IcebergMetadataProperty, typing.Dict[builtins.str, typing.Any]]] = None,
2658
+ removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
2659
+ snapshot_management: typing.Optional[typing.Union[SnapshotManagementProperty, typing.Dict[builtins.str, typing.Any]]] = None,
2660
+ without_metadata: typing.Optional[builtins.bool] = None,
2661
+ ) -> None:
2662
+ '''(experimental) Properties for creating a new S3 Table.
2663
+
2664
+ :param namespace: (experimental) The namespace under which this table is created.
2665
+ :param open_table_format: (experimental) Format of this table. Currently, the only supported value is OpenTableFormat.ICEBERG.
2666
+ :param table_name: (experimental) Name of this table, unique within the namespace.
2667
+ :param compaction: (experimental) Settings governing the Compaction maintenance action. Default: Amazon S3 selects the best compaction strategy based on your table sort order.
2668
+ :param iceberg_metadata: (experimental) Contains details about the metadata for an Iceberg table. Default: table is created without any metadata
2669
+ :param removal_policy: (experimental) Controls what happens to this table it it stoped being managed by cloudformation. Default: RETAIN
2670
+ :param snapshot_management: (experimental) Contains details about the snapshot management settings for an Iceberg table. Default: enabled: MinimumSnapshots is 1 by default and MaximumSnapshotAge is 120 hours by default.
2671
+ :param without_metadata: (experimental) If true, indicates that you don't want to specify a schema for the table. This property is mutually exclusive to 'IcebergMetadata'. Default: false
2672
+
2673
+ :stability: experimental
2674
+ :exampleMetadata: infused
2675
+
2676
+ Example::
2677
+
2678
+ # Build a table
2679
+ sample_table = Table(scope, "ExampleTable",
2680
+ table_name="example_table",
2681
+ namespace=namespace,
2682
+ open_table_format=OpenTableFormat.ICEBERG,
2683
+ without_metadata=True
2684
+ )
2685
+
2686
+ # Build a table with an Iceberg Schema
2687
+ sample_table_with_schema = Table(scope, "ExampleSchemaTable",
2688
+ table_name="example_table_with_schema",
2689
+ namespace=namespace,
2690
+ open_table_format=OpenTableFormat.ICEBERG,
2691
+ iceberg_metadata=IcebergMetadataProperty(
2692
+ iceberg_schema=IcebergSchemaProperty(
2693
+ schema_field_list=[SchemaFieldProperty(
2694
+ name="id",
2695
+ type="int",
2696
+ required=True
2697
+ ), SchemaFieldProperty(
2698
+ name="name",
2699
+ type="string"
2700
+ )
2701
+ ]
2702
+ )
2703
+ ),
2704
+ compaction=CompactionProperty(
2705
+ status=Status.ENABLED,
2706
+ target_file_size_mb=128
2707
+ ),
2708
+ snapshot_management=SnapshotManagementProperty(
2709
+ status=Status.ENABLED,
2710
+ max_snapshot_age_hours=48,
2711
+ min_snapshots_to_keep=5
2712
+ )
2713
+ )
2714
+ '''
2715
+ if isinstance(compaction, dict):
2716
+ compaction = CompactionProperty(**compaction)
2717
+ if isinstance(iceberg_metadata, dict):
2718
+ iceberg_metadata = IcebergMetadataProperty(**iceberg_metadata)
2719
+ if isinstance(snapshot_management, dict):
2720
+ snapshot_management = SnapshotManagementProperty(**snapshot_management)
2721
+ if __debug__:
2722
+ type_hints = typing.get_type_hints(_typecheckingstub__adbbcc05d3dc39dfd296a872f006be429c733d0afc6f602e57bd2bede716f05e)
2723
+ check_type(argname="argument namespace", value=namespace, expected_type=type_hints["namespace"])
2724
+ check_type(argname="argument open_table_format", value=open_table_format, expected_type=type_hints["open_table_format"])
2725
+ check_type(argname="argument table_name", value=table_name, expected_type=type_hints["table_name"])
2726
+ check_type(argname="argument compaction", value=compaction, expected_type=type_hints["compaction"])
2727
+ check_type(argname="argument iceberg_metadata", value=iceberg_metadata, expected_type=type_hints["iceberg_metadata"])
2728
+ check_type(argname="argument removal_policy", value=removal_policy, expected_type=type_hints["removal_policy"])
2729
+ check_type(argname="argument snapshot_management", value=snapshot_management, expected_type=type_hints["snapshot_management"])
2730
+ check_type(argname="argument without_metadata", value=without_metadata, expected_type=type_hints["without_metadata"])
2731
+ self._values: typing.Dict[builtins.str, typing.Any] = {
2732
+ "namespace": namespace,
2733
+ "open_table_format": open_table_format,
2734
+ "table_name": table_name,
2735
+ }
2736
+ if compaction is not None:
2737
+ self._values["compaction"] = compaction
2738
+ if iceberg_metadata is not None:
2739
+ self._values["iceberg_metadata"] = iceberg_metadata
2740
+ if removal_policy is not None:
2741
+ self._values["removal_policy"] = removal_policy
2742
+ if snapshot_management is not None:
2743
+ self._values["snapshot_management"] = snapshot_management
2744
+ if without_metadata is not None:
2745
+ self._values["without_metadata"] = without_metadata
2746
+
2747
+ @builtins.property
2748
+ def namespace(self) -> INamespace:
2749
+ '''(experimental) The namespace under which this table is created.
2750
+
2751
+ :stability: experimental
2752
+ '''
2753
+ result = self._values.get("namespace")
2754
+ assert result is not None, "Required property 'namespace' is missing"
2755
+ return typing.cast(INamespace, result)
2756
+
2757
+ @builtins.property
2758
+ def open_table_format(self) -> OpenTableFormat:
2759
+ '''(experimental) Format of this table.
2760
+
2761
+ Currently, the only supported value is OpenTableFormat.ICEBERG.
2762
+
2763
+ :stability: experimental
2764
+ '''
2765
+ result = self._values.get("open_table_format")
2766
+ assert result is not None, "Required property 'open_table_format' is missing"
2767
+ return typing.cast(OpenTableFormat, result)
2768
+
2769
+ @builtins.property
2770
+ def table_name(self) -> builtins.str:
2771
+ '''(experimental) Name of this table, unique within the namespace.
2772
+
2773
+ :stability: experimental
2774
+ '''
2775
+ result = self._values.get("table_name")
2776
+ assert result is not None, "Required property 'table_name' is missing"
2777
+ return typing.cast(builtins.str, result)
2778
+
2779
+ @builtins.property
2780
+ def compaction(self) -> typing.Optional[CompactionProperty]:
2781
+ '''(experimental) Settings governing the Compaction maintenance action.
2782
+
2783
+ :default: Amazon S3 selects the best compaction strategy based on your table sort order.
2784
+
2785
+ :see: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html
2786
+ :stability: experimental
2787
+ '''
2788
+ result = self._values.get("compaction")
2789
+ return typing.cast(typing.Optional[CompactionProperty], result)
2790
+
2791
+ @builtins.property
2792
+ def iceberg_metadata(self) -> typing.Optional[IcebergMetadataProperty]:
2793
+ '''(experimental) Contains details about the metadata for an Iceberg table.
2794
+
2795
+ :default: table is created without any metadata
2796
+
2797
+ :stability: experimental
2798
+ '''
2799
+ result = self._values.get("iceberg_metadata")
2800
+ return typing.cast(typing.Optional[IcebergMetadataProperty], result)
2801
+
2802
+ @builtins.property
2803
+ def removal_policy(self) -> typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy]:
2804
+ '''(experimental) Controls what happens to this table it it stoped being managed by cloudformation.
2805
+
2806
+ :default: RETAIN
2807
+
2808
+ :stability: experimental
2809
+ '''
2810
+ result = self._values.get("removal_policy")
2811
+ return typing.cast(typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy], result)
2812
+
2813
+ @builtins.property
2814
+ def snapshot_management(self) -> typing.Optional[SnapshotManagementProperty]:
2815
+ '''(experimental) Contains details about the snapshot management settings for an Iceberg table.
2816
+
2817
+ :default: enabled: MinimumSnapshots is 1 by default and MaximumSnapshotAge is 120 hours by default.
2818
+
2819
+ :stability: experimental
2820
+ '''
2821
+ result = self._values.get("snapshot_management")
2822
+ return typing.cast(typing.Optional[SnapshotManagementProperty], result)
2823
+
2824
+ @builtins.property
2825
+ def without_metadata(self) -> typing.Optional[builtins.bool]:
2826
+ '''(experimental) If true, indicates that you don't want to specify a schema for the table.
2827
+
2828
+ This property is mutually exclusive to 'IcebergMetadata'.
2829
+
2830
+ :default: false
2831
+
2832
+ :stability: experimental
2833
+ '''
2834
+ result = self._values.get("without_metadata")
2835
+ return typing.cast(typing.Optional[builtins.bool], result)
2836
+
2837
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
2838
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
2839
+
2840
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
2841
+ return not (rhs == self)
2842
+
2843
+ def __repr__(self) -> str:
2844
+ return "TableProps(%s)" % ", ".join(
2845
+ k + "=" + repr(v) for k, v in self._values.items()
2846
+ )
2847
+
2848
+
1320
2849
  @jsii.data_type(
1321
2850
  jsii_type="@aws-cdk/aws-s3tables-alpha.UnreferencedFileRemoval",
1322
2851
  jsii_struct_bases=[],
@@ -1457,19 +2986,42 @@ class UnreferencedFileRemovalStatus(enum.Enum):
1457
2986
 
1458
2987
 
1459
2988
  __all__ = [
2989
+ "CompactionProperty",
2990
+ "INamespace",
2991
+ "ITable",
1460
2992
  "ITableBucket",
2993
+ "IcebergMetadataProperty",
2994
+ "IcebergSchemaProperty",
2995
+ "Namespace",
2996
+ "NamespaceAttributes",
2997
+ "NamespaceProps",
2998
+ "OpenTableFormat",
2999
+ "SchemaFieldProperty",
3000
+ "SnapshotManagementProperty",
3001
+ "Status",
3002
+ "Table",
3003
+ "TableAttributes",
1461
3004
  "TableBucket",
1462
3005
  "TableBucketAttributes",
1463
3006
  "TableBucketEncryption",
1464
3007
  "TableBucketPolicy",
1465
3008
  "TableBucketPolicyProps",
1466
3009
  "TableBucketProps",
3010
+ "TableProps",
1467
3011
  "UnreferencedFileRemoval",
1468
3012
  "UnreferencedFileRemovalStatus",
1469
3013
  ]
1470
3014
 
1471
3015
  publication.publish()
1472
3016
 
3017
+ def _typecheckingstub__ea606cde59917b73fdb198d73eabdbbe686fdbd73e01ef72284a9061ea612d80(
3018
+ *,
3019
+ status: Status,
3020
+ target_file_size_mb: jsii.Number,
3021
+ ) -> None:
3022
+ """Type checking stubs"""
3023
+ pass
3024
+
1473
3025
  def _typecheckingstub__a7c10542c60e15926bb4ef59925c4f6c0878400e041897780edddaa65054d627(
1474
3026
  statement: _aws_cdk_aws_iam_ceddda9d.PolicyStatement,
1475
3027
  ) -> None:
@@ -1497,6 +3049,122 @@ def _typecheckingstub__65fa831e505e76e1fe23a8a8d8ce97bb97ebff683edbf67f37020df64
1497
3049
  """Type checking stubs"""
1498
3050
  pass
1499
3051
 
3052
+ def _typecheckingstub__f8230e6a4eadd2193ba7389b1a23bde451e68a07c19bcda56cba1c321d75d5f0(
3053
+ *,
3054
+ iceberg_schema: typing.Union[IcebergSchemaProperty, typing.Dict[builtins.str, typing.Any]],
3055
+ ) -> None:
3056
+ """Type checking stubs"""
3057
+ pass
3058
+
3059
+ def _typecheckingstub__f4da2961c1ead632b855491f63cf76c4886c0e7a3d1795c1533655124a5dccb6(
3060
+ *,
3061
+ schema_field_list: typing.Sequence[typing.Union[SchemaFieldProperty, typing.Dict[builtins.str, typing.Any]]],
3062
+ ) -> None:
3063
+ """Type checking stubs"""
3064
+ pass
3065
+
3066
+ def _typecheckingstub__ea3444f2b1f25cee0bac27bf1e4c044f18ded5f025356448c35a47f4611915d5(
3067
+ scope: _constructs_77d1e7e8.Construct,
3068
+ id: builtins.str,
3069
+ *,
3070
+ namespace_name: builtins.str,
3071
+ table_bucket: ITableBucket,
3072
+ removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
3073
+ ) -> None:
3074
+ """Type checking stubs"""
3075
+ pass
3076
+
3077
+ def _typecheckingstub__429e6100662356607de36bc4f09397c07482d4becdff99cdf1257c1b95547276(
3078
+ scope: _constructs_77d1e7e8.Construct,
3079
+ id: builtins.str,
3080
+ *,
3081
+ namespace_name: builtins.str,
3082
+ table_bucket: ITableBucket,
3083
+ ) -> None:
3084
+ """Type checking stubs"""
3085
+ pass
3086
+
3087
+ def _typecheckingstub__4a07351eb257958d2290e548252c46a7c8963c7bc2f700e83671f819e4b7dbd5(
3088
+ namespace_name: builtins.str,
3089
+ ) -> None:
3090
+ """Type checking stubs"""
3091
+ pass
3092
+
3093
+ def _typecheckingstub__8f79f8c2998fe357462fbff82a75e82ed3236dd34caffcf6f6267cffcdda3275(
3094
+ *,
3095
+ namespace_name: builtins.str,
3096
+ table_bucket: ITableBucket,
3097
+ ) -> None:
3098
+ """Type checking stubs"""
3099
+ pass
3100
+
3101
+ def _typecheckingstub__fd18f87a98f23ccaea0f0c36db6b294de2ffbbb509594c9bfa49f26b6b0d0e7a(
3102
+ *,
3103
+ namespace_name: builtins.str,
3104
+ table_bucket: ITableBucket,
3105
+ removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
3106
+ ) -> None:
3107
+ """Type checking stubs"""
3108
+ pass
3109
+
3110
+ def _typecheckingstub__798c061a7214691172814263e161286845f9f56262e641ae55c93d363ce227c1(
3111
+ *,
3112
+ name: builtins.str,
3113
+ type: builtins.str,
3114
+ required: typing.Optional[builtins.bool] = None,
3115
+ ) -> None:
3116
+ """Type checking stubs"""
3117
+ pass
3118
+
3119
+ def _typecheckingstub__74aebe9bead3fb2bce88d441c25d815202759baedd02c817c6e08d2e1dfad2b2(
3120
+ *,
3121
+ max_snapshot_age_hours: typing.Optional[jsii.Number] = None,
3122
+ min_snapshots_to_keep: typing.Optional[jsii.Number] = None,
3123
+ status: typing.Optional[Status] = None,
3124
+ ) -> None:
3125
+ """Type checking stubs"""
3126
+ pass
3127
+
3128
+ def _typecheckingstub__9e5378cdcc21935af950b3c144ea6d1e345b4c98cccbf5fe2a92dff410ed06cf(
3129
+ scope: _constructs_77d1e7e8.Construct,
3130
+ id: builtins.str,
3131
+ *,
3132
+ namespace: INamespace,
3133
+ open_table_format: OpenTableFormat,
3134
+ table_name: builtins.str,
3135
+ compaction: typing.Optional[typing.Union[CompactionProperty, typing.Dict[builtins.str, typing.Any]]] = None,
3136
+ iceberg_metadata: typing.Optional[typing.Union[IcebergMetadataProperty, typing.Dict[builtins.str, typing.Any]]] = None,
3137
+ removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
3138
+ snapshot_management: typing.Optional[typing.Union[SnapshotManagementProperty, typing.Dict[builtins.str, typing.Any]]] = None,
3139
+ without_metadata: typing.Optional[builtins.bool] = None,
3140
+ ) -> None:
3141
+ """Type checking stubs"""
3142
+ pass
3143
+
3144
+ def _typecheckingstub__c92fbe73fcedcf34bbbc9a2359a274432437ec47317161e4c88ea9d209155ffd(
3145
+ scope: _constructs_77d1e7e8.Construct,
3146
+ id: builtins.str,
3147
+ *,
3148
+ table_arn: builtins.str,
3149
+ table_name: builtins.str,
3150
+ ) -> None:
3151
+ """Type checking stubs"""
3152
+ pass
3153
+
3154
+ def _typecheckingstub__536e137c7e7454507b9ec796514d014c3913e8c528dfeba351b5e0e36ba8e228(
3155
+ table_name: builtins.str,
3156
+ ) -> None:
3157
+ """Type checking stubs"""
3158
+ pass
3159
+
3160
+ def _typecheckingstub__20a648b98b2aa2a4eec0f744feac0d8ec3ee06e18fb2a623e889d224bf8fec03(
3161
+ *,
3162
+ table_arn: builtins.str,
3163
+ table_name: builtins.str,
3164
+ ) -> None:
3165
+ """Type checking stubs"""
3166
+ pass
3167
+
1500
3168
  def _typecheckingstub__c8d9c0bf5c954c2a6797301b7dc6cb8abd812336f3507addc92f72b805ec0a1e(
1501
3169
  scope: _constructs_77d1e7e8.Construct,
1502
3170
  id: builtins.str,
@@ -1616,6 +3284,20 @@ def _typecheckingstub__aa14ccf904c2576c446af7122d6335d3a92b012274a231120ab28c942
1616
3284
  """Type checking stubs"""
1617
3285
  pass
1618
3286
 
3287
+ def _typecheckingstub__adbbcc05d3dc39dfd296a872f006be429c733d0afc6f602e57bd2bede716f05e(
3288
+ *,
3289
+ namespace: INamespace,
3290
+ open_table_format: OpenTableFormat,
3291
+ table_name: builtins.str,
3292
+ compaction: typing.Optional[typing.Union[CompactionProperty, typing.Dict[builtins.str, typing.Any]]] = None,
3293
+ iceberg_metadata: typing.Optional[typing.Union[IcebergMetadataProperty, typing.Dict[builtins.str, typing.Any]]] = None,
3294
+ removal_policy: typing.Optional[_aws_cdk_ceddda9d.RemovalPolicy] = None,
3295
+ snapshot_management: typing.Optional[typing.Union[SnapshotManagementProperty, typing.Dict[builtins.str, typing.Any]]] = None,
3296
+ without_metadata: typing.Optional[builtins.bool] = None,
3297
+ ) -> None:
3298
+ """Type checking stubs"""
3299
+ pass
3300
+
1619
3301
  def _typecheckingstub__b3c9fa2e0832ae26e721328d6c201e9e86774721d68903a6414d69d8a77a5675(
1620
3302
  *,
1621
3303
  noncurrent_days: typing.Optional[jsii.Number] = None,