@aws-cdk/aws-glue-alpha 2.267.0-alpha.0 → 2.268.0-alpha.0

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.
Files changed (41) hide show
  1. package/.jsii +532 -310
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/README.md +5 -4
  4. package/lib/catalog.d.ts +2 -2
  5. package/lib/catalog.js +4 -4
  6. package/lib/code.js +3 -3
  7. package/lib/connection.js +2 -2
  8. package/lib/data-format.js +5 -5
  9. package/lib/data-quality-ruleset.d.ts +20 -9
  10. package/lib/data-quality-ruleset.js +33 -6
  11. package/lib/database.d.ts +3 -1
  12. package/lib/database.js +8 -2
  13. package/lib/external-table.js +1 -1
  14. package/lib/jobs/job.d.ts +1 -1
  15. package/lib/jobs/job.js +3 -3
  16. package/lib/jobs/pyspark-etl-job.d.ts +1 -1
  17. package/lib/jobs/pyspark-etl-job.js +3 -3
  18. package/lib/jobs/pyspark-flex-etl-job.d.ts +1 -1
  19. package/lib/jobs/pyspark-flex-etl-job.js +3 -3
  20. package/lib/jobs/pyspark-streaming-job.d.ts +1 -1
  21. package/lib/jobs/pyspark-streaming-job.js +3 -3
  22. package/lib/jobs/python-shell-job.js +1 -1
  23. package/lib/jobs/ray-job.js +1 -1
  24. package/lib/jobs/scala-spark-etl-job.d.ts +3 -2
  25. package/lib/jobs/scala-spark-etl-job.js +5 -4
  26. package/lib/jobs/scala-spark-flex-etl-job.d.ts +11 -20
  27. package/lib/jobs/scala-spark-flex-etl-job.js +12 -11
  28. package/lib/jobs/scala-spark-streaming-job.d.ts +3 -2
  29. package/lib/jobs/scala-spark-streaming-job.js +5 -4
  30. package/lib/jobs/spark-job.js +1 -1
  31. package/lib/partition-projection.js +1 -1
  32. package/lib/s3-table.d.ts +7 -4
  33. package/lib/s3-table.js +12 -9
  34. package/lib/schema.js +2 -2
  35. package/lib/security-configuration.js +4 -4
  36. package/lib/storage-parameter.js +1 -1
  37. package/lib/table-base.js +1 -1
  38. package/lib/triggers/trigger-options.d.ts +1 -1
  39. package/lib/triggers/trigger-options.js +2 -2
  40. package/lib/triggers/workflow.js +2 -2
  41. package/package.json +7 -7
package/.jsii CHANGED
@@ -8,7 +8,7 @@
8
8
  "url": "https://aws.amazon.com"
9
9
  },
10
10
  "dependencies": {
11
- "aws-cdk-lib": "^2.267.0",
11
+ "aws-cdk-lib": "^2.268.0",
12
12
  "constructs": "^10.5.0"
13
13
  },
14
14
  "dependencyClosure": {
@@ -148,6 +148,19 @@
148
148
  }
149
149
  }
150
150
  },
151
+ "aws-cdk-lib.aws_accountaccess": {
152
+ "targets": {
153
+ "dotnet": {
154
+ "namespace": "Amazon.CDK.AWS.AccountAccess"
155
+ },
156
+ "java": {
157
+ "package": "software.amazon.awscdk.services.accountaccess"
158
+ },
159
+ "python": {
160
+ "module": "aws_cdk.aws_accountaccess"
161
+ }
162
+ }
163
+ },
151
164
  "aws-cdk-lib.aws_acmpca": {
152
165
  "targets": {
153
166
  "dotnet": {
@@ -161,6 +174,19 @@
161
174
  }
162
175
  }
163
176
  },
177
+ "aws-cdk-lib.aws_agentregistry": {
178
+ "targets": {
179
+ "dotnet": {
180
+ "namespace": "Amazon.CDK.AWS.AgentRegistry"
181
+ },
182
+ "java": {
183
+ "package": "software.amazon.awscdk.services.agentregistry"
184
+ },
185
+ "python": {
186
+ "module": "aws_cdk.aws_agentregistry"
187
+ }
188
+ }
189
+ },
164
190
  "aws-cdk-lib.aws_aiops": {
165
191
  "targets": {
166
192
  "dotnet": {
@@ -447,19 +473,6 @@
447
473
  }
448
474
  }
449
475
  },
450
- "aws-cdk-lib.aws_artifact": {
451
- "targets": {
452
- "dotnet": {
453
- "namespace": "Amazon.CDK.AWS.Artifact"
454
- },
455
- "java": {
456
- "package": "software.amazon.awscdk.services.artifact"
457
- },
458
- "python": {
459
- "module": "aws_cdk.aws_artifact"
460
- }
461
- }
462
- },
463
476
  "aws-cdk-lib.aws_athena": {
464
477
  "targets": {
465
478
  "dotnet": {
@@ -590,19 +603,6 @@
590
603
  }
591
604
  }
592
605
  },
593
- "aws-cdk-lib.aws_backupsearch": {
594
- "targets": {
595
- "dotnet": {
596
- "namespace": "Amazon.CDK.AWS.BackupSearch"
597
- },
598
- "java": {
599
- "package": "software.amazon.awscdk.services.backupsearch"
600
- },
601
- "python": {
602
- "module": "aws_cdk.aws_backupsearch"
603
- }
604
- }
605
- },
606
606
  "aws-cdk-lib.aws_batch": {
607
607
  "targets": {
608
608
  "dotnet": {
@@ -877,6 +877,19 @@
877
877
  }
878
878
  }
879
879
  },
880
+ "aws-cdk-lib.aws_cloudhsm": {
881
+ "targets": {
882
+ "dotnet": {
883
+ "namespace": "Amazon.CDK.AWS.CloudHSM"
884
+ },
885
+ "java": {
886
+ "package": "software.amazon.awscdk.services.cloudhsm"
887
+ },
888
+ "python": {
889
+ "module": "aws_cdk.aws_cloudhsm"
890
+ }
891
+ }
892
+ },
880
893
  "aws-cdk-lib.aws_cloudtrail": {
881
894
  "targets": {
882
895
  "dotnet": {
@@ -1098,19 +1111,6 @@
1098
1111
  }
1099
1112
  }
1100
1113
  },
1101
- "aws-cdk-lib.aws_cognitosync": {
1102
- "targets": {
1103
- "dotnet": {
1104
- "namespace": "Amazon.CDK.AWS.CognitoSync"
1105
- },
1106
- "java": {
1107
- "package": "software.amazon.awscdk.services.cognitosync"
1108
- },
1109
- "python": {
1110
- "module": "aws_cdk.aws_cognitosync"
1111
- }
1112
- }
1113
- },
1114
1114
  "aws-cdk-lib.aws_comprehend": {
1115
1115
  "targets": {
1116
1116
  "dotnet": {
@@ -1189,19 +1189,6 @@
1189
1189
  }
1190
1190
  }
1191
1191
  },
1192
- "aws-cdk-lib.aws_controlcatalog": {
1193
- "targets": {
1194
- "dotnet": {
1195
- "namespace": "Amazon.CDK.AWS.ControlCatalog"
1196
- },
1197
- "java": {
1198
- "package": "software.amazon.awscdk.services.controlcatalog"
1199
- },
1200
- "python": {
1201
- "module": "aws_cdk.aws_controlcatalog"
1202
- }
1203
- }
1204
- },
1205
1192
  "aws-cdk-lib.aws_controltower": {
1206
1193
  "targets": {
1207
1194
  "dotnet": {
@@ -1254,6 +1241,19 @@
1254
1241
  }
1255
1242
  }
1256
1243
  },
1244
+ "aws-cdk-lib.aws_dataexchange": {
1245
+ "targets": {
1246
+ "dotnet": {
1247
+ "namespace": "Amazon.CDK.AWS.DataExchange"
1248
+ },
1249
+ "java": {
1250
+ "package": "software.amazon.awscdk.services.dataexchange"
1251
+ },
1252
+ "python": {
1253
+ "module": "aws_cdk.aws_dataexchange"
1254
+ }
1255
+ }
1256
+ },
1257
1257
  "aws-cdk-lib.aws_datapipeline": {
1258
1258
  "targets": {
1259
1259
  "dotnet": {
@@ -1449,6 +1449,19 @@
1449
1449
  }
1450
1450
  }
1451
1451
  },
1452
+ "aws-cdk-lib.aws_drs": {
1453
+ "targets": {
1454
+ "dotnet": {
1455
+ "namespace": "Amazon.CDK.AWS.DRS"
1456
+ },
1457
+ "java": {
1458
+ "package": "software.amazon.awscdk.services.drs"
1459
+ },
1460
+ "python": {
1461
+ "module": "aws_cdk.aws_drs"
1462
+ }
1463
+ }
1464
+ },
1452
1465
  "aws-cdk-lib.aws_dsql": {
1453
1466
  "targets": {
1454
1467
  "dotnet": {
@@ -2248,6 +2261,19 @@
2248
2261
  }
2249
2262
  }
2250
2263
  },
2264
+ "aws-cdk-lib.aws_iotsecuretunneling": {
2265
+ "targets": {
2266
+ "dotnet": {
2267
+ "namespace": "Amazon.CDK.AWS.IoTSecureTunneling"
2268
+ },
2269
+ "java": {
2270
+ "package": "software.amazon.awscdk.services.iotsecuretunneling"
2271
+ },
2272
+ "python": {
2273
+ "module": "aws_cdk.aws_iotsecuretunneling"
2274
+ }
2275
+ }
2276
+ },
2251
2277
  "aws-cdk-lib.aws_iotsitewise": {
2252
2278
  "targets": {
2253
2279
  "dotnet": {
@@ -2781,6 +2807,19 @@
2781
2807
  }
2782
2808
  }
2783
2809
  },
2810
+ "aws-cdk-lib.aws_mgn": {
2811
+ "targets": {
2812
+ "dotnet": {
2813
+ "namespace": "Amazon.CDK.AWS.MGN"
2814
+ },
2815
+ "java": {
2816
+ "package": "software.amazon.awscdk.services.mgn"
2817
+ },
2818
+ "python": {
2819
+ "module": "aws_cdk.aws_mgn"
2820
+ }
2821
+ }
2822
+ },
2784
2823
  "aws-cdk-lib.aws_mpa": {
2785
2824
  "targets": {
2786
2825
  "dotnet": {
@@ -3002,6 +3041,19 @@
3002
3041
  }
3003
3042
  }
3004
3043
  },
3044
+ "aws-cdk-lib.aws_opensearch": {
3045
+ "targets": {
3046
+ "dotnet": {
3047
+ "namespace": "Amazon.CDK.AWS.OpenSearch"
3048
+ },
3049
+ "java": {
3050
+ "package": "software.amazon.awscdk.services.opensearch"
3051
+ },
3052
+ "python": {
3053
+ "module": "aws_cdk.aws_opensearch"
3054
+ }
3055
+ }
3056
+ },
3005
3057
  "aws-cdk-lib.aws_opensearchserverless": {
3006
3058
  "targets": {
3007
3059
  "dotnet": {
@@ -3837,6 +3889,19 @@
3837
3889
  }
3838
3890
  }
3839
3891
  },
3892
+ "aws-cdk-lib.aws_serverlessrepo": {
3893
+ "targets": {
3894
+ "dotnet": {
3895
+ "namespace": "Amazon.CDK.AWS.ServerlessRepo"
3896
+ },
3897
+ "java": {
3898
+ "package": "software.amazon.awscdk.services.serverlessrepo"
3899
+ },
3900
+ "python": {
3901
+ "module": "aws_cdk.aws_serverlessrepo"
3902
+ }
3903
+ }
3904
+ },
3840
3905
  "aws-cdk-lib.aws_servicecatalog": {
3841
3906
  "targets": {
3842
3907
  "dotnet": {
@@ -4071,19 +4136,6 @@
4071
4136
  }
4072
4137
  }
4073
4138
  },
4074
- "aws-cdk-lib.aws_states": {
4075
- "targets": {
4076
- "dotnet": {
4077
- "namespace": "Amazon.CDK.AWS.States"
4078
- },
4079
- "java": {
4080
- "package": "software.amazon.awscdk.services.states"
4081
- },
4082
- "python": {
4083
- "module": "aws_cdk.aws_states"
4084
- }
4085
- }
4086
- },
4087
4139
  "aws-cdk-lib.aws_stepfunctions": {
4088
4140
  "targets": {
4089
4141
  "dotnet": {
@@ -4136,6 +4188,19 @@
4136
4188
  }
4137
4189
  }
4138
4190
  },
4191
+ "aws-cdk-lib.aws_supportauthz": {
4192
+ "targets": {
4193
+ "dotnet": {
4194
+ "namespace": "Amazon.CDK.AWS.SupportAuthZ"
4195
+ },
4196
+ "java": {
4197
+ "package": "software.amazon.awscdk.services.supportauthz"
4198
+ },
4199
+ "python": {
4200
+ "module": "aws_cdk.aws_supportauthz"
4201
+ }
4202
+ }
4203
+ },
4139
4204
  "aws-cdk-lib.aws_synthetics": {
4140
4205
  "targets": {
4141
4206
  "dotnet": {
@@ -4162,16 +4227,16 @@
4162
4227
  }
4163
4228
  }
4164
4229
  },
4165
- "aws-cdk-lib.aws_thinclient": {
4230
+ "aws-cdk-lib.aws_textract": {
4166
4231
  "targets": {
4167
4232
  "dotnet": {
4168
- "namespace": "Amazon.CDK.AWS.ThinClient"
4233
+ "namespace": "Amazon.CDK.AWS.Textract"
4169
4234
  },
4170
4235
  "java": {
4171
- "package": "software.amazon.awscdk.services.thinclient"
4236
+ "package": "software.amazon.awscdk.services.textract"
4172
4237
  },
4173
4238
  "python": {
4174
- "module": "aws_cdk.aws_thinclient"
4239
+ "module": "aws_cdk.aws_textract"
4175
4240
  }
4176
4241
  }
4177
4242
  },
@@ -4214,16 +4279,16 @@
4214
4279
  }
4215
4280
  }
4216
4281
  },
4217
- "aws-cdk-lib.aws_usernotifications": {
4282
+ "aws-cdk-lib.aws_translate": {
4218
4283
  "targets": {
4219
4284
  "dotnet": {
4220
- "namespace": "Amazon.CDK.AWS.UserNotifications"
4285
+ "namespace": "Amazon.CDK.AWS.Translate"
4221
4286
  },
4222
4287
  "java": {
4223
- "package": "software.amazon.awscdk.services.usernotifications"
4288
+ "package": "software.amazon.awscdk.services.translate"
4224
4289
  },
4225
4290
  "python": {
4226
- "module": "aws_cdk.aws_usernotifications"
4291
+ "module": "aws_cdk.aws_translate"
4227
4292
  }
4228
4293
  }
4229
4294
  },
@@ -4331,6 +4396,19 @@
4331
4396
  }
4332
4397
  }
4333
4398
  },
4399
+ "aws-cdk-lib.aws_wickr": {
4400
+ "targets": {
4401
+ "dotnet": {
4402
+ "namespace": "Amazon.CDK.AWS.Wickr"
4403
+ },
4404
+ "java": {
4405
+ "package": "software.amazon.awscdk.services.wickr"
4406
+ },
4407
+ "python": {
4408
+ "module": "aws_cdk.aws_wickr"
4409
+ }
4410
+ }
4411
+ },
4334
4412
  "aws-cdk-lib.aws_wisdom": {
4335
4413
  "targets": {
4336
4414
  "dotnet": {
@@ -4497,6 +4575,22 @@
4497
4575
  }
4498
4576
  }
4499
4577
  },
4578
+ "aws-cdk-lib.interfaces.aws_accountaccess": {
4579
+ "targets": {
4580
+ "dotnet": {
4581
+ "namespace": "Amazon.CDK.Interfaces.AccountAccess"
4582
+ },
4583
+ "go": {
4584
+ "packageName": "interfacesawsaccountaccess"
4585
+ },
4586
+ "java": {
4587
+ "package": "software.amazon.awscdk.interfaces.accountaccess"
4588
+ },
4589
+ "python": {
4590
+ "module": "aws_cdk.interfaces.aws_accountaccess"
4591
+ }
4592
+ }
4593
+ },
4500
4594
  "aws-cdk-lib.interfaces.aws_acmpca": {
4501
4595
  "targets": {
4502
4596
  "dotnet": {
@@ -4513,6 +4607,22 @@
4513
4607
  }
4514
4608
  }
4515
4609
  },
4610
+ "aws-cdk-lib.interfaces.aws_agentregistry": {
4611
+ "targets": {
4612
+ "dotnet": {
4613
+ "namespace": "Amazon.CDK.Interfaces.AgentRegistry"
4614
+ },
4615
+ "go": {
4616
+ "packageName": "interfacesawsagentregistry"
4617
+ },
4618
+ "java": {
4619
+ "package": "software.amazon.awscdk.interfaces.agentregistry"
4620
+ },
4621
+ "python": {
4622
+ "module": "aws_cdk.interfaces.aws_agentregistry"
4623
+ }
4624
+ }
4625
+ },
4516
4626
  "aws-cdk-lib.interfaces.aws_aiops": {
4517
4627
  "targets": {
4518
4628
  "dotnet": {
@@ -4833,22 +4943,6 @@
4833
4943
  }
4834
4944
  }
4835
4945
  },
4836
- "aws-cdk-lib.interfaces.aws_artifact": {
4837
- "targets": {
4838
- "dotnet": {
4839
- "namespace": "Amazon.CDK.Interfaces.Artifact"
4840
- },
4841
- "go": {
4842
- "packageName": "interfacesawsartifact"
4843
- },
4844
- "java": {
4845
- "package": "software.amazon.awscdk.interfaces.artifact"
4846
- },
4847
- "python": {
4848
- "module": "aws_cdk.interfaces.aws_artifact"
4849
- }
4850
- }
4851
- },
4852
4946
  "aws-cdk-lib.interfaces.aws_athena": {
4853
4947
  "targets": {
4854
4948
  "dotnet": {
@@ -4977,22 +5071,6 @@
4977
5071
  }
4978
5072
  }
4979
5073
  },
4980
- "aws-cdk-lib.interfaces.aws_backupsearch": {
4981
- "targets": {
4982
- "dotnet": {
4983
- "namespace": "Amazon.CDK.Interfaces.BackupSearch"
4984
- },
4985
- "go": {
4986
- "packageName": "interfacesawsbackupsearch"
4987
- },
4988
- "java": {
4989
- "package": "software.amazon.awscdk.interfaces.backupsearch"
4990
- },
4991
- "python": {
4992
- "module": "aws_cdk.interfaces.aws_backupsearch"
4993
- }
4994
- }
4995
- },
4996
5074
  "aws-cdk-lib.interfaces.aws_batch": {
4997
5075
  "targets": {
4998
5076
  "dotnet": {
@@ -5345,6 +5423,22 @@
5345
5423
  }
5346
5424
  }
5347
5425
  },
5426
+ "aws-cdk-lib.interfaces.aws_cloudhsm": {
5427
+ "targets": {
5428
+ "dotnet": {
5429
+ "namespace": "Amazon.CDK.Interfaces.CloudHSM"
5430
+ },
5431
+ "go": {
5432
+ "packageName": "interfacesawscloudhsm"
5433
+ },
5434
+ "java": {
5435
+ "package": "software.amazon.awscdk.interfaces.cloudhsm"
5436
+ },
5437
+ "python": {
5438
+ "module": "aws_cdk.interfaces.aws_cloudhsm"
5439
+ }
5440
+ }
5441
+ },
5348
5442
  "aws-cdk-lib.interfaces.aws_cloudtrail": {
5349
5443
  "targets": {
5350
5444
  "dotnet": {
@@ -5569,22 +5663,6 @@
5569
5663
  }
5570
5664
  }
5571
5665
  },
5572
- "aws-cdk-lib.interfaces.aws_cognitosync": {
5573
- "targets": {
5574
- "dotnet": {
5575
- "namespace": "Amazon.CDK.Interfaces.CognitoSync"
5576
- },
5577
- "go": {
5578
- "packageName": "interfacesawscognitosync"
5579
- },
5580
- "java": {
5581
- "package": "software.amazon.awscdk.interfaces.cognitosync"
5582
- },
5583
- "python": {
5584
- "module": "aws_cdk.interfaces.aws_cognitosync"
5585
- }
5586
- }
5587
- },
5588
5666
  "aws-cdk-lib.interfaces.aws_comprehend": {
5589
5667
  "targets": {
5590
5668
  "dotnet": {
@@ -5681,22 +5759,6 @@
5681
5759
  }
5682
5760
  }
5683
5761
  },
5684
- "aws-cdk-lib.interfaces.aws_controlcatalog": {
5685
- "targets": {
5686
- "dotnet": {
5687
- "namespace": "Amazon.CDK.Interfaces.ControlCatalog"
5688
- },
5689
- "go": {
5690
- "packageName": "interfacesawscontrolcatalog"
5691
- },
5692
- "java": {
5693
- "package": "software.amazon.awscdk.interfaces.controlcatalog"
5694
- },
5695
- "python": {
5696
- "module": "aws_cdk.interfaces.aws_controlcatalog"
5697
- }
5698
- }
5699
- },
5700
5762
  "aws-cdk-lib.interfaces.aws_controltower": {
5701
5763
  "targets": {
5702
5764
  "dotnet": {
@@ -5761,6 +5823,22 @@
5761
5823
  }
5762
5824
  }
5763
5825
  },
5826
+ "aws-cdk-lib.interfaces.aws_dataexchange": {
5827
+ "targets": {
5828
+ "dotnet": {
5829
+ "namespace": "Amazon.CDK.Interfaces.DataExchange"
5830
+ },
5831
+ "go": {
5832
+ "packageName": "interfacesawsdataexchange"
5833
+ },
5834
+ "java": {
5835
+ "package": "software.amazon.awscdk.interfaces.dataexchange"
5836
+ },
5837
+ "python": {
5838
+ "module": "aws_cdk.interfaces.aws_dataexchange"
5839
+ }
5840
+ }
5841
+ },
5764
5842
  "aws-cdk-lib.interfaces.aws_datapipeline": {
5765
5843
  "targets": {
5766
5844
  "dotnet": {
@@ -6001,6 +6079,22 @@
6001
6079
  }
6002
6080
  }
6003
6081
  },
6082
+ "aws-cdk-lib.interfaces.aws_drs": {
6083
+ "targets": {
6084
+ "dotnet": {
6085
+ "namespace": "Amazon.CDK.Interfaces.DRS"
6086
+ },
6087
+ "go": {
6088
+ "packageName": "interfacesawsdrs"
6089
+ },
6090
+ "java": {
6091
+ "package": "software.amazon.awscdk.interfaces.drs"
6092
+ },
6093
+ "python": {
6094
+ "module": "aws_cdk.interfaces.aws_drs"
6095
+ }
6096
+ }
6097
+ },
6004
6098
  "aws-cdk-lib.interfaces.aws_dsql": {
6005
6099
  "targets": {
6006
6100
  "dotnet": {
@@ -6833,6 +6927,22 @@
6833
6927
  }
6834
6928
  }
6835
6929
  },
6930
+ "aws-cdk-lib.interfaces.aws_iotsecuretunneling": {
6931
+ "targets": {
6932
+ "dotnet": {
6933
+ "namespace": "Amazon.CDK.Interfaces.IoTSecureTunneling"
6934
+ },
6935
+ "go": {
6936
+ "packageName": "interfacesawsiotsecuretunneling"
6937
+ },
6938
+ "java": {
6939
+ "package": "software.amazon.awscdk.interfaces.iotsecuretunneling"
6940
+ },
6941
+ "python": {
6942
+ "module": "aws_cdk.interfaces.aws_iotsecuretunneling"
6943
+ }
6944
+ }
6945
+ },
6836
6946
  "aws-cdk-lib.interfaces.aws_iotsitewise": {
6837
6947
  "targets": {
6838
6948
  "dotnet": {
@@ -7425,6 +7535,22 @@
7425
7535
  }
7426
7536
  }
7427
7537
  },
7538
+ "aws-cdk-lib.interfaces.aws_mgn": {
7539
+ "targets": {
7540
+ "dotnet": {
7541
+ "namespace": "Amazon.CDK.Interfaces.MGN"
7542
+ },
7543
+ "go": {
7544
+ "packageName": "interfacesawsmgn"
7545
+ },
7546
+ "java": {
7547
+ "package": "software.amazon.awscdk.interfaces.mgn"
7548
+ },
7549
+ "python": {
7550
+ "module": "aws_cdk.interfaces.aws_mgn"
7551
+ }
7552
+ }
7553
+ },
7428
7554
  "aws-cdk-lib.interfaces.aws_mpa": {
7429
7555
  "targets": {
7430
7556
  "dotnet": {
@@ -7697,6 +7823,22 @@
7697
7823
  }
7698
7824
  }
7699
7825
  },
7826
+ "aws-cdk-lib.interfaces.aws_opensearch": {
7827
+ "targets": {
7828
+ "dotnet": {
7829
+ "namespace": "Amazon.CDK.Interfaces.OpenSearch"
7830
+ },
7831
+ "go": {
7832
+ "packageName": "interfacesawsopensearch"
7833
+ },
7834
+ "java": {
7835
+ "package": "software.amazon.awscdk.interfaces.opensearch"
7836
+ },
7837
+ "python": {
7838
+ "module": "aws_cdk.interfaces.aws_opensearch"
7839
+ }
7840
+ }
7841
+ },
7700
7842
  "aws-cdk-lib.interfaces.aws_opensearchserverless": {
7701
7843
  "targets": {
7702
7844
  "dotnet": {
@@ -8609,6 +8751,22 @@
8609
8751
  }
8610
8752
  }
8611
8753
  },
8754
+ "aws-cdk-lib.interfaces.aws_serverlessrepo": {
8755
+ "targets": {
8756
+ "dotnet": {
8757
+ "namespace": "Amazon.CDK.Interfaces.ServerlessRepo"
8758
+ },
8759
+ "go": {
8760
+ "packageName": "interfacesawsserverlessrepo"
8761
+ },
8762
+ "java": {
8763
+ "package": "software.amazon.awscdk.interfaces.serverlessrepo"
8764
+ },
8765
+ "python": {
8766
+ "module": "aws_cdk.interfaces.aws_serverlessrepo"
8767
+ }
8768
+ }
8769
+ },
8612
8770
  "aws-cdk-lib.interfaces.aws_servicecatalog": {
8613
8771
  "targets": {
8614
8772
  "dotnet": {
@@ -8858,26 +9016,10 @@
8858
9016
  "packageName": "interfacesawssso"
8859
9017
  },
8860
9018
  "java": {
8861
- "package": "software.amazon.awscdk.interfaces.sso"
8862
- },
8863
- "python": {
8864
- "module": "aws_cdk.interfaces.aws_sso"
8865
- }
8866
- }
8867
- },
8868
- "aws-cdk-lib.interfaces.aws_states": {
8869
- "targets": {
8870
- "dotnet": {
8871
- "namespace": "Amazon.CDK.Interfaces.States"
8872
- },
8873
- "go": {
8874
- "packageName": "interfacesawsstates"
8875
- },
8876
- "java": {
8877
- "package": "software.amazon.awscdk.interfaces.states"
9019
+ "package": "software.amazon.awscdk.interfaces.sso"
8878
9020
  },
8879
9021
  "python": {
8880
- "module": "aws_cdk.interfaces.aws_states"
9022
+ "module": "aws_cdk.interfaces.aws_sso"
8881
9023
  }
8882
9024
  }
8883
9025
  },
@@ -8929,6 +9071,22 @@
8929
9071
  }
8930
9072
  }
8931
9073
  },
9074
+ "aws-cdk-lib.interfaces.aws_supportauthz": {
9075
+ "targets": {
9076
+ "dotnet": {
9077
+ "namespace": "Amazon.CDK.Interfaces.SupportAuthZ"
9078
+ },
9079
+ "go": {
9080
+ "packageName": "interfacesawssupportauthz"
9081
+ },
9082
+ "java": {
9083
+ "package": "software.amazon.awscdk.interfaces.supportauthz"
9084
+ },
9085
+ "python": {
9086
+ "module": "aws_cdk.interfaces.aws_supportauthz"
9087
+ }
9088
+ }
9089
+ },
8932
9090
  "aws-cdk-lib.interfaces.aws_synthetics": {
8933
9091
  "targets": {
8934
9092
  "dotnet": {
@@ -8961,19 +9119,19 @@
8961
9119
  }
8962
9120
  }
8963
9121
  },
8964
- "aws-cdk-lib.interfaces.aws_thinclient": {
9122
+ "aws-cdk-lib.interfaces.aws_textract": {
8965
9123
  "targets": {
8966
9124
  "dotnet": {
8967
- "namespace": "Amazon.CDK.Interfaces.ThinClient"
9125
+ "namespace": "Amazon.CDK.Interfaces.Textract"
8968
9126
  },
8969
9127
  "go": {
8970
- "packageName": "interfacesawsthinclient"
9128
+ "packageName": "interfacesawstextract"
8971
9129
  },
8972
9130
  "java": {
8973
- "package": "software.amazon.awscdk.interfaces.thinclient"
9131
+ "package": "software.amazon.awscdk.interfaces.textract"
8974
9132
  },
8975
9133
  "python": {
8976
- "module": "aws_cdk.interfaces.aws_thinclient"
9134
+ "module": "aws_cdk.interfaces.aws_textract"
8977
9135
  }
8978
9136
  }
8979
9137
  },
@@ -9025,19 +9183,19 @@
9025
9183
  }
9026
9184
  }
9027
9185
  },
9028
- "aws-cdk-lib.interfaces.aws_usernotifications": {
9186
+ "aws-cdk-lib.interfaces.aws_translate": {
9029
9187
  "targets": {
9030
9188
  "dotnet": {
9031
- "namespace": "Amazon.CDK.Interfaces.UserNotifications"
9189
+ "namespace": "Amazon.CDK.Interfaces.Translate"
9032
9190
  },
9033
9191
  "go": {
9034
- "packageName": "interfacesawsusernotifications"
9192
+ "packageName": "interfacesawstranslate"
9035
9193
  },
9036
9194
  "java": {
9037
- "package": "software.amazon.awscdk.interfaces.usernotifications"
9195
+ "package": "software.amazon.awscdk.interfaces.translate"
9038
9196
  },
9039
9197
  "python": {
9040
- "module": "aws_cdk.interfaces.aws_usernotifications"
9198
+ "module": "aws_cdk.interfaces.aws_translate"
9041
9199
  }
9042
9200
  }
9043
9201
  },
@@ -9169,6 +9327,22 @@
9169
9327
  }
9170
9328
  }
9171
9329
  },
9330
+ "aws-cdk-lib.interfaces.aws_wickr": {
9331
+ "targets": {
9332
+ "dotnet": {
9333
+ "namespace": "Amazon.CDK.Interfaces.Wickr"
9334
+ },
9335
+ "go": {
9336
+ "packageName": "interfacesawswickr"
9337
+ },
9338
+ "java": {
9339
+ "package": "software.amazon.awscdk.interfaces.wickr"
9340
+ },
9341
+ "python": {
9342
+ "module": "aws_cdk.interfaces.aws_wickr"
9343
+ }
9344
+ }
9345
+ },
9172
9346
  "aws-cdk-lib.interfaces.aws_wisdom": {
9173
9347
  "targets": {
9174
9348
  "dotnet": {
@@ -9409,7 +9583,7 @@
9409
9583
  },
9410
9584
  "name": "@aws-cdk/aws-glue-alpha",
9411
9585
  "readme": {
9412
- "markdown": "# AWS Glue Construct Library\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)\n\n> The APIs of higher level constructs in this module are experimental and under active development.\n> They are subject to non-backward compatible changes or removal in any future version. These are\n> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be\n> announced in the release notes. This means that while you may use them, you may need to update\n> your source code when upgrading to a newer version of this package.\n\n---\n\n<!--END STABILITY BANNER-->\n\nThis module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project.\n\n## README\n\n[AWS Glue](https://aws.amazon.com/glue/) is a serverless data integration\nservice that makes it easier to discover, prepare, move, and integrate data\nfrom multiple sources for analytics, machine learning (ML), and application\ndevelopment.\n\nThe Glue L2 construct has convenience methods working backwards from common\nuse cases and sets required parameters to defaults that align with recommended\nbest practices for each job type. It also provides customers with a balance\nbetween flexibility via optional parameter overrides, and opinionated\ninterfaces that discouraging anti-patterns, resulting in reduced time to develop\nand deploy new resources.\n\n### References\n\n* [Glue Launch Announcement](https://aws.amazon.com/blogs/aws/launch-aws-glue-now-generally-available/)\n* [Glue Documentation](https://docs.aws.amazon.com/glue/index.html)\n* [Glue L1 (CloudFormation) Constructs](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Glue.html)\n* Prior version of the [@aws-cdk/aws-glue-alpha module](https://github.com/aws/aws-cdk/blob/v2.51.1/packages/%40aws-cdk/aws-glue/README.md)\n\n## Create a Glue Job\n\nA Job encapsulates a script that connects to data sources, processes\nthem, and then writes output to a data target. There are four types of Glue\nJobs: Spark (ETL and Streaming), Python Shell, and Flex Jobs. Most\nof the required parameters for these jobs are common across all types,\nbut there are a few differences depending on the languages supported\nand features provided by each type. For all job types, the L2 defaults\nto AWS best practice recommendations, such as:\n\n* Use of Secrets Manager for Connection JDBC strings\n* Glue job autoscaling\n* Default parameter values for Glue job creation\n\nThis iteration of the L2 construct introduces breaking changes to\nthe existing glue-alpha-module, but these changes streamline the developer\nexperience, introduce new constants for defaults, and replacing synth-time\nvalidations with interface contracts for enforcement of the parameter combinations\nthat Glue supports. As an opinionated construct, the Glue L2 construct does\nnot allow developers to create resources that use non-current versions\nof Glue or deprecated language dependencies (e.g. deprecated versions of Python).\nAs always, L1s allow you to specify a wider range of parameters if you need\nor want to use alternative configurations.\n\nOptional and required parameters for each job are enforced via interface\nrather than validation; see [Glue's public documentation](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api.html)\nfor more granular details.\n\n### Spark Jobs\n\n#### ETL Jobs\n\nETL jobs support pySpark and Scala languages, for which there are separate but\nsimilar constructors. ETL jobs default to the G2 worker type, but you can\noverride this default with other supported worker type values (G1, G2, G4\nand G8). ETL jobs defaults to Glue version 4.0, which you can override to 3.0.\nThe following ETL features are enabled by default:\n`—enable-metrics, —enable-continuous-cloudwatch-log.`\nThe Spark UI (`—enable-spark-ui`) is off by default; enable it by setting the\n`sparkUI` prop.\nYou can find more details about version, worker type and other features in\n[Glue's public documentation](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html).\n\nReference the pyspark-etl-jobs.test.ts and scalaspark-etl-jobs.test.ts unit tests\nfor examples of required-only and optional job parameters when creating these\ntypes of jobs.\n\nFor the sake of brevity, examples are shown using the pySpark job variety.\n\nExample with only required parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkEtlJob(stack, 'PySparkETLJob', {\n role,\n script,\n jobName: 'PySparkETLJob',\n});\n```\n\nExample with optional override parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkEtlJob(stack, 'PySparkETLJob', {\n jobName: 'PySparkETLJobCustomName',\n description: 'This is a description',\n role,\n script,\n glueVersion: glue.GlueVersion.V5_1,\n continuousLogging: { enabled: false },\n workerConfiguration: {\n workerType: glue.WorkerType.G_2X,\n numberOfWorkers: 2,\n },\n maxConcurrentRuns: 100,\n timeout: cdk.Duration.hours(2),\n connections: [glue.Connection.fromConnectionName(stack, 'Connection', 'connectionName')],\n securityConfiguration: glue.SecurityConfiguration.fromSecurityConfigurationName(stack, 'SecurityConfig', 'securityConfigName'),\n tags: {\n FirstTagName: 'FirstTagValue',\n SecondTagName: 'SecondTagValue',\n XTagName: 'XTagValue',\n },\n maxRetries: 2,\n});\n```\n\n#### Streaming Jobs\n\nStreaming jobs are similar to ETL jobs, except that they perform ETL on data\nstreams using the Apache Spark Structured Streaming framework. Some Spark\njob features are not available to Streaming ETL jobs. They support Scala\nand pySpark languages. PySpark streaming jobs run on Python 3. It\ndefaults to the G2 worker type and Glue 4.0, both of which you can override.\nThe following best practice features are enabled by default:\n`—enable-metrics, —enable-continuous-cloudwatch-log`.\nThe Spark UI (`—enable-spark-ui`) is off by default; enable it by setting the\n`sparkUI` prop.\n\nReference the pyspark-streaming-jobs.test.ts and scalaspark-streaming-jobs.test.ts\nunit tests for examples of required-only and optional job parameters when creating\nthese types of jobs.\n\nExample with only required parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkStreamingJob(stack, 'ImportedJob', { role, script });\n```\n\nExample with optional override parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkStreamingJob(stack, 'PySparkStreamingJob', {\n jobName: 'PySparkStreamingJobCustomName',\n description: 'This is a description',\n role,\n script,\n glueVersion: glue.GlueVersion.V5_1,\n continuousLogging: { enabled: false },\n workerConfiguration: {\n workerType: glue.WorkerType.G_2X,\n numberOfWorkers: 2,\n },\n maxConcurrentRuns: 100,\n timeout: cdk.Duration.hours(2),\n connections: [glue.Connection.fromConnectionName(stack, 'Connection', 'connectionName')],\n securityConfiguration: glue.SecurityConfiguration.fromSecurityConfigurationName(stack, 'SecurityConfig', 'securityConfigName'),\n tags: {\n FirstTagName: 'FirstTagValue',\n SecondTagName: 'SecondTagValue',\n XTagName: 'XTagValue',\n },\n maxRetries: 2,\n});\n```\n\n#### Flex Jobs\n\nThe flexible execution class is appropriate for non-urgent jobs such as\npre-production jobs, testing, and one-time data loads. Flexible jobs default\nto Glue version 5.0 and worker type `G_2X`. The following best practice\nfeatures are enabled by default:\n`—enable-metrics, —enable-continuous-cloudwatch-log`\nThe Spark UI (`—enable-spark-ui`) is off by default; enable it by setting the\n`sparkUI` prop.\n\nReference the pyspark-flex-etl-jobs.test.ts and scalaspark-flex-etl-jobs.test.ts\nunit tests for examples of required-only and optional job parameters when creating\nthese types of jobs.\n\nExample with only required parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkFlexEtlJob(stack, 'ImportedJob', { role, script });\n```\n\nExample with optional override parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkFlexEtlJob(stack, 'pySparkFlexEtlJob', {\n jobName: 'pySparkFlexEtlJob',\n description: 'This is a description',\n role,\n script,\n glueVersion: glue.GlueVersion.V5_1,\n continuousLogging: { enabled: false },\n workerConfiguration: {\n workerType: glue.WorkerType.G_2X,\n numberOfWorkers: 2,\n },\n maxConcurrentRuns: 100,\n timeout: cdk.Duration.hours(2),\n connections: [glue.Connection.fromConnectionName(stack, 'Connection', 'connectionName')],\n securityConfiguration: glue.SecurityConfiguration.fromSecurityConfigurationName(stack, 'SecurityConfig', 'securityConfigName'),\n tags: {\n FirstTagName: 'FirstTagValue',\n SecondTagName: 'SecondTagValue',\n XTagName: 'XTagValue',\n },\n maxRetries: 2,\n});\n```\n\n### Python Shell Jobs\n\nPython shell jobs support a Python version that depends on the AWS Glue\nversion you use. These can be used to schedule and run tasks that don't\nrequire an Apache Spark environment. Python shell jobs default to\nPython 3.9 and a MaxCapacity of `0.0625`. Python 3.9 supports pre-loaded\nanalytics libraries using the `library-set=analytics` flag, which is\nenabled by default.\n\nReference the pyspark-shell-job.test.ts unit tests for examples of\nrequired-only and optional job parameters when creating these types of jobs.\n\nExample with only required parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PythonShellJob(stack, 'ImportedJob', { role, script });\n```\n\nExample with optional override parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\ndeclare const extraPythonFile: glue.Code;\nnew glue.PythonShellJob(stack, 'PythonShellJob', {\n jobName: 'PythonShellJobCustomName',\n description: 'This is a description',\n pythonVersion: glue.PythonVersion.THREE_NINE,\n maxCapacity: glue.MaxCapacity.DPU_1,\n role,\n script,\n extraPythonFiles: [extraPythonFile],\n glueVersion: glue.GlueVersion.V3_0,\n continuousLogging: { enabled: false },\n maxConcurrentRuns: 100,\n timeout: cdk.Duration.hours(2),\n connections: [glue.Connection.fromConnectionName(stack, 'Connection', 'connectionName')],\n securityConfiguration: glue.SecurityConfiguration.fromSecurityConfigurationName(stack, 'SecurityConfig', 'securityConfigName'),\n tags: {\n FirstTagName: 'FirstTagValue',\n SecondTagName: 'SecondTagValue',\n XTagName: 'XTagValue',\n },\n maxRetries: 2,\n});\n```\n\n### Ray Jobs\n\n> **⚠️ DEPRECATED:** AWS Glue for Ray is closed to new customers as of April 30, 2026 and is in maintenance mode.\n> Migrate to [Amazon EKS with KubeRay Operator](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html).\n\nThe `RayJob` construct, `Runtime.RAY_TWO_FOUR`, and `JobType.RAY` are deprecated and will be removed in a future release.\n\n### Metrics Control\n\nBy default, Glue jobs enable CloudWatch metrics (`--enable-metrics`) and observability metrics (`--enable-observability-metrics`) for monitoring and debugging. You can disable these metrics to reduce CloudWatch costs:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\n\n// Disable both metrics for cost optimization\nnew glue.PySparkEtlJob(stack, 'CostOptimizedJob', {\n role,\n script,\n enableMetrics: false,\n enableObservabilityMetrics: false,\n});\n\n// Selective control - keep observability, disable profiling\nnew glue.PySparkEtlJob(stack, 'SelectiveJob', {\n role,\n script,\n enableMetrics: false,\n // enableObservabilityMetrics defaults to true\n});\n```\n\nThis feature is available for all Spark job types (ETL, Streaming, Flex).\n\n### Enable Job Run Queuing\n\nAWS Glue job queuing monitors your account level quotas and limits. If quotas or limits are insufficient to start a Glue job run, AWS Glue will automatically queue the job and wait for limits to free up. Once limits become available, AWS Glue will retry the job run. Glue jobs will queue for limits like max concurrent job runs per account, max concurrent Data Processing Units (DPU), and resource unavailable due to IP address exhaustion in Amazon Virtual Private Cloud (Amazon VPC).\n\nEnable job run queuing by setting the `jobRunQueuingEnabled` property to `true`.\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkEtlJob(stack, 'PySparkETLJob', {\n role,\n script,\n jobName: 'PySparkETLJob',\n jobRunQueuingEnabled: true\n});\n```\n\n### Uploading scripts from the CDK app repository to S3\n\nSimilar to other L2 constructs, the Glue L2 automates uploading local\nscripts to S3. Use `glue.Code.fromAsset(path)` to point at a script in your\nlocal file structure; it is uploaded to the CDK-managed asset bucket. To\nreference a script that already exists in S3, use\n`glue.Code.fromBucket(bucket, key)`, which performs no upload. A `script` is\nrequired for every job.\n\nReference the unit tests for examples of repo and S3 code target examples.\n\n### Workflow Triggers\n\nYou can use Glue workflows to create and visualize complex\nextract, transform, and load (ETL) activities involving multiple crawlers,\njobs, and triggers. Standalone triggers are an anti-pattern, so you must\ncreate triggers from within a workflow using the L2 construct.\n\nWithin a workflow object, there are functions to create different\ntypes of triggers with actions and predicates. You add triggers to the\nworkflow, and each trigger references the jobs or crawlers it runs as its\nactions.\n\n`startOnCreation` applies to scheduled triggers (and, via\n`ConditionalTriggerOptions`, conditional triggers) only. It defaults to `false`,\nbut you can override it if you prefer for your trigger to start on creation.\n\nReference the workflow-triggers.test.ts unit tests for examples of creating\nworkflows and triggers.\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\n\n// Create a job to run from the workflow\nconst job = new glue.PySparkEtlJob(stack, 'Job', { role, script });\n\n// Create a workflow and add a trigger that runs the job\nconst workflow = new glue.Workflow(stack, 'Workflow');\nworkflow.addOnDemandTrigger('OnDemandTrigger', {\n actions: [{ job }],\n});\n```\n\n#### **1. On-Demand Triggers**\n\nOn-demand triggers can start glue jobs or crawlers. This construct provides\nconvenience functions to create on-demand crawler or job triggers. The constructor\ntakes an optional description parameter, but abstracts the requirement of an\nactions list using the job or crawler objects using conditional types.\n\n#### **2. Scheduled Triggers**\n\nYou can create scheduled triggers using cron expressions. This construct\nprovides daily and weekly convenience functions,\nas well as a custom function that allows you to create your own\ncustom timing using the [existing event Schedule class](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_events.Schedule.html)\nwithout having to build your own cron expressions. The L2 extracts\nthe expression that Glue requires from the Schedule object. The constructor\ntakes an optional description and a list of jobs or crawlers as actions.\n\n#### **3. Notify Event Triggers**\n\nThere are two types of notify event triggers: batching and non-batching.\nFor batching triggers, you must specify `BatchSize`. For non-batching\ntriggers, `BatchSize` defaults to 1. For both triggers, `BatchWindow`\ndefaults to 900 seconds, but you can override the window to align with\nyour workload's requirements.\n\n#### **4. Conditional Triggers**\n\nConditional triggers have a predicate and actions associated with them.\nThe trigger actions are executed when the predicateCondition is true.\n\n### Connection Properties\n\nA `Connection` allows Glue jobs, crawlers and development endpoints to access\ncertain types of data stores.\n\n* **Secrets Management**\n Manage JDBC connection credentials in Secrets Manager and pass the secret\n to the connection via the `secret` property (see the example below), rather\n than embedding credentials in `properties`.\n\n* **Networking - the CDK determines the best fit subnet for Glue connection\nconfiguration**\n You can specify the exact subnet of the Connection when it's defined, but\n you are not required to. Instead, you can provide a `vpc` and, optionally, a\n `vpcSubnets` selection, and the L2 leverages the existing\n [EC2 Subnet Selection](https://docs.aws.amazon.com/cdk/api/v2/python/aws_cdk.aws_ec2/SubnetSelection.html)\n library to make the best choice selection for the subnet. A Glue connection\n targets a single subnet, so the first subnet of the selection is used.\n `subnet` and `vpc` are mutually exclusive.\n\nPin the connection to a specific subnet:\n\n```ts\ndeclare const securityGroup: ec2.SecurityGroup;\ndeclare const subnet: ec2.Subnet;\nnew glue.Connection(this, 'MyConnection', {\n type: glue.ConnectionType.NETWORK,\n // The security groups granting AWS Glue inbound access to the data source within the VPC\n securityGroups: [securityGroup],\n // The VPC subnet which contains the data source\n subnet,\n});\n```\n\nOr let the CDK select a subnet from a VPC:\n\n```ts\ndeclare const securityGroup: ec2.SecurityGroup;\ndeclare const vpc: ec2.Vpc;\nnew glue.Connection(this, 'MyConnection', {\n type: glue.ConnectionType.NETWORK,\n securityGroups: [securityGroup],\n vpc,\n // Optional - defaults to private subnets\n vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },\n});\n```\n\nFor RDS `Connection` by JDBC, it is recommended to manage credentials using AWS Secrets Manager. Pass the secret via the `secret` property: Glue reads the credentials at runtime through the connection's `SECRET_ID`, so the secret value never enters the template. Note that in this case, the subnet must have a route to the AWS Secrets Manager VPC endpoint or to the AWS Secrets Manager endpoint through a NAT gateway.\n\n```ts\ndeclare const securityGroup: ec2.SecurityGroup;\ndeclare const subnet: ec2.Subnet;\ndeclare const db: rds.DatabaseCluster;\nnew glue.Connection(this, \"RdsConnection\", {\n type: glue.ConnectionType.JDBC,\n securityGroups: [securityGroup],\n subnet,\n secret: db.secret,\n properties: {\n JDBC_CONNECTION_URL: `jdbc:mysql://${db.clusterEndpoint.socketAddress}/databasename`,\n JDBC_ENFORCE_SSL: \"false\",\n },\n});\n```\n\nPrefer the `secret` property over placing credentials in `properties`. Connection\n`properties` are emitted verbatim into the CloudFormation template, so any\ncredential placed there in plaintext is stored in plaintext in the template,\n`cdk.out`, and source control. If a property key looks like a credential (for\nexample `PASSWORD`, `SECRET`, or `TOKEN`) and holds a plaintext literal, the\nconstruct emits a synthesis-time warning.\n\nIf you need to use a connection type that doesn't exist as a static member on `ConnectionType`, you can instantiate a `ConnectionType` object, e.g: `new glue.ConnectionType('NEW_TYPE')`.\n\nSee [Adding a Connection to Your Data Store](https://docs.aws.amazon.com/glue/latest/dg/populate-add-connection.html) and [Connection Structure](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-connections.html#aws-glue-api-catalog-connections-Connection) documentation for more information on the supported data stores and their configurations.\n\n## SecurityConfiguration\n\nA `SecurityConfiguration` is a set of security properties that can be used by AWS Glue to encrypt data at rest.\n\nEach encryption config is built with a factory that pairs the encryption mode\nwith its key, so illegal combinations (such as an S3-managed encryption carrying\na KMS key) cannot be expressed:\n\n```ts\nnew glue.SecurityConfiguration(this, 'MySecurityConfiguration', {\n cloudWatchEncryption: glue.CloudWatchEncryption.kms(),\n jobBookmarksEncryption: glue.JobBookmarksEncryption.clientSideKms(),\n s3Encryption: glue.S3Encryption.kms(),\n});\n```\n\nBy default, a shared KMS key is created for use with the encryption configurations that require one. You can also supply your own key to any factory, for example, for CloudWatch encryption:\n\n```ts\ndeclare const key: kms.Key;\nnew glue.SecurityConfiguration(this, 'MySecurityConfiguration', {\n cloudWatchEncryption: glue.CloudWatchEncryption.kms(key),\n});\n```\n\nUse `glue.S3Encryption.s3Managed()` for S3-managed (SSE-S3) encryption, which takes no key.\n\nSee [documentation](https://docs.aws.amazon.com/glue/latest/dg/encryption-security-configuration.html) for more info for Glue encrypting data written by Crawlers, Jobs, and Development Endpoints.\n\n## Catalog\n\nThe Glue Data Catalog is a persistent metadata store for your data assets. Every\naccount has an implicit, account-wide catalog that always exists, and you can also\ncreate additional catalogs as `AWS::Glue::Catalog` resources (for example, to\nfederate to another metastore).\n\nA catalog's encryption is fixed when the catalog is created: a catalog either\ncarries encryption settings or it does not. This keeps its configuration easy to\nreason about — there are no mutation methods that change encryption after the fact.\n\n### The account-wide catalog\n\nUse `Catalog.forAccount(scope)` to obtain the implicit account catalog. It is not\na CloudFormation resource — it always exists. Repeated calls within the same stack\nreturn the same instance:\n\n```ts\nconst catalog = glue.Catalog.forAccount(this);\n```\n\nTo configure Data Catalog encryption for the account, use\n`Catalog.encryptAccount(scope, options)`:\n\n```ts\ndeclare const key: kms.Key;\nglue.Catalog.encryptAccount(this, {\n encryptionAtRest: glue.DataCatalogEncryptionAtRest.kms(key),\n});\n```\n\nBecause encryption is fixed at construction, `encryptAccount` must be called\n*before* the account catalog is first used in the stack — before any\n`Catalog.forAccount(this)` call, and before any `Database` that uses the account\ncatalog. Calling it after the account catalog has been materialized throws.\n\nThe account catalog's encryption is an account- and region-wide setting, managed\nthrough the singleton `PutDataCatalogEncryptionSettings` API. Configure it in\nexactly one stack. Configuring it from multiple stacks in the same account and\nregion makes those stacks overwrite one another at deploy time, and the result is\norder-dependent. Unlike duplicate settings within a single stack (which\nCloudFormation rejects), this cross-stack conflict is not caught at synthesis\ntime, because each stack synthesizes to its own template.\n\n### Creating a catalog\n\nTo create a new catalog resource, use the `Catalog` constructor. Encryption is\nconfigured through the `encryptionAtRest` and `connectionPasswordEncryption` props:\n\n```ts\nnew glue.Catalog(this, 'MyCatalog', {\n catalogName: 'my-catalog',\n description: 'my catalog description',\n});\n```\n\n### Encryption at rest\n\nConfigure Data Catalog encryption at rest through the `encryptionAtRest` option\n(on `Catalog.encryptAccount` or the `Catalog` constructor).\nIt accepts a `DataCatalogEncryptionAtRest` describing the mode:\n\n```ts\ndeclare const key: kms.Key;\n\n// SSE-KMS with a customer-managed key\nglue.Catalog.encryptAccount(this, {\n encryptionAtRest: glue.DataCatalogEncryptionAtRest.kms(key),\n});\n\n// SSE-KMS with an AWS-managed key (omit the key)\nnew glue.Catalog(this, 'ManagedKeyCatalog', {\n catalogName: 'managed-key-catalog',\n encryptionAtRest: glue.DataCatalogEncryptionAtRest.kms(),\n});\n\n// Disable encryption at rest\nnew glue.Catalog(this, 'PlaintextCatalog', {\n catalogName: 'plaintext-catalog',\n encryptionAtRest: glue.DataCatalogEncryptionAtRest.disabled(),\n});\n```\n\nWhen you use `SSE-KMS-WITH-SERVICE-ROLE`, AWS Glue accesses the KMS key through a\nservice role you provide. If you pass a customer-managed key, the role is\nautomatically granted the permissions it needs to encrypt and decrypt catalog data:\n\n```ts\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const key: kms.Key;\ndeclare const role: iam.IRole;\nglue.Catalog.encryptAccount(this, {\n encryptionAtRest: glue.DataCatalogEncryptionAtRest.kmsWithServiceRole(role, key),\n});\n```\n\nThe customer-managed key, when configured, is exposed on the catalog as\n`encryptionKey` (and the connection-password key as `connectionPasswordKey`), so\nyou can reference it to grant additional access. It is undefined when encryption is\ndisabled or an AWS-managed key is used.\n\n### Connection password encryption\n\nIndependently from encryption at rest, the Data Catalog can encrypt the passwords\nstored in connection properties. Configure it through the\n`connectionPasswordEncryption` option:\n\n```ts\ndeclare const key: kms.Key;\nglue.Catalog.encryptAccount(this, {\n connectionPasswordEncryption: {\n kmsKey: key,\n // Whether GetConnection/GetConnections return the password encrypted (default: true)\n returnConnectionPasswordEncrypted: true,\n },\n});\n```\n\nThe two encryption blocks are independent: enabling one does not require the other,\nand each may use a different KMS key. The customer-managed key for connection\npasswords is exposed as `connectionPasswordKey`.\n\n### Importing a catalog\n\nYou can import an existing catalog by ARN or by id. An imported catalog is a pure\nidentity handle — it emits no resources and does not manage the catalog's\nencryption:\n\n```ts\nconst byId = glue.Catalog.fromCatalogId(this, 'ById', 'my-catalog-id');\nconst byArn = glue.Catalog.fromCatalogArn(this, 'ByArn', 'arn:aws:glue:us-east-1:123456789012:catalog/my-catalog-id');\n```\n\nTo manage the Data Catalog encryption of a catalog you did not create in this\nstack, add a `CfnDataCatalogEncryptionSettings` resource targeting its id\ndirectly. Do this from exactly one stack: like the account catalog, a catalog has\na single encryption configuration, so two settings resources targeting the same id\nrace to overwrite one another at deploy time. Within a single stack this is caught\nby CloudFormation template validation (E3019, duplicate primary identifiers);\nacross stacks it is not, since each stack synthesizes to its own template.\n\n```ts\nimport { CfnDataCatalogEncryptionSettings } from 'aws-cdk-lib/aws-glue';\n\nnew CfnDataCatalogEncryptionSettings(this, 'Encryption', {\n catalogId: 'my-catalog-id',\n dataCatalogEncryptionSettings: {\n encryptionAtRest: { catalogEncryptionMode: 'SSE-KMS' },\n },\n});\n```\n\n## Database\n\nA `Database` is a logical grouping of `Tables` in the Glue Catalog.\n\n```ts\nnew glue.Database(this, 'MyDatabase', {\n databaseName: 'my_database',\n description: 'my_database_description',\n});\n```\n\nBecause a database is a container for tables and their metadata, it is retained\nby default when removed from the stack, to avoid accidental data loss. Set\n`removalPolicy` to `RemovalPolicy.DESTROY` to have it deleted instead:\n\n```ts\nimport { RemovalPolicy } from 'aws-cdk-lib';\n\nnew glue.Database(this, 'MyDatabase', {\n databaseName: 'my_database',\n removalPolicy: RemovalPolicy.DESTROY,\n});\n```\n\n## Table\n\nA Glue table describes a table of data in S3: its structure (column names and types), location of data (S3 objects with a common prefix in a S3 bucket), and format for the files (Json, Avro, Parquet, etc.):\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }, {\n name: 'col2',\n type: glue.Schema.array(glue.Schema.STRING),\n comment: 'col2 is an array of strings' // comment is optional\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nBy default, a S3 bucket will be created to store the table's data but you can bring your own with `S3TableStorage.fromBucket` and set an `s3Prefix`:\n\n```ts\ndeclare const myBucket: s3.Bucket;\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n storage: glue.S3TableStorage.fromBucket(myBucket),\n s3Prefix: 'my-table/',\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nGlue tables can be configured to contain user-defined properties, to describe the physical storage of table data, through the `storageParameters` property:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n storageParameters: [\n glue.StorageParameter.skipHeaderLineCount(1),\n glue.StorageParameter.compressionType(glue.CompressionType.GZIP),\n glue.StorageParameter.custom('separatorChar', ',')\n ],\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nGlue tables can also be configured to contain user-defined table properties through the [`parameters`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html#cfn-glue-table-tableinput-parameters) property:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n parameters: {\n key1: 'val1',\n key2: 'val2',\n },\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\n### Partition Keys\n\nTo improve query performance, a table can specify `partitionKeys` on which data is stored and queried separately. For example, you might partition a table by `year` and `month` to optimize queries based on a time window:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'year',\n type: glue.Schema.SMALL_INT,\n }, {\n name: 'month',\n type: glue.Schema.SMALL_INT,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\n### Partition Indexes\n\nAnother way to improve query performance is to specify partition indexes. If no partition indexes are\npresent on the table, AWS Glue loads all partitions of the table and filters the loaded partitions using\nthe query expression. The query takes more time to run as the number of partitions increase. With an\nindex, the query will try to fetch a subset of the partitions instead of loading all partitions of the\ntable.\n\nThe keys of a partition index must be a subset of the partition keys of the table. You can have a\nmaximum of 3 partition indexes per table. To specify a partition index, you can use the `partitionIndexes`\nproperty:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'year',\n type: glue.Schema.SMALL_INT,\n }, {\n name: 'month',\n type: glue.Schema.SMALL_INT,\n }],\n partitionIndexes: [{\n indexName: 'my-index', // optional\n keyNames: ['year'],\n }], // supply up to 3 indexes\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nAlternatively, you can call the `addPartitionIndex()` function on a table:\n\n```ts\ndeclare const myTable: glue.S3Table;\nmyTable.addPartitionIndex({\n indexName: 'my-index',\n keyNames: ['year'],\n});\n```\n\n### Partition Filtering\n\nIf you have a table with a large number of partitions that grows over time, consider using AWS Glue partition indexing and filtering.\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'year',\n type: glue.Schema.SMALL_INT,\n }, {\n name: 'month',\n type: glue.Schema.SMALL_INT,\n }],\n dataFormat: glue.DataFormat.JSON,\n enablePartitionFiltering: true,\n});\n```\n\n### Partition Projection\n\nPartition projection allows Athena to automatically add new partitions as new data arrives, without requiring `ALTER TABLE ADD PARTITION` statements. This improves query performance and reduces management overhead by eliminating the need to manually manage partition metadata.\n\nFor more information, see the [AWS documentation on partition projection](https://docs.aws.amazon.com/athena/latest/ug/partition-projection.html).\n\n#### INTEGER Projection\n\nFor partition keys with sequential numeric values:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'data',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'year',\n type: glue.Schema.INTEGER,\n }],\n dataFormat: glue.DataFormat.JSON,\n partitionProjection: {\n year: glue.PartitionProjectionConfiguration.integer({\n min: 2020,\n max: 2023,\n interval: 1, // optional, defaults to 1\n digits: 4, // optional, pads with leading zeros\n }),\n },\n});\n```\n\n#### DATE Projection\n\nFor partition keys with date or timestamp values. Supports both fixed dates and relative dates using `NOW`:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'data',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'date',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n partitionProjection: {\n date: glue.PartitionProjectionConfiguration.date({\n min: '2020-01-01',\n max: '2023-12-31',\n format: 'yyyy-MM-dd',\n interval: 1, // optional, defaults to 1\n intervalUnit: glue.DateIntervalUnit.DAYS, // optional: YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS\n }),\n },\n});\n```\n\nYou can also use relative dates with `NOW`:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'data',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'date',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n partitionProjection: {\n date: glue.PartitionProjectionConfiguration.date({\n min: 'NOW-3YEARS',\n max: 'NOW',\n format: 'yyyy-MM-dd',\n }),\n },\n});\n```\n\n#### ENUM Projection\n\nFor partition keys with a known set of values:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'data',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'region',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n partitionProjection: {\n region: glue.PartitionProjectionConfiguration.enum({\n values: ['us-east-1', 'us-west-2', 'eu-west-1'],\n }),\n },\n});\n```\n\n#### INJECTED Projection\n\nFor custom partition values injected at query time:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'data',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'custom',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n partitionProjection: {\n custom: glue.PartitionProjectionConfiguration.injected(),\n },\n});\n```\n\n#### Multiple Partition Projections\n\nYou can configure partition projection for multiple partition keys:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'data',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [\n {\n name: 'year',\n type: glue.Schema.INTEGER,\n },\n {\n name: 'month',\n type: glue.Schema.INTEGER,\n },\n {\n name: 'region',\n type: glue.Schema.STRING,\n },\n ],\n dataFormat: glue.DataFormat.JSON,\n partitionProjection: {\n year: glue.PartitionProjectionConfiguration.integer({\n min: 2020,\n max: 2023,\n }),\n month: glue.PartitionProjectionConfiguration.integer({\n min: 1,\n max: 12,\n digits: 2,\n }),\n region: glue.PartitionProjectionConfiguration.enum({\n values: ['us-east-1', 'us-west-2'],\n }),\n },\n});\n```\n\n### Glue Connections\n\nGlue connections allow external data connections to third party databases and data warehouses. However, these connections can also be assigned to Glue Tables, allowing you to query external data sources using the Glue Data Catalog.\n\nWhereas `S3Table` will point to (and if needed, create) a bucket to store the tables' data, `ExternalTable` will point to an existing table in a data source. For example, to create a table in Glue that points to a table in Redshift:\n\n```ts\ndeclare const myConnection: glue.Connection;\ndeclare const myDatabase: glue.Database;\nnew glue.ExternalTable(this, 'MyTable', {\n connection: myConnection,\n externalDataLocation: 'default_db_public_example', // A table in Redshift\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\n## Data Quality Ruleset\n\nA `DataQualityRuleset` defines a set of data quality rules — authored in Glue's\nData Quality Definition Language (DQDL) — that are evaluated against a table in\nthe Data Catalog.\n\n```ts\nnew glue.DataQualityRuleset(this, 'MyRuleset', {\n rulesetName: 'my_ruleset',\n dqdl: glue.Dqdl.fromString('Rules = [ RowCount > 100, IsComplete \"order_id\" ]'),\n targetTable: new glue.DataQualityTargetTable('my_database', 'my_table'),\n});\n```\n\nBuild the DQDL document with `Dqdl.fromString(...)`. Glue parses and validates the\nDQDL when the ruleset is deployed; see the\n[DQDL reference](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html) for the\nfull rule syntax.\n\n## [Encryption](https://docs.aws.amazon.com/athena/latest/ug/encryption.html)\n\nWhen the table creates its own S3 bucket (`S3TableStorage.managedBucket`, the default), that bucket enforces SSL: a bucket policy denies any request made over plain HTTP. If you bring your own bucket with `S3TableStorage.fromBucket`, enabling `enforceSSL` on it is your responsibility.\n\nServer-side encryption applies only to a bucket the table manages. Choose it with\n`storage: glue.S3TableStorage.managedBucket(...)`:\n\n* [S3Managed](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html) - (default) Server side encryption (`SSE-S3`) with an Amazon S3-managed key.\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n storage: glue.S3TableStorage.managedBucket(glue.S3TableEncryption.s3Managed()),\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\n* [Kms](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html) - Server-side encryption (`SSE-KMS`) with an AWS KMS Key managed by the account owner.\n\n```ts\ndeclare const myDatabase: glue.Database;\n// KMS key is created automatically\nnew glue.S3Table(this, 'MyTable', {\n storage: glue.S3TableStorage.managedBucket(glue.S3TableEncryption.kms()),\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n\n// with an explicit KMS key\nnew glue.S3Table(this, 'MyTable', {\n storage: glue.S3TableStorage.managedBucket(glue.S3TableEncryption.kms(new kms.Key(this, 'MyKey'))),\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\n* [KmsManaged](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html) - Server-side encryption (`SSE-KMS`), like `Kms`, except with an AWS KMS Key managed by the AWS Key Management Service.\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n storage: glue.S3TableStorage.managedBucket(glue.S3TableEncryption.kmsManaged()),\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nClient-side encryption ([CSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html#client-side-encryption-kms-managed-master-key-intro)) is independent of the bucket's server-side encryption and works with either a managed or an existing bucket. Configure it with `clientSideEncryption`:\n\n```ts\ndeclare const myDatabase: glue.Database;\n// KMS key is created automatically\nnew glue.S3Table(this, 'MyTable', {\n clientSideEncryption: glue.TableClientSideEncryption.kms(),\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n\n// with an explicit KMS key\nnew glue.S3Table(this, 'MyTable', {\n clientSideEncryption: glue.TableClientSideEncryption.kms(new kms.Key(this, 'MyKey')),\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nTo store the table's data in an existing bucket, use `glue.S3TableStorage.fromBucket(bucket)`. CDK does not manage that bucket's server-side encryption, so an encryption choice can never be paired with a provided bucket — but client-side encryption still applies.\n\n### Marking table data as encrypted\n\nBoth `S3Table` and `ExternalTable` set the `has_encrypted_data` table parameter, which\nAthena reads when querying client-side (`CSE-KMS`) encrypted datasets. It defaults to `true`.\nSet `hasEncryptedData` to `false` when the underlying data is not encrypted:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n hasEncryptedData: false,\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nDo not set `has_encrypted_data` through the free-form `parameters` map as well - a value\nthere that conflicts with `hasEncryptedData` is rejected at synthesis time.\n\n## Types\n\nA table's schema is a collection of columns, each of which have a `name` and a `type`. Types are recursive structures, consisting of primitive and complex types:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n columns: [{\n name: 'primitive_column',\n type: glue.Schema.STRING,\n }, {\n name: 'array_column',\n type: glue.Schema.array(glue.Schema.INTEGER),\n comment: 'array<integer>',\n }, {\n name: 'map_column',\n type: glue.Schema.map(\n glue.Schema.STRING,\n glue.Schema.TIMESTAMP),\n comment: 'map<string,timestamp>',\n }, {\n name: 'struct_column',\n type: glue.Schema.struct([{\n name: 'nested_column',\n type: glue.Schema.DATE,\n comment: 'nested comment',\n }]),\n comment: \"struct<nested_column:date COMMENT 'nested comment'>\",\n }],\n // ...\n database: myDatabase,\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nFor a type the `Schema` factories don't model, use `glue.Schema.custom('...')`, which takes the raw Glue input string.\n\n## Public FAQ\n\n### What are we launching today?\n\nWe’re launching new features to an AWS CDK Glue L2 Construct to provide\nbest-practice defaults and convenience methods to create Glue Jobs, Connections,\nTriggers, Workflows, and the underlying permissions and configuration.\n\n### Why should I use this Construct?\n\nDevelopers should use this Construct to reduce the amount of boilerplate\ncode and complexity each individual has to navigate, and make it easier to\ncreate best-practice Glue resources.\n\n### What’s not in scope?\n\nGlue Crawlers and other resources that are now managed by the AWS LakeFormation\nteam are not in scope for this effort. Developers should use existing methods\nto create these resources, and the new Glue L2 construct assumes they already\nexist as inputs. While best practice is for application and infrastructure code\nto be as close as possible for teams using fully-implemented DevOps mechanisms,\nin practice these ETL scripts are likely managed by a data science team who\nknow Python or Scala and don’t necessarily own or manage their own\ninfrastructure deployments. We want to meet developers where they are, and not\nassume that all of the code resides in the same repository, Developers can\nautomate this themselves via the CDK, however, if they do own both.\n\nValidating Glue version and feature use per AWS region at synth time is also\nnot in scope. AWS’ intention is for all features to eventually be propagated to\nall Global regions, so the complexity involved in creating and updating region-\nspecific configuration to match shifting feature sets does not out-weigh the\nlikelihood that a developer will use this construct to deploy resources to a\nregion without a particular new feature to a region that doesn’t yet support\nit without researching or manually attempting to use that feature before\ndeveloping it via IaC. The developer will, of course, still get feedback from\nthe underlying Glue APIs as CloudFormation deploys the resources similar to the\ncurrent CDK L1 Glue experience.\n"
9586
+ "markdown": "# AWS Glue Construct Library\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)\n\n> The APIs of higher level constructs in this module are experimental and under active development.\n> They are subject to non-backward compatible changes or removal in any future version. These are\n> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be\n> announced in the release notes. This means that while you may use them, you may need to update\n> your source code when upgrading to a newer version of this package.\n\n---\n\n<!--END STABILITY BANNER-->\n\nThis module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project.\n\n## README\n\n[AWS Glue](https://aws.amazon.com/glue/) is a serverless data integration\nservice that makes it easier to discover, prepare, move, and integrate data\nfrom multiple sources for analytics, machine learning (ML), and application\ndevelopment.\n\nThe Glue L2 construct has convenience methods working backwards from common\nuse cases and sets required parameters to defaults that align with recommended\nbest practices for each job type. It also provides customers with a balance\nbetween flexibility via optional parameter overrides, and opinionated\ninterfaces that discouraging anti-patterns, resulting in reduced time to develop\nand deploy new resources.\n\n### References\n\n* [Glue Launch Announcement](https://aws.amazon.com/blogs/aws/launch-aws-glue-now-generally-available/)\n* [Glue Documentation](https://docs.aws.amazon.com/glue/index.html)\n* [Glue L1 (CloudFormation) Constructs](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Glue.html)\n* Prior version of the [@aws-cdk/aws-glue-alpha module](https://github.com/aws/aws-cdk/blob/v2.51.1/packages/%40aws-cdk/aws-glue/README.md)\n\n## Create a Glue Job\n\nA Job encapsulates a script that connects to data sources, processes\nthem, and then writes output to a data target. There are four types of Glue\nJobs: Spark (ETL and Streaming), Python Shell, and Flex Jobs. Most\nof the required parameters for these jobs are common across all types,\nbut there are a few differences depending on the languages supported\nand features provided by each type. For all job types, the L2 defaults\nto AWS best practice recommendations, such as:\n\n* Use of Secrets Manager for Connection JDBC strings\n* Glue job autoscaling\n* Default parameter values for Glue job creation\n\nThis iteration of the L2 construct introduces breaking changes to\nthe existing glue-alpha-module, but these changes streamline the developer\nexperience, introduce new constants for defaults, and replacing synth-time\nvalidations with interface contracts for enforcement of the parameter combinations\nthat Glue supports. As an opinionated construct, the Glue L2 construct does\nnot allow developers to create resources that use non-current versions\nof Glue or deprecated language dependencies (e.g. deprecated versions of Python).\nAs always, L1s allow you to specify a wider range of parameters if you need\nor want to use alternative configurations.\n\nOptional and required parameters for each job are enforced via interface\nrather than validation; see [Glue's public documentation](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api.html)\nfor more granular details.\n\n### Spark Jobs\n\n#### ETL Jobs\n\nETL jobs support pySpark and Scala languages, for which there are separate but\nsimilar constructors. ETL jobs default to the G1 worker type, but you can\noverride this default with other supported worker type values (G1, G2, G4\nand G8). ETL jobs defaults to Glue version 4.0, which you can override to 3.0.\nThe following ETL features are enabled by default:\n`—enable-metrics, —enable-continuous-cloudwatch-log.`\nThe Spark UI (`—enable-spark-ui`) is off by default; enable it by setting the\n`sparkUI` prop.\nYou can find more details about version, worker type and other features in\n[Glue's public documentation](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html).\n\nReference the pyspark-etl-jobs.test.ts and scalaspark-etl-jobs.test.ts unit tests\nfor examples of required-only and optional job parameters when creating these\ntypes of jobs.\n\nFor the sake of brevity, examples are shown using the pySpark job variety.\n\nExample with only required parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkEtlJob(stack, 'PySparkETLJob', {\n role,\n script,\n jobName: 'PySparkETLJob',\n});\n```\n\nExample with optional override parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkEtlJob(stack, 'PySparkETLJob', {\n jobName: 'PySparkETLJobCustomName',\n description: 'This is a description',\n role,\n script,\n glueVersion: glue.GlueVersion.V5_1,\n continuousLogging: { enabled: false },\n workerConfiguration: {\n workerType: glue.WorkerType.G_2X,\n numberOfWorkers: 2,\n },\n maxConcurrentRuns: 100,\n timeout: cdk.Duration.hours(2),\n connections: [glue.Connection.fromConnectionName(stack, 'Connection', 'connectionName')],\n securityConfiguration: glue.SecurityConfiguration.fromSecurityConfigurationName(stack, 'SecurityConfig', 'securityConfigName'),\n tags: {\n FirstTagName: 'FirstTagValue',\n SecondTagName: 'SecondTagValue',\n XTagName: 'XTagValue',\n },\n maxRetries: 2,\n});\n```\n\n#### Streaming Jobs\n\nStreaming jobs are similar to ETL jobs, except that they perform ETL on data\nstreams using the Apache Spark Structured Streaming framework. Some Spark\njob features are not available to Streaming ETL jobs. They support Scala\nand pySpark languages. PySpark streaming jobs run on Python 3. It\ndefaults to the G1 worker type and Glue 4.0, both of which you can override.\nThe following best practice features are enabled by default:\n`—enable-metrics, —enable-continuous-cloudwatch-log`.\nThe Spark UI (`—enable-spark-ui`) is off by default; enable it by setting the\n`sparkUI` prop.\n\nReference the pyspark-streaming-jobs.test.ts and scalaspark-streaming-jobs.test.ts\nunit tests for examples of required-only and optional job parameters when creating\nthese types of jobs.\n\nExample with only required parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkStreamingJob(stack, 'ImportedJob', { role, script });\n```\n\nExample with optional override parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkStreamingJob(stack, 'PySparkStreamingJob', {\n jobName: 'PySparkStreamingJobCustomName',\n description: 'This is a description',\n role,\n script,\n glueVersion: glue.GlueVersion.V5_1,\n continuousLogging: { enabled: false },\n workerConfiguration: {\n workerType: glue.WorkerType.G_2X,\n numberOfWorkers: 2,\n },\n maxConcurrentRuns: 100,\n timeout: cdk.Duration.hours(2),\n connections: [glue.Connection.fromConnectionName(stack, 'Connection', 'connectionName')],\n securityConfiguration: glue.SecurityConfiguration.fromSecurityConfigurationName(stack, 'SecurityConfig', 'securityConfigName'),\n tags: {\n FirstTagName: 'FirstTagValue',\n SecondTagName: 'SecondTagValue',\n XTagName: 'XTagValue',\n },\n maxRetries: 2,\n});\n```\n\n#### Flex Jobs\n\nThe flexible execution class is appropriate for non-urgent jobs such as\npre-production jobs, testing, and one-time data loads. Flexible jobs default\nto Glue version 5.0 and worker type `G_1X`. The following best practice\nfeatures are enabled by default:\n`—enable-metrics, —enable-continuous-cloudwatch-log`\nThe Spark UI (`—enable-spark-ui`) is off by default; enable it by setting the\n`sparkUI` prop.\n\nReference the pyspark-flex-etl-jobs.test.ts and scalaspark-flex-etl-jobs.test.ts\nunit tests for examples of required-only and optional job parameters when creating\nthese types of jobs.\n\nExample with only required parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkFlexEtlJob(stack, 'ImportedJob', { role, script });\n```\n\nExample with optional override parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkFlexEtlJob(stack, 'pySparkFlexEtlJob', {\n jobName: 'pySparkFlexEtlJob',\n description: 'This is a description',\n role,\n script,\n glueVersion: glue.GlueVersion.V5_1,\n continuousLogging: { enabled: false },\n workerConfiguration: {\n workerType: glue.WorkerType.G_2X,\n numberOfWorkers: 2,\n },\n maxConcurrentRuns: 100,\n timeout: cdk.Duration.hours(2),\n connections: [glue.Connection.fromConnectionName(stack, 'Connection', 'connectionName')],\n securityConfiguration: glue.SecurityConfiguration.fromSecurityConfigurationName(stack, 'SecurityConfig', 'securityConfigName'),\n tags: {\n FirstTagName: 'FirstTagValue',\n SecondTagName: 'SecondTagValue',\n XTagName: 'XTagValue',\n },\n maxRetries: 2,\n});\n```\n\n### Python Shell Jobs\n\nPython shell jobs support a Python version that depends on the AWS Glue\nversion you use. These can be used to schedule and run tasks that don't\nrequire an Apache Spark environment. Python shell jobs default to\nPython 3.9 and a MaxCapacity of `0.0625`. Python 3.9 supports pre-loaded\nanalytics libraries using the `library-set=analytics` flag, which is\nenabled by default.\n\nReference the pyspark-shell-job.test.ts unit tests for examples of\nrequired-only and optional job parameters when creating these types of jobs.\n\nExample with only required parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PythonShellJob(stack, 'ImportedJob', { role, script });\n```\n\nExample with optional override parameters:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\ndeclare const extraPythonFile: glue.Code;\nnew glue.PythonShellJob(stack, 'PythonShellJob', {\n jobName: 'PythonShellJobCustomName',\n description: 'This is a description',\n pythonVersion: glue.PythonVersion.THREE_NINE,\n maxCapacity: glue.MaxCapacity.DPU_1,\n role,\n script,\n extraPythonFiles: [extraPythonFile],\n glueVersion: glue.GlueVersion.V3_0,\n continuousLogging: { enabled: false },\n maxConcurrentRuns: 100,\n timeout: cdk.Duration.hours(2),\n connections: [glue.Connection.fromConnectionName(stack, 'Connection', 'connectionName')],\n securityConfiguration: glue.SecurityConfiguration.fromSecurityConfigurationName(stack, 'SecurityConfig', 'securityConfigName'),\n tags: {\n FirstTagName: 'FirstTagValue',\n SecondTagName: 'SecondTagValue',\n XTagName: 'XTagValue',\n },\n maxRetries: 2,\n});\n```\n\n### Ray Jobs\n\n> **⚠️ DEPRECATED:** AWS Glue for Ray is closed to new customers as of April 30, 2026 and is in maintenance mode.\n> Migrate to [Amazon EKS with KubeRay Operator](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html).\n\nThe `RayJob` construct, `Runtime.RAY_TWO_FOUR`, and `JobType.RAY` are deprecated and will be removed in a future release.\n\n### Metrics Control\n\nBy default, Glue jobs enable CloudWatch metrics (`--enable-metrics`) and observability metrics (`--enable-observability-metrics`) for monitoring and debugging. You can disable these metrics to reduce CloudWatch costs:\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\n\n// Disable both metrics for cost optimization\nnew glue.PySparkEtlJob(stack, 'CostOptimizedJob', {\n role,\n script,\n enableMetrics: false,\n enableObservabilityMetrics: false,\n});\n\n// Selective control - keep observability, disable profiling\nnew glue.PySparkEtlJob(stack, 'SelectiveJob', {\n role,\n script,\n enableMetrics: false,\n // enableObservabilityMetrics defaults to true\n});\n```\n\nThis feature is available for all Spark job types (ETL, Streaming, Flex).\n\n### Enable Job Run Queuing\n\nAWS Glue job queuing monitors your account level quotas and limits. If quotas or limits are insufficient to start a Glue job run, AWS Glue will automatically queue the job and wait for limits to free up. Once limits become available, AWS Glue will retry the job run. Glue jobs will queue for limits like max concurrent job runs per account, max concurrent Data Processing Units (DPU), and resource unavailable due to IP address exhaustion in Amazon Virtual Private Cloud (Amazon VPC).\n\nEnable job run queuing by setting the `jobRunQueuingEnabled` property to `true`.\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkEtlJob(stack, 'PySparkETLJob', {\n role,\n script,\n jobName: 'PySparkETLJob',\n jobRunQueuingEnabled: true\n});\n```\n\n### Uploading scripts from the CDK app repository to S3\n\nSimilar to other L2 constructs, the Glue L2 automates uploading local\nscripts to S3. Use `glue.Code.fromAsset(path)` to point at a script in your\nlocal file structure; it is uploaded to the CDK-managed asset bucket. To\nreference a script that already exists in S3, use\n`glue.Code.fromBucket(bucket, key)`, which performs no upload. A `script` is\nrequired for every job.\n\nReference the unit tests for examples of repo and S3 code target examples.\n\n### Workflow Triggers\n\nYou can use Glue workflows to create and visualize complex\nextract, transform, and load (ETL) activities involving multiple crawlers,\njobs, and triggers. Standalone triggers are an anti-pattern, so you must\ncreate triggers from within a workflow using the L2 construct.\n\nWithin a workflow object, there are functions to create different\ntypes of triggers with actions and predicates. You add triggers to the\nworkflow, and each trigger references the jobs or crawlers it runs as its\nactions.\n\n`startOnCreation` applies to scheduled triggers (and, via\n`ConditionalTriggerOptions`, conditional triggers) only. It defaults to `false`,\nbut you can override it if you prefer for your trigger to start on creation.\n\nReference the workflow-triggers.test.ts unit tests for examples of creating\nworkflows and triggers.\n\n```ts\nimport * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\n\n// Create a job to run from the workflow\nconst job = new glue.PySparkEtlJob(stack, 'Job', { role, script });\n\n// Create a workflow and add a trigger that runs the job\nconst workflow = new glue.Workflow(stack, 'Workflow');\nworkflow.addOnDemandTrigger('OnDemandTrigger', {\n actions: [{ job }],\n});\n```\n\n#### **1. On-Demand Triggers**\n\nOn-demand triggers can start glue jobs or crawlers. This construct provides\nconvenience functions to create on-demand crawler or job triggers. The constructor\ntakes an optional description parameter, but abstracts the requirement of an\nactions list using the job or crawler objects using conditional types.\n\n#### **2. Scheduled Triggers**\n\nYou can create scheduled triggers using cron expressions. This construct\nprovides daily and weekly convenience functions,\nas well as a custom function that allows you to create your own\ncustom timing using the [existing event Schedule class](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_events.Schedule.html)\nwithout having to build your own cron expressions. The L2 extracts\nthe expression that Glue requires from the Schedule object. The constructor\ntakes an optional description and a list of jobs or crawlers as actions.\n\n#### **3. Notify Event Triggers**\n\nThere are two types of notify event triggers: batching and non-batching.\nFor batching triggers, you must specify `BatchSize`. For non-batching\ntriggers, `BatchSize` defaults to 1. For both triggers, `BatchWindow`\ndefaults to 900 seconds, but you can override the window to align with\nyour workload's requirements.\n\n#### **4. Conditional Triggers**\n\nConditional triggers have a predicate and actions associated with them.\nThe trigger actions are executed when the predicateCondition is true.\n\n### Connection Properties\n\nA `Connection` allows Glue jobs, crawlers and development endpoints to access\ncertain types of data stores.\n\n* **Secrets Management**\n Manage JDBC connection credentials in Secrets Manager and pass the secret\n to the connection via the `secret` property (see the example below), rather\n than embedding credentials in `properties`.\n\n* **Networking - the CDK determines the best fit subnet for Glue connection\nconfiguration**\n You can specify the exact subnet of the Connection when it's defined, but\n you are not required to. Instead, you can provide a `vpc` and, optionally, a\n `vpcSubnets` selection, and the L2 leverages the existing\n [EC2 Subnet Selection](https://docs.aws.amazon.com/cdk/api/v2/python/aws_cdk.aws_ec2/SubnetSelection.html)\n library to make the best choice selection for the subnet. A Glue connection\n targets a single subnet, so the first subnet of the selection is used.\n `subnet` and `vpc` are mutually exclusive.\n\nPin the connection to a specific subnet:\n\n```ts\ndeclare const securityGroup: ec2.SecurityGroup;\ndeclare const subnet: ec2.Subnet;\nnew glue.Connection(this, 'MyConnection', {\n type: glue.ConnectionType.NETWORK,\n // The security groups granting AWS Glue inbound access to the data source within the VPC\n securityGroups: [securityGroup],\n // The VPC subnet which contains the data source\n subnet,\n});\n```\n\nOr let the CDK select a subnet from a VPC:\n\n```ts\ndeclare const securityGroup: ec2.SecurityGroup;\ndeclare const vpc: ec2.Vpc;\nnew glue.Connection(this, 'MyConnection', {\n type: glue.ConnectionType.NETWORK,\n securityGroups: [securityGroup],\n vpc,\n // Optional - defaults to private subnets\n vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },\n});\n```\n\nFor RDS `Connection` by JDBC, it is recommended to manage credentials using AWS Secrets Manager. Pass the secret via the `secret` property: Glue reads the credentials at runtime through the connection's `SECRET_ID`, so the secret value never enters the template. Note that in this case, the subnet must have a route to the AWS Secrets Manager VPC endpoint or to the AWS Secrets Manager endpoint through a NAT gateway.\n\n```ts\ndeclare const securityGroup: ec2.SecurityGroup;\ndeclare const subnet: ec2.Subnet;\ndeclare const db: rds.DatabaseCluster;\nnew glue.Connection(this, \"RdsConnection\", {\n type: glue.ConnectionType.JDBC,\n securityGroups: [securityGroup],\n subnet,\n secret: db.secret,\n properties: {\n JDBC_CONNECTION_URL: `jdbc:mysql://${db.clusterEndpoint.socketAddress}/databasename`,\n JDBC_ENFORCE_SSL: \"false\",\n },\n});\n```\n\nPrefer the `secret` property over placing credentials in `properties`. Connection\n`properties` are emitted verbatim into the CloudFormation template, so any\ncredential placed there in plaintext is stored in plaintext in the template,\n`cdk.out`, and source control. If a property key looks like a credential (for\nexample `PASSWORD`, `SECRET`, or `TOKEN`) and holds a plaintext literal, the\nconstruct emits a synthesis-time warning.\n\nIf you need to use a connection type that doesn't exist as a static member on `ConnectionType`, you can instantiate a `ConnectionType` object, e.g: `new glue.ConnectionType('NEW_TYPE')`.\n\nSee [Adding a Connection to Your Data Store](https://docs.aws.amazon.com/glue/latest/dg/populate-add-connection.html) and [Connection Structure](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-connections.html#aws-glue-api-catalog-connections-Connection) documentation for more information on the supported data stores and their configurations.\n\n## SecurityConfiguration\n\nA `SecurityConfiguration` is a set of security properties that can be used by AWS Glue to encrypt data at rest.\n\nEach encryption config is built with a factory that pairs the encryption mode\nwith its key, so illegal combinations (such as an S3-managed encryption carrying\na KMS key) cannot be expressed:\n\n```ts\nnew glue.SecurityConfiguration(this, 'MySecurityConfiguration', {\n cloudWatchEncryption: glue.CloudWatchEncryption.kms(),\n jobBookmarksEncryption: glue.JobBookmarksEncryption.clientSideKms(),\n s3Encryption: glue.S3Encryption.kms(),\n});\n```\n\nBy default, a shared KMS key is created for use with the encryption configurations that require one. You can also supply your own key to any factory, for example, for CloudWatch encryption:\n\n```ts\ndeclare const key: kms.Key;\nnew glue.SecurityConfiguration(this, 'MySecurityConfiguration', {\n cloudWatchEncryption: glue.CloudWatchEncryption.kms(key),\n});\n```\n\nUse `glue.S3Encryption.s3Managed()` for S3-managed (SSE-S3) encryption, which takes no key.\n\nSee [documentation](https://docs.aws.amazon.com/glue/latest/dg/encryption-security-configuration.html) for more info for Glue encrypting data written by Crawlers, Jobs, and Development Endpoints.\n\n## Catalog\n\nThe Glue Data Catalog is a persistent metadata store for your data assets. Every\naccount has an implicit, account-wide catalog that always exists, and you can also\ncreate additional catalogs as `AWS::Glue::Catalog` resources (for example, to\nfederate to another metastore).\n\nA catalog's encryption is fixed when the catalog is created: a catalog either\ncarries encryption settings or it does not. This keeps its configuration easy to\nreason about — there are no mutation methods that change encryption after the fact.\n\n### The account-wide catalog\n\nUse `Catalog.forAccount(scope)` to obtain the implicit account catalog. It is not\na CloudFormation resource — it always exists. Repeated calls within the same stack\nreturn the same instance:\n\n```ts\nconst catalog = glue.Catalog.forAccount(this);\n```\n\nTo configure Data Catalog encryption for the account, use\n`Catalog.encryptAccount(scope, options)`:\n\n```ts\ndeclare const key: kms.Key;\nglue.Catalog.encryptAccount(this, {\n encryptionAtRest: glue.DataCatalogEncryptionAtRest.kms(key),\n});\n```\n\nBecause encryption is fixed at construction, `encryptAccount` must be called\n*before* the account catalog is first used in the stack — before any\n`Catalog.forAccount(this)` call, and before any `Database` that uses the account\ncatalog. Calling it after the account catalog has been materialized throws.\n\nThe account catalog's encryption is an account- and region-wide setting, managed\nthrough the singleton `PutDataCatalogEncryptionSettings` API. Configure it in\nexactly one stack. Configuring it from multiple stacks in the same account and\nregion makes those stacks overwrite one another at deploy time, and the result is\norder-dependent. Unlike duplicate settings within a single stack (which\nCloudFormation rejects), this cross-stack conflict is not caught at synthesis\ntime, because each stack synthesizes to its own template.\n\n### Creating a catalog\n\nTo create a new catalog resource, use the `Catalog` constructor. Encryption is\nconfigured through the `encryptionAtRest` and `connectionPasswordEncryption` props:\n\n```ts\nnew glue.Catalog(this, 'MyCatalog', {\n catalogName: 'my-catalog',\n description: 'my catalog description',\n});\n```\n\n### Encryption at rest\n\nConfigure Data Catalog encryption at rest through the `encryptionAtRest` option\n(on `Catalog.encryptAccount` or the `Catalog` constructor).\nIt accepts a `DataCatalogEncryptionAtRest` describing the mode:\n\n```ts\ndeclare const key: kms.Key;\n\n// SSE-KMS with a customer-managed key\nglue.Catalog.encryptAccount(this, {\n encryptionAtRest: glue.DataCatalogEncryptionAtRest.kms(key),\n});\n\n// SSE-KMS with an AWS-managed key (omit the key)\nnew glue.Catalog(this, 'ManagedKeyCatalog', {\n catalogName: 'managed-key-catalog',\n encryptionAtRest: glue.DataCatalogEncryptionAtRest.kms(),\n});\n\n// Disable encryption at rest\nnew glue.Catalog(this, 'PlaintextCatalog', {\n catalogName: 'plaintext-catalog',\n encryptionAtRest: glue.DataCatalogEncryptionAtRest.disabled(),\n});\n```\n\nWhen you use `SSE-KMS-WITH-SERVICE-ROLE`, AWS Glue accesses the KMS key through a\nservice role you provide. If you pass a customer-managed key, the role is\nautomatically granted the permissions it needs to encrypt and decrypt catalog data:\n\n```ts\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const key: kms.Key;\ndeclare const role: iam.IRole;\nglue.Catalog.encryptAccount(this, {\n encryptionAtRest: glue.DataCatalogEncryptionAtRest.kmsWithServiceRole(role, key),\n});\n```\n\nThe customer-managed key, when configured, is exposed on the catalog as\n`encryptionKey` (and the connection-password key as `connectionPasswordKey`), so\nyou can reference it to grant additional access. It is undefined when encryption is\ndisabled or an AWS-managed key is used.\n\n### Connection password encryption\n\nIndependently from encryption at rest, the Data Catalog can encrypt the passwords\nstored in connection properties. Configure it through the\n`connectionPasswordEncryption` option:\n\n```ts\ndeclare const key: kms.Key;\nglue.Catalog.encryptAccount(this, {\n connectionPasswordEncryption: {\n kmsKey: key,\n // Whether GetConnection/GetConnections return the password encrypted (default: true)\n returnConnectionPasswordEncrypted: true,\n },\n});\n```\n\nThe two encryption blocks are independent: enabling one does not require the other,\nand each may use a different KMS key. The customer-managed key for connection\npasswords is exposed as `connectionPasswordKey`.\n\n### Importing a catalog\n\nYou can import an existing catalog by ARN or by id. An imported catalog is a pure\nidentity handle — it emits no resources and does not manage the catalog's\nencryption:\n\n```ts\nconst byId = glue.Catalog.fromCatalogId(this, 'ById', 'my-catalog-id');\nconst byArn = glue.Catalog.fromCatalogArn(this, 'ByArn', 'arn:aws:glue:us-east-1:123456789012:catalog/my-catalog-id');\n```\n\nTo manage the Data Catalog encryption of a catalog you did not create in this\nstack, add a `CfnDataCatalogEncryptionSettings` resource targeting its id\ndirectly. Do this from exactly one stack: like the account catalog, a catalog has\na single encryption configuration, so two settings resources targeting the same id\nrace to overwrite one another at deploy time. Within a single stack this is caught\nby CloudFormation template validation (E3019, duplicate primary identifiers);\nacross stacks it is not, since each stack synthesizes to its own template.\n\n```ts\nimport { CfnDataCatalogEncryptionSettings } from 'aws-cdk-lib/aws-glue';\n\nnew CfnDataCatalogEncryptionSettings(this, 'Encryption', {\n catalogId: 'my-catalog-id',\n dataCatalogEncryptionSettings: {\n encryptionAtRest: { catalogEncryptionMode: 'SSE-KMS' },\n },\n});\n```\n\n## Database\n\nA `Database` is a logical grouping of `Tables` in the Glue Catalog.\n\n```ts\nnew glue.Database(this, 'MyDatabase', {\n databaseName: 'my_database',\n description: 'my_database_description',\n});\n```\n\nBecause a database is a container for tables and their metadata, it is retained\nby default when removed from the stack, to avoid accidental data loss. Set\n`removalPolicy` to `RemovalPolicy.DESTROY` to have it deleted instead:\n\n```ts\nimport { RemovalPolicy } from 'aws-cdk-lib';\n\nnew glue.Database(this, 'MyDatabase', {\n databaseName: 'my_database',\n removalPolicy: RemovalPolicy.DESTROY,\n});\n```\n\n## Table\n\nA Glue table describes a table of data in S3: its structure (column names and types), location of data (S3 objects with a common prefix in a S3 bucket), and format for the files (Json, Avro, Parquet, etc.):\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }, {\n name: 'col2',\n type: glue.Schema.array(glue.Schema.STRING),\n comment: 'col2 is an array of strings' // comment is optional\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nBy default, a S3 bucket will be created to store the table's data but you can bring your own with `S3TableStorage.fromBucket` and set an `s3Prefix`:\n\n```ts\ndeclare const myBucket: s3.Bucket;\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n storage: glue.S3TableStorage.fromBucket(myBucket),\n s3Prefix: 'my-table/',\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nGlue tables can be configured to contain user-defined properties, to describe the physical storage of table data, through the `storageParameters` property:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n storageParameters: [\n glue.StorageParameter.skipHeaderLineCount(1),\n glue.StorageParameter.compressionType(glue.CompressionType.GZIP),\n glue.StorageParameter.custom('separatorChar', ',')\n ],\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nGlue tables can also be configured to contain user-defined table properties through the [`parameters`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html#cfn-glue-table-tableinput-parameters) property:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n parameters: {\n key1: 'val1',\n key2: 'val2',\n },\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\n### Partition Keys\n\nTo improve query performance, a table can specify `partitionKeys` on which data is stored and queried separately. For example, you might partition a table by `year` and `month` to optimize queries based on a time window:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'year',\n type: glue.Schema.SMALL_INT,\n }, {\n name: 'month',\n type: glue.Schema.SMALL_INT,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\n### Partition Indexes\n\nAnother way to improve query performance is to specify partition indexes. If no partition indexes are\npresent on the table, AWS Glue loads all partitions of the table and filters the loaded partitions using\nthe query expression. The query takes more time to run as the number of partitions increase. With an\nindex, the query will try to fetch a subset of the partitions instead of loading all partitions of the\ntable.\n\nThe keys of a partition index must be a subset of the partition keys of the table. You can have a\nmaximum of 3 partition indexes per table. To specify a partition index, you can use the `partitionIndexes`\nproperty:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'year',\n type: glue.Schema.SMALL_INT,\n }, {\n name: 'month',\n type: glue.Schema.SMALL_INT,\n }],\n partitionIndexes: [{\n indexName: 'my-index', // optional\n keyNames: ['year'],\n }], // supply up to 3 indexes\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nAlternatively, you can call the `addPartitionIndex()` function on a table:\n\n```ts\ndeclare const myTable: glue.S3Table;\nmyTable.addPartitionIndex({\n indexName: 'my-index',\n keyNames: ['year'],\n});\n```\n\n### Partition Filtering\n\nIf you have a table with a large number of partitions that grows over time, consider using AWS Glue partition indexing and filtering.\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'year',\n type: glue.Schema.SMALL_INT,\n }, {\n name: 'month',\n type: glue.Schema.SMALL_INT,\n }],\n dataFormat: glue.DataFormat.JSON,\n enablePartitionFiltering: true,\n});\n```\n\n### Partition Projection\n\nPartition projection allows Athena to automatically add new partitions as new data arrives, without requiring `ALTER TABLE ADD PARTITION` statements. This improves query performance and reduces management overhead by eliminating the need to manually manage partition metadata.\n\nFor more information, see the [AWS documentation on partition projection](https://docs.aws.amazon.com/athena/latest/ug/partition-projection.html).\n\n#### INTEGER Projection\n\nFor partition keys with sequential numeric values:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'data',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'year',\n type: glue.Schema.INTEGER,\n }],\n dataFormat: glue.DataFormat.JSON,\n partitionProjection: {\n year: glue.PartitionProjectionConfiguration.integer({\n min: 2020,\n max: 2023,\n interval: 1, // optional, defaults to 1\n digits: 4, // optional, pads with leading zeros\n }),\n },\n});\n```\n\n#### DATE Projection\n\nFor partition keys with date or timestamp values. Supports both fixed dates and relative dates using `NOW`:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'data',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'date',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n partitionProjection: {\n date: glue.PartitionProjectionConfiguration.date({\n min: '2020-01-01',\n max: '2023-12-31',\n format: 'yyyy-MM-dd',\n interval: 1, // optional, defaults to 1\n intervalUnit: glue.DateIntervalUnit.DAYS, // optional: YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS\n }),\n },\n});\n```\n\nYou can also use relative dates with `NOW`:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'data',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'date',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n partitionProjection: {\n date: glue.PartitionProjectionConfiguration.date({\n min: 'NOW-3YEARS',\n max: 'NOW',\n format: 'yyyy-MM-dd',\n }),\n },\n});\n```\n\n#### ENUM Projection\n\nFor partition keys with a known set of values:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'data',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'region',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n partitionProjection: {\n region: glue.PartitionProjectionConfiguration.enum({\n values: ['us-east-1', 'us-west-2', 'eu-west-1'],\n }),\n },\n});\n```\n\n#### INJECTED Projection\n\nFor custom partition values injected at query time:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'data',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [{\n name: 'custom',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n partitionProjection: {\n custom: glue.PartitionProjectionConfiguration.injected(),\n },\n});\n```\n\n#### Multiple Partition Projections\n\nYou can configure partition projection for multiple partition keys:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n database: myDatabase,\n columns: [{\n name: 'data',\n type: glue.Schema.STRING,\n }],\n partitionKeys: [\n {\n name: 'year',\n type: glue.Schema.INTEGER,\n },\n {\n name: 'month',\n type: glue.Schema.INTEGER,\n },\n {\n name: 'region',\n type: glue.Schema.STRING,\n },\n ],\n dataFormat: glue.DataFormat.JSON,\n partitionProjection: {\n year: glue.PartitionProjectionConfiguration.integer({\n min: 2020,\n max: 2023,\n }),\n month: glue.PartitionProjectionConfiguration.integer({\n min: 1,\n max: 12,\n digits: 2,\n }),\n region: glue.PartitionProjectionConfiguration.enum({\n values: ['us-east-1', 'us-west-2'],\n }),\n },\n});\n```\n\n### Glue Connections\n\nGlue connections allow external data connections to third party databases and data warehouses. However, these connections can also be assigned to Glue Tables, allowing you to query external data sources using the Glue Data Catalog.\n\nWhereas `S3Table` will point to (and if needed, create) a bucket to store the tables' data, `ExternalTable` will point to an existing table in a data source. For example, to create a table in Glue that points to a table in Redshift:\n\n```ts\ndeclare const myConnection: glue.Connection;\ndeclare const myDatabase: glue.Database;\nnew glue.ExternalTable(this, 'MyTable', {\n connection: myConnection,\n externalDataLocation: 'default_db_public_example', // A table in Redshift\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\n## Data Quality Ruleset\n\nA `DataQualityRuleset` defines a set of data quality rules — authored in Glue's\nData Quality Definition Language (DQDL) — that are evaluated against a table in\nthe Data Catalog.\n\n```ts\ndeclare const database: glue.IDatabase;\nnew glue.DataQualityRuleset(this, 'MyRuleset', {\n rulesetName: 'my_ruleset',\n dqdl: glue.Dqdl.fromString('Rules = [ RowCount > 100, IsComplete \"order_id\" ]'),\n targetTable: glue.DataQualityTargetTable.fromTableName(database, 'my_table'),\n});\n```\n\nBuild the DQDL document with `Dqdl.fromString(...)`. Glue parses and validates the\nDQDL when the ruleset is deployed; see the\n[DQDL reference](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html) for the\nfull rule syntax.\n\n## [Encryption](https://docs.aws.amazon.com/athena/latest/ug/encryption.html)\n\nWhen the table creates its own S3 bucket (`S3TableStorage.managedBucket`, the default), that bucket enforces SSL: a bucket policy denies any request made over plain HTTP. If you bring your own bucket with `S3TableStorage.fromBucket`, enabling `enforceSSL` on it is your responsibility.\n\nServer-side encryption applies only to a bucket the table manages. Choose it with\n`storage: glue.S3TableStorage.managedBucket(...)`:\n\n* [S3Managed](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html) - (default) Server side encryption (`SSE-S3`) with an Amazon S3-managed key.\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n storage: glue.S3TableStorage.managedBucket(glue.S3TableEncryption.s3Managed()),\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\n* [Kms](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html) - Server-side encryption (`SSE-KMS`) with an AWS KMS Key managed by the account owner.\n\n```ts\ndeclare const myDatabase: glue.Database;\n// KMS key is created automatically\nnew glue.S3Table(this, 'MyTable', {\n storage: glue.S3TableStorage.managedBucket(glue.S3TableEncryption.kms()),\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n\n// with an explicit KMS key\nnew glue.S3Table(this, 'MyTable', {\n storage: glue.S3TableStorage.managedBucket(glue.S3TableEncryption.kms(new kms.Key(this, 'MyKey'))),\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\n* [KmsManaged](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html) - Server-side encryption (`SSE-KMS`), like `Kms`, except with an AWS KMS Key managed by the AWS Key Management Service.\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n storage: glue.S3TableStorage.managedBucket(glue.S3TableEncryption.kmsManaged()),\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nClient-side encryption ([CSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html#client-side-encryption-kms-managed-master-key-intro)) is independent of the bucket's server-side encryption and works with either a managed or an existing bucket. Configure it with `clientSideEncryption`:\n\n```ts\ndeclare const myDatabase: glue.Database;\n// KMS key is created automatically\nnew glue.S3Table(this, 'MyTable', {\n clientSideEncryption: glue.TableClientSideEncryption.kms(),\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n\n// with an explicit KMS key\nnew glue.S3Table(this, 'MyTable', {\n clientSideEncryption: glue.TableClientSideEncryption.kms(new kms.Key(this, 'MyKey')),\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nTo store the table's data in an existing bucket, use `glue.S3TableStorage.fromBucket(bucket)`. CDK does not manage that bucket's server-side encryption, so an encryption choice can never be paired with a provided bucket — but client-side encryption still applies.\n\n### Marking table data as encrypted\n\nBoth `S3Table` and `ExternalTable` set the `has_encrypted_data` table parameter, which\nAthena reads when querying client-side (`CSE-KMS`) encrypted datasets. It defaults to `true`.\nSet `hasEncryptedData` to `false` when the underlying data is not encrypted:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n hasEncryptedData: false,\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nDo not set `has_encrypted_data` through the free-form `parameters` map as well - a value\nthere that conflicts with `hasEncryptedData` is rejected at synthesis time.\n\n## Types\n\nA table's schema is a collection of columns, each of which have a `name` and a `type`. Types are recursive structures, consisting of primitive and complex types:\n\n```ts\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n columns: [{\n name: 'primitive_column',\n type: glue.Schema.STRING,\n }, {\n name: 'array_column',\n type: glue.Schema.array(glue.Schema.INTEGER),\n comment: 'array<integer>',\n }, {\n name: 'map_column',\n type: glue.Schema.map(\n glue.Schema.STRING,\n glue.Schema.TIMESTAMP),\n comment: 'map<string,timestamp>',\n }, {\n name: 'struct_column',\n type: glue.Schema.struct([{\n name: 'nested_column',\n type: glue.Schema.DATE,\n comment: 'nested comment',\n }]),\n comment: \"struct<nested_column:date COMMENT 'nested comment'>\",\n }],\n // ...\n database: myDatabase,\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\nFor a type the `Schema` factories don't model, use `glue.Schema.custom('...')`, which takes the raw Glue input string.\n\n## Public FAQ\n\n### What are we launching today?\n\nWe’re launching new features to an AWS CDK Glue L2 Construct to provide\nbest-practice defaults and convenience methods to create Glue Jobs, Connections,\nTriggers, Workflows, and the underlying permissions and configuration.\n\n### Why should I use this Construct?\n\nDevelopers should use this Construct to reduce the amount of boilerplate\ncode and complexity each individual has to navigate, and make it easier to\ncreate best-practice Glue resources.\n\n### What’s not in scope?\n\nGlue Crawlers and other resources that are now managed by the AWS LakeFormation\nteam are not in scope for this effort. Developers should use existing methods\nto create these resources, and the new Glue L2 construct assumes they already\nexist as inputs. While best practice is for application and infrastructure code\nto be as close as possible for teams using fully-implemented DevOps mechanisms,\nin practice these ETL scripts are likely managed by a data science team who\nknow Python or Scala and don’t necessarily own or manage their own\ninfrastructure deployments. We want to meet developers where they are, and not\nassume that all of the code resides in the same repository, Developers can\nautomate this themselves via the CDK, however, if they do own both.\n\nValidating Glue version and feature use per AWS region at synth time is also\nnot in scope. AWS’ intention is for all features to eventually be propagated to\nall Global regions, so the complexity involved in creating and updating region-\nspecific configuration to match shifting feature sets does not out-weigh the\nlikelihood that a developer will use this construct to deploy resources to a\nregion without a particular new feature to a region that doesn’t yet support\nit without researching or manually attempting to use that feature before\ndeveloping it via IaC. The developer will, of course, still get feedback from\nthe underlying Glue APIs as CloudFormation deploys the resources similar to the\ncurrent CDK L1 Glue experience.\n"
9413
9587
  },
9414
9588
  "repository": {
9415
9589
  "directory": "packages/@aws-cdk/aws-glue-alpha",
@@ -12520,7 +12694,7 @@
12520
12694
  "name": "key",
12521
12695
  "optional": true,
12522
12696
  "type": {
12523
- "fqn": "aws-cdk-lib.aws_kms.IKey"
12697
+ "fqn": "aws-cdk-lib.interfaces.aws_kms.IKeyRef"
12524
12698
  }
12525
12699
  }
12526
12700
  ],
@@ -12560,7 +12734,7 @@
12560
12734
  "name": "key",
12561
12735
  "optional": true,
12562
12736
  "type": {
12563
- "fqn": "aws-cdk-lib.aws_kms.IKey"
12737
+ "fqn": "aws-cdk-lib.interfaces.aws_kms.IKeyRef"
12564
12738
  }
12565
12739
  }
12566
12740
  ],
@@ -12981,7 +13155,7 @@
12981
13155
  "docs": {
12982
13156
  "stability": "experimental",
12983
13157
  "summary": "A Glue Data Quality ruleset.",
12984
- "example": "new glue.DataQualityRuleset(this, 'MyRuleset', {\n rulesetName: 'my_ruleset',\n dqdl: glue.Dqdl.fromString('Rules = [ RowCount > 100, IsComplete \"order_id\" ]'),\n targetTable: new glue.DataQualityTargetTable('my_database', 'my_table'),\n});",
13158
+ "example": "declare const database: glue.IDatabase;\nnew glue.DataQualityRuleset(this, 'MyRuleset', {\n rulesetName: 'my_ruleset',\n dqdl: glue.Dqdl.fromString('Rules = [ RowCount > 100, IsComplete \"order_id\" ]'),\n targetTable: glue.DataQualityTargetTable.fromTableName(database, 'my_table'),\n});",
12985
13159
  "custom": {
12986
13160
  "exampleMetadata": "infused"
12987
13161
  }
@@ -12993,7 +13167,7 @@
12993
13167
  },
12994
13168
  "locationInModule": {
12995
13169
  "filename": "lib/data-quality-ruleset.ts",
12996
- "line": 159
13170
+ "line": 174
12997
13171
  },
12998
13172
  "parameters": [
12999
13173
  {
@@ -13022,7 +13196,7 @@
13022
13196
  "kind": "class",
13023
13197
  "locationInModule": {
13024
13198
  "filename": "lib/data-quality-ruleset.ts",
13025
- "line": 126
13199
+ "line": 141
13026
13200
  },
13027
13201
  "methods": [
13028
13202
  {
@@ -13031,7 +13205,7 @@
13031
13205
  },
13032
13206
  "locationInModule": {
13033
13207
  "filename": "lib/data-quality-ruleset.ts",
13034
- "line": 131
13208
+ "line": 146
13035
13209
  },
13036
13210
  "name": "fromRulesetArn",
13037
13211
  "parameters": [
@@ -13067,7 +13241,7 @@
13067
13241
  },
13068
13242
  "locationInModule": {
13069
13243
  "filename": "lib/data-quality-ruleset.ts",
13070
- "line": 140
13244
+ "line": 155
13071
13245
  },
13072
13246
  "name": "fromRulesetName",
13073
13247
  "parameters": [
@@ -13109,7 +13283,7 @@
13109
13283
  "immutable": true,
13110
13284
  "locationInModule": {
13111
13285
  "filename": "lib/data-quality-ruleset.ts",
13112
- "line": 129
13286
+ "line": 144
13113
13287
  },
13114
13288
  "name": "PROPERTY_INJECTION_ID",
13115
13289
  "static": true,
@@ -13125,7 +13299,7 @@
13125
13299
  "immutable": true,
13126
13300
  "locationInModule": {
13127
13301
  "filename": "lib/data-quality-ruleset.ts",
13128
- "line": 189
13302
+ "line": 203
13129
13303
  },
13130
13304
  "name": "rulesetArn",
13131
13305
  "overrides": "@aws-cdk/aws-glue-alpha.IDataQualityRuleset",
@@ -13141,7 +13315,7 @@
13141
13315
  "immutable": true,
13142
13316
  "locationInModule": {
13143
13317
  "filename": "lib/data-quality-ruleset.ts",
13144
- "line": 181
13318
+ "line": 195
13145
13319
  },
13146
13320
  "name": "rulesetName",
13147
13321
  "overrides": "@aws-cdk/aws-glue-alpha.IDataQualityRuleset",
@@ -13158,7 +13332,7 @@
13158
13332
  "docs": {
13159
13333
  "stability": "experimental",
13160
13334
  "summary": "Construction properties for `DataQualityRuleset`.",
13161
- "example": "new glue.DataQualityRuleset(this, 'MyRuleset', {\n rulesetName: 'my_ruleset',\n dqdl: glue.Dqdl.fromString('Rules = [ RowCount > 100, IsComplete \"order_id\" ]'),\n targetTable: new glue.DataQualityTargetTable('my_database', 'my_table'),\n});",
13335
+ "example": "declare const database: glue.IDatabase;\nnew glue.DataQualityRuleset(this, 'MyRuleset', {\n rulesetName: 'my_ruleset',\n dqdl: glue.Dqdl.fromString('Rules = [ RowCount > 100, IsComplete \"order_id\" ]'),\n targetTable: glue.DataQualityTargetTable.fromTableName(database, 'my_table'),\n});",
13162
13336
  "custom": {
13163
13337
  "exampleMetadata": "infused"
13164
13338
  }
@@ -13167,7 +13341,7 @@
13167
13341
  "kind": "interface",
13168
13342
  "locationInModule": {
13169
13343
  "filename": "lib/data-quality-ruleset.ts",
13170
- "line": 77
13344
+ "line": 99
13171
13345
  },
13172
13346
  "name": "DataQualityRulesetProps",
13173
13347
  "properties": [
@@ -13181,7 +13355,7 @@
13181
13355
  "immutable": true,
13182
13356
  "locationInModule": {
13183
13357
  "filename": "lib/data-quality-ruleset.ts",
13184
- "line": 101
13358
+ "line": 116
13185
13359
  },
13186
13360
  "name": "dqdl",
13187
13361
  "type": {
@@ -13191,20 +13365,17 @@
13191
13365
  {
13192
13366
  "abstract": true,
13193
13367
  "docs": {
13194
- "custom": {
13195
- "attribute": "true"
13196
- },
13197
13368
  "stability": "experimental",
13198
- "summary": "The target table of the ruleset."
13369
+ "summary": "The name of the ruleset."
13199
13370
  },
13200
13371
  "immutable": true,
13201
13372
  "locationInModule": {
13202
13373
  "filename": "lib/data-quality-ruleset.ts",
13203
- "line": 113
13374
+ "line": 103
13204
13375
  },
13205
- "name": "targetTable",
13376
+ "name": "rulesetName",
13206
13377
  "type": {
13207
- "fqn": "@aws-cdk/aws-glue-alpha.DataQualityTargetTable"
13378
+ "primitive": "string"
13208
13379
  }
13209
13380
  },
13210
13381
  {
@@ -13214,17 +13385,16 @@
13214
13385
  "attribute": "true"
13215
13386
  },
13216
13387
  "stability": "experimental",
13217
- "summary": "The client token of the ruleset."
13388
+ "summary": "The target table of the ruleset."
13218
13389
  },
13219
13390
  "immutable": true,
13220
13391
  "locationInModule": {
13221
13392
  "filename": "lib/data-quality-ruleset.ts",
13222
- "line": 88
13393
+ "line": 128
13223
13394
  },
13224
- "name": "clientToken",
13225
- "optional": true,
13395
+ "name": "targetTable",
13226
13396
  "type": {
13227
- "primitive": "string"
13397
+ "fqn": "@aws-cdk/aws-glue-alpha.DataQualityTargetTable"
13228
13398
  }
13229
13399
  },
13230
13400
  {
@@ -13239,7 +13409,7 @@
13239
13409
  "immutable": true,
13240
13410
  "locationInModule": {
13241
13411
  "filename": "lib/data-quality-ruleset.ts",
13242
- "line": 94
13412
+ "line": 109
13243
13413
  },
13244
13414
  "name": "description",
13245
13415
  "optional": true,
@@ -13257,7 +13427,7 @@
13257
13427
  "immutable": true,
13258
13428
  "locationInModule": {
13259
13429
  "filename": "lib/data-quality-ruleset.ts",
13260
- "line": 120
13430
+ "line": 135
13261
13431
  },
13262
13432
  "name": "removalPolicy",
13263
13433
  "optional": true,
@@ -13265,24 +13435,6 @@
13265
13435
  "fqn": "aws-cdk-lib.RemovalPolicy"
13266
13436
  }
13267
13437
  },
13268
- {
13269
- "abstract": true,
13270
- "docs": {
13271
- "default": "cloudformation generated name",
13272
- "stability": "experimental",
13273
- "summary": "The name of the ruleset."
13274
- },
13275
- "immutable": true,
13276
- "locationInModule": {
13277
- "filename": "lib/data-quality-ruleset.ts",
13278
- "line": 82
13279
- },
13280
- "name": "rulesetName",
13281
- "optional": true,
13282
- "type": {
13283
- "primitive": "string"
13284
- }
13285
- },
13286
13438
  {
13287
13439
  "abstract": true,
13288
13440
  "docs": {
@@ -13293,7 +13445,7 @@
13293
13445
  "immutable": true,
13294
13446
  "locationInModule": {
13295
13447
  "filename": "lib/data-quality-ruleset.ts",
13296
- "line": 107
13448
+ "line": 122
13297
13449
  },
13298
13450
  "name": "tags",
13299
13451
  "optional": true,
@@ -13313,41 +13465,95 @@
13313
13465
  "assembly": "@aws-cdk/aws-glue-alpha",
13314
13466
  "docs": {
13315
13467
  "stability": "experimental",
13316
- "summary": "Properties of a DataQualityTargetTable.",
13317
- "example": "new glue.DataQualityRuleset(this, 'MyRuleset', {\n rulesetName: 'my_ruleset',\n dqdl: glue.Dqdl.fromString('Rules = [ RowCount > 100, IsComplete \"order_id\" ]'),\n targetTable: new glue.DataQualityTargetTable('my_database', 'my_table'),\n});",
13468
+ "summary": "The Glue table a `DataQualityRuleset` evaluates.",
13469
+ "example": "declare const database: glue.IDatabase;\nnew glue.DataQualityRuleset(this, 'MyRuleset', {\n rulesetName: 'my_ruleset',\n dqdl: glue.Dqdl.fromString('Rules = [ RowCount > 100, IsComplete \"order_id\" ]'),\n targetTable: glue.DataQualityTargetTable.fromTableName(database, 'my_table'),\n});",
13318
13470
  "custom": {
13319
13471
  "exampleMetadata": "infused"
13320
13472
  }
13321
13473
  },
13322
13474
  "fqn": "@aws-cdk/aws-glue-alpha.DataQualityTargetTable",
13323
- "initializer": {
13324
- "docs": {
13325
- "stability": "experimental"
13326
- },
13327
- "locationInModule": {
13328
- "filename": "lib/data-quality-ruleset.ts",
13329
- "line": 24
13330
- },
13331
- "parameters": [
13332
- {
13333
- "name": "databaseName",
13475
+ "kind": "class",
13476
+ "locationInModule": {
13477
+ "filename": "lib/data-quality-ruleset.ts",
13478
+ "line": 14
13479
+ },
13480
+ "methods": [
13481
+ {
13482
+ "docs": {
13483
+ "stability": "experimental",
13484
+ "summary": "Target an L2 table in a database."
13485
+ },
13486
+ "locationInModule": {
13487
+ "filename": "lib/data-quality-ruleset.ts",
13488
+ "line": 21
13489
+ },
13490
+ "name": "fromTable",
13491
+ "parameters": [
13492
+ {
13493
+ "docs": {
13494
+ "summary": "the database that holds the table."
13495
+ },
13496
+ "name": "database",
13497
+ "type": {
13498
+ "fqn": "aws-cdk-lib.interfaces.aws_glue.IDatabaseRef"
13499
+ }
13500
+ },
13501
+ {
13502
+ "docs": {
13503
+ "summary": "the table to evaluate."
13504
+ },
13505
+ "name": "table",
13506
+ "type": {
13507
+ "fqn": "@aws-cdk/aws-glue-alpha.ITable"
13508
+ }
13509
+ }
13510
+ ],
13511
+ "returns": {
13334
13512
  "type": {
13335
- "primitive": "string"
13513
+ "fqn": "@aws-cdk/aws-glue-alpha.DataQualityTargetTable"
13336
13514
  }
13337
13515
  },
13338
- {
13339
- "name": "tableName",
13516
+ "static": true
13517
+ },
13518
+ {
13519
+ "docs": {
13520
+ "remarks": "Use this when the table is not\nmodeled as an L2 construct (e.g. it is imported or created elsewhere).",
13521
+ "stability": "experimental",
13522
+ "summary": "Target a table by name in a database."
13523
+ },
13524
+ "locationInModule": {
13525
+ "filename": "lib/data-quality-ruleset.ts",
13526
+ "line": 32
13527
+ },
13528
+ "name": "fromTableName",
13529
+ "parameters": [
13530
+ {
13531
+ "docs": {
13532
+ "summary": "the database that holds the table."
13533
+ },
13534
+ "name": "database",
13535
+ "type": {
13536
+ "fqn": "aws-cdk-lib.interfaces.aws_glue.IDatabaseRef"
13537
+ }
13538
+ },
13539
+ {
13540
+ "docs": {
13541
+ "summary": "the name of the table to evaluate."
13542
+ },
13543
+ "name": "tableName",
13544
+ "type": {
13545
+ "primitive": "string"
13546
+ }
13547
+ }
13548
+ ],
13549
+ "returns": {
13340
13550
  "type": {
13341
- "primitive": "string"
13551
+ "fqn": "@aws-cdk/aws-glue-alpha.DataQualityTargetTable"
13342
13552
  }
13343
- }
13344
- ]
13345
- },
13346
- "kind": "class",
13347
- "locationInModule": {
13348
- "filename": "lib/data-quality-ruleset.ts",
13349
- "line": 13
13350
- },
13553
+ },
13554
+ "static": true
13555
+ }
13556
+ ],
13351
13557
  "name": "DataQualityTargetTable",
13352
13558
  "properties": [
13353
13559
  {
@@ -13358,7 +13564,7 @@
13358
13564
  "immutable": true,
13359
13565
  "locationInModule": {
13360
13566
  "filename": "lib/data-quality-ruleset.ts",
13361
- "line": 17
13567
+ "line": 39
13362
13568
  },
13363
13569
  "name": "databaseName",
13364
13570
  "type": {
@@ -13373,7 +13579,7 @@
13373
13579
  "immutable": true,
13374
13580
  "locationInModule": {
13375
13581
  "filename": "lib/data-quality-ruleset.ts",
13376
- "line": 22
13582
+ "line": 44
13377
13583
  },
13378
13584
  "name": "tableName",
13379
13585
  "type": {
@@ -13401,7 +13607,7 @@
13401
13607
  },
13402
13608
  "locationInModule": {
13403
13609
  "filename": "lib/database.ts",
13404
- "line": 109
13610
+ "line": 113
13405
13611
  },
13406
13612
  "parameters": [
13407
13613
  {
@@ -13499,7 +13705,7 @@
13499
13705
  "immutable": true,
13500
13706
  "locationInModule": {
13501
13707
  "filename": "lib/database.ts",
13502
- "line": 159
13708
+ "line": 163
13503
13709
  },
13504
13710
  "name": "catalog",
13505
13711
  "overrides": "@aws-cdk/aws-glue-alpha.IDatabase",
@@ -13515,7 +13721,7 @@
13515
13721
  "immutable": true,
13516
13722
  "locationInModule": {
13517
13723
  "filename": "lib/database.ts",
13518
- "line": 169
13724
+ "line": 173
13519
13725
  },
13520
13726
  "name": "databaseArn",
13521
13727
  "overrides": "@aws-cdk/aws-glue-alpha.IDatabase",
@@ -13531,7 +13737,7 @@
13531
13737
  "immutable": true,
13532
13738
  "locationInModule": {
13533
13739
  "filename": "lib/database.ts",
13534
- "line": 164
13740
+ "line": 168
13535
13741
  },
13536
13742
  "name": "databaseName",
13537
13743
  "overrides": "@aws-cdk/aws-glue-alpha.IDatabase",
@@ -13539,6 +13745,22 @@
13539
13745
  "primitive": "string"
13540
13746
  }
13541
13747
  },
13748
+ {
13749
+ "docs": {
13750
+ "stability": "experimental",
13751
+ "summary": "A reference to a Database resource."
13752
+ },
13753
+ "immutable": true,
13754
+ "locationInModule": {
13755
+ "filename": "lib/database.ts",
13756
+ "line": 182
13757
+ },
13758
+ "name": "databaseRef",
13759
+ "overrides": "aws-cdk-lib.interfaces.aws_glue.IDatabaseRef",
13760
+ "type": {
13761
+ "fqn": "aws-cdk-lib.interfaces.aws_glue.DatabaseReference"
13762
+ }
13763
+ },
13542
13764
  {
13543
13765
  "docs": {
13544
13766
  "stability": "experimental",
@@ -13547,7 +13769,7 @@
13547
13769
  "immutable": true,
13548
13770
  "locationInModule": {
13549
13771
  "filename": "lib/database.ts",
13550
- "line": 103
13772
+ "line": 107
13551
13773
  },
13552
13774
  "name": "locationUri",
13553
13775
  "optional": true,
@@ -13862,7 +14084,7 @@
13862
14084
  "see": "https://docs.aws.amazon.com/glue/latest/dg/dqdl.html",
13863
14085
  "stability": "experimental",
13864
14086
  "summary": "The Data Quality Definition Language (DQDL) document for a `DataQualityRuleset`.",
13865
- "example": "new glue.DataQualityRuleset(this, 'MyRuleset', {\n rulesetName: 'my_ruleset',\n dqdl: glue.Dqdl.fromString('Rules = [ RowCount > 100, IsComplete \"order_id\" ]'),\n targetTable: new glue.DataQualityTargetTable('my_database', 'my_table'),\n});",
14087
+ "example": "declare const database: glue.IDatabase;\nnew glue.DataQualityRuleset(this, 'MyRuleset', {\n rulesetName: 'my_ruleset',\n dqdl: glue.Dqdl.fromString('Rules = [ RowCount > 100, IsComplete \"order_id\" ]'),\n targetTable: glue.DataQualityTargetTable.fromTableName(database, 'my_table'),\n});",
13866
14088
  "custom": {
13867
14089
  "exampleMetadata": "infused"
13868
14090
  }
@@ -13871,7 +14093,7 @@
13871
14093
  "kind": "class",
13872
14094
  "locationInModule": {
13873
14095
  "filename": "lib/data-quality-ruleset.ts",
13874
- "line": 38
14096
+ "line": 60
13875
14097
  },
13876
14098
  "methods": [
13877
14099
  {
@@ -13881,7 +14103,7 @@
13881
14103
  },
13882
14104
  "locationInModule": {
13883
14105
  "filename": "lib/data-quality-ruleset.ts",
13884
- "line": 44
14106
+ "line": 66
13885
14107
  },
13886
14108
  "name": "fromString",
13887
14109
  "parameters": [
@@ -14573,7 +14795,7 @@
14573
14795
  "kind": "interface",
14574
14796
  "locationInModule": {
14575
14797
  "filename": "lib/data-quality-ruleset.ts",
14576
- "line": 60
14798
+ "line": 82
14577
14799
  },
14578
14800
  "name": "IDataQualityRuleset",
14579
14801
  "properties": [
@@ -14589,7 +14811,7 @@
14589
14811
  "immutable": true,
14590
14812
  "locationInModule": {
14591
14813
  "filename": "lib/data-quality-ruleset.ts",
14592
- "line": 65
14814
+ "line": 87
14593
14815
  },
14594
14816
  "name": "rulesetArn",
14595
14817
  "type": {
@@ -14608,7 +14830,7 @@
14608
14830
  "immutable": true,
14609
14831
  "locationInModule": {
14610
14832
  "filename": "lib/data-quality-ruleset.ts",
14611
- "line": 71
14833
+ "line": 93
14612
14834
  },
14613
14835
  "name": "rulesetName",
14614
14836
  "type": {
@@ -14625,7 +14847,8 @@
14625
14847
  },
14626
14848
  "fqn": "@aws-cdk/aws-glue-alpha.IDatabase",
14627
14849
  "interfaces": [
14628
- "aws-cdk-lib.IResource"
14850
+ "aws-cdk-lib.IResource",
14851
+ "aws-cdk-lib.interfaces.aws_glue.IDatabaseRef"
14629
14852
  ],
14630
14853
  "kind": "interface",
14631
14854
  "locationInModule": {
@@ -16547,7 +16770,7 @@
16547
16770
  {
16548
16771
  "abstract": true,
16549
16772
  "docs": {
16550
- "default": "3.0 for ETL",
16773
+ "default": "- determined by the job type: 4.0 for ETL and Streaming, 5.0 for Flex, 3.0 for Python Shell",
16551
16774
  "stability": "experimental",
16552
16775
  "summary": "Glue Version The version of Glue to use to execute this job."
16553
16776
  },
@@ -17544,7 +17767,7 @@
17544
17767
  {
17545
17768
  "abstract": true,
17546
17769
  "docs": {
17547
- "default": "- ConditionLogical.AND if multiple conditions are provided, no logical operator if only one condition",
17770
+ "default": "- PredicateLogical.AND if multiple conditions are provided, no logical operator if only one condition",
17548
17771
  "stability": "experimental",
17549
17772
  "summary": "The logical operator to be applied to the conditions."
17550
17773
  },
@@ -17596,7 +17819,7 @@
17596
17819
  "assembly": "@aws-cdk/aws-glue-alpha",
17597
17820
  "base": "@aws-cdk/aws-glue-alpha.SparkJob",
17598
17821
  "docs": {
17599
- "remarks": "ETL jobs support pySpark and Scala languages, for which there are separate\nbut similar constructors. ETL jobs default to the G2 worker type, but you\ncan override this default with other supported worker type values\n(G1, G2, G4 and G8). ETL jobs defaults to Glue version 4.0, which you can\noverride to 3.0. The following ETL features are enabled by default:\n--enable-metrics, --enable-continuous-cloudwatch-log. The Spark UI\n(--enable-spark-ui) is off by default; enable it by setting the `sparkUI` prop.\nYou can find more details about version, worker type and other features\nin Glue's public documentation.",
17822
+ "remarks": "ETL jobs support pySpark and Scala languages, for which there are separate\nbut similar constructors. ETL jobs default to the G1 worker type, but you\ncan override this default with other supported worker type values\n(G1, G2, G4 and G8). ETL jobs defaults to Glue version 4.0, which you can\noverride to 3.0. The following ETL features are enabled by default:\n--enable-metrics, --enable-continuous-cloudwatch-log. The Spark UI\n(--enable-spark-ui) is off by default; enable it by setting the `sparkUI` prop.\nYou can find more details about version, worker type and other features\nin Glue's public documentation.",
17600
17823
  "stability": "experimental",
17601
17824
  "summary": "PySpark ETL Jobs class.",
17602
17825
  "example": "import * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\n\n// Create a job to run from the workflow\nconst job = new glue.PySparkEtlJob(stack, 'Job', { role, script });\n\n// Create a workflow and add a trigger that runs the job\nconst workflow = new glue.Workflow(stack, 'Workflow');\nworkflow.addOnDemandTrigger('OnDemandTrigger', {\n actions: [{ job }],\n});",
@@ -17850,7 +18073,7 @@
17850
18073
  "assembly": "@aws-cdk/aws-glue-alpha",
17851
18074
  "base": "@aws-cdk/aws-glue-alpha.SparkJob",
17852
18075
  "docs": {
17853
- "remarks": "Flex jobs supports Python and Scala language.\nThe flexible execution class is appropriate for non-urgent jobs such as\npre-production jobs, testing, and one-time data loads.\nFlexible job runs are supported for jobs using AWS Glue version 3.0 or later and G.1X or\nG.2X worker types but will default to the latest version of Glue (currently Glue 3.0.)\n\nSimilar to ETL, we’ll enable these features: --enable-metrics,\n--enable-continuous-cloudwatch-log. The Spark UI (--enable-spark-ui) is off by\ndefault; enable it by setting the `sparkUI` prop.",
18076
+ "remarks": "Flex jobs supports Python and Scala language.\nThe flexible execution class is appropriate for non-urgent jobs such as\npre-production jobs, testing, and one-time data loads.\nFlexible job runs are supported for jobs using AWS Glue version 3.0 or later and G.1X or\nG.2X worker types but will default to the latest version of Glue (currently Glue 5.0.)\n\nSimilar to ETL, we’ll enable these features: --enable-metrics,\n--enable-continuous-cloudwatch-log. The Spark UI (--enable-spark-ui) is off by\ndefault; enable it by setting the `sparkUI` prop.",
17854
18077
  "stability": "experimental",
17855
18078
  "summary": "Flex Jobs class.",
17856
18079
  "example": "import * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkFlexEtlJob(stack, 'ImportedJob', { role, script });",
@@ -18085,7 +18308,7 @@
18085
18308
  "assembly": "@aws-cdk/aws-glue-alpha",
18086
18309
  "base": "@aws-cdk/aws-glue-alpha.SparkJob",
18087
18310
  "docs": {
18088
- "remarks": "A Streaming job is similar to an ETL job, except that it performs ETL on data streams\nusing the Apache Spark Structured Streaming framework.\nThese jobs will default to use Python 3.9.\n\nSimilar to ETL jobs, streaming job supports Scala and Python languages. Similar to ETL,\nit supports G1 and G2 worker type and 2.0, 3.0 and 4.0 version. We’ll default to G2 worker\nand 4.0 version for streaming jobs which developers can override.\nWe will enable --enable-metrics, --enable-continuous-cloudwatch-log. The Spark UI\n(--enable-spark-ui) is off by default; enable it by setting the `sparkUI` prop.",
18311
+ "remarks": "A Streaming job is similar to an ETL job, except that it performs ETL on data streams\nusing the Apache Spark Structured Streaming framework.\nThese jobs will default to use Python 3.9.\n\nSimilar to ETL jobs, streaming job supports Scala and Python languages. Similar to ETL,\nit supports G1 and G2 worker type and 2.0, 3.0 and 4.0 version. We’ll default to G1 worker\nand 4.0 version for streaming jobs which developers can override.\nWe will enable --enable-metrics, --enable-continuous-cloudwatch-log. The Spark UI\n(--enable-spark-ui) is off by default; enable it by setting the `sparkUI` prop.",
18089
18312
  "stability": "experimental",
18090
18313
  "summary": "Python Spark Streaming Jobs class.",
18091
18314
  "example": "import * as cdk from 'aws-cdk-lib';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const stack: cdk.Stack;\ndeclare const role: iam.IRole;\ndeclare const script: glue.Code;\nnew glue.PySparkStreamingJob(stack, 'ImportedJob', { role, script });",
@@ -19077,7 +19300,7 @@
19077
19300
  },
19078
19301
  "locationInModule": {
19079
19302
  "filename": "lib/s3-table.ts",
19080
- "line": 204
19303
+ "line": 207
19081
19304
  },
19082
19305
  "parameters": [
19083
19306
  {
@@ -19103,7 +19326,7 @@
19103
19326
  "kind": "class",
19104
19327
  "locationInModule": {
19105
19328
  "filename": "lib/s3-table.ts",
19106
- "line": 165
19329
+ "line": 168
19107
19330
  },
19108
19331
  "methods": [
19109
19332
  {
@@ -19112,7 +19335,7 @@
19112
19335
  },
19113
19336
  "locationInModule": {
19114
19337
  "filename": "lib/s3-table.ts",
19115
- "line": 333
19338
+ "line": 336
19116
19339
  },
19117
19340
  "name": "generateS3PrefixForGrant",
19118
19341
  "protected": true,
@@ -19130,7 +19353,7 @@
19130
19353
  },
19131
19354
  "locationInModule": {
19132
19355
  "filename": "lib/s3-table.ts",
19133
- "line": 297
19356
+ "line": 300
19134
19357
  },
19135
19358
  "name": "grantRead",
19136
19359
  "overrides": "@aws-cdk/aws-glue-alpha.TableBase",
@@ -19159,7 +19382,7 @@
19159
19382
  },
19160
19383
  "locationInModule": {
19161
19384
  "filename": "lib/s3-table.ts",
19162
- "line": 325
19385
+ "line": 328
19163
19386
  },
19164
19387
  "name": "grantReadWrite",
19165
19388
  "overrides": "@aws-cdk/aws-glue-alpha.TableBase",
@@ -19188,7 +19411,7 @@
19188
19411
  },
19189
19412
  "locationInModule": {
19190
19413
  "filename": "lib/s3-table.ts",
19191
- "line": 311
19414
+ "line": 314
19192
19415
  },
19193
19416
  "name": "grantWrite",
19194
19417
  "overrides": "@aws-cdk/aws-glue-alpha.TableBase",
@@ -19221,7 +19444,7 @@
19221
19444
  "immutable": true,
19222
19445
  "locationInModule": {
19223
19446
  "filename": "lib/s3-table.ts",
19224
- "line": 168
19447
+ "line": 171
19225
19448
  },
19226
19449
  "name": "PROPERTY_INJECTION_ID",
19227
19450
  "static": true,
@@ -19237,7 +19460,7 @@
19237
19460
  "immutable": true,
19238
19461
  "locationInModule": {
19239
19462
  "filename": "lib/s3-table.ts",
19240
- "line": 175
19463
+ "line": 178
19241
19464
  },
19242
19465
  "name": "bucket",
19243
19466
  "type": {
@@ -19252,7 +19475,7 @@
19252
19475
  "immutable": true,
19253
19476
  "locationInModule": {
19254
19477
  "filename": "lib/s3-table.ts",
19255
- "line": 180
19478
+ "line": 183
19256
19479
  },
19257
19480
  "name": "s3Prefix",
19258
19481
  "type": {
@@ -19267,7 +19490,7 @@
19267
19490
  "immutable": true,
19268
19491
  "locationInModule": {
19269
19492
  "filename": "lib/s3-table.ts",
19270
- "line": 282
19493
+ "line": 285
19271
19494
  },
19272
19495
  "name": "tableArn",
19273
19496
  "overrides": "@aws-cdk/aws-glue-alpha.TableBase",
@@ -19283,7 +19506,7 @@
19283
19506
  "immutable": true,
19284
19507
  "locationInModule": {
19285
19508
  "filename": "lib/s3-table.ts",
19286
- "line": 274
19509
+ "line": 277
19287
19510
  },
19288
19511
  "name": "tableName",
19289
19512
  "overrides": "@aws-cdk/aws-glue-alpha.TableBase",
@@ -19298,7 +19521,7 @@
19298
19521
  "immutable": true,
19299
19522
  "locationInModule": {
19300
19523
  "filename": "lib/s3-table.ts",
19301
- "line": 195
19524
+ "line": 198
19302
19525
  },
19303
19526
  "name": "tableResource",
19304
19527
  "overrides": "@aws-cdk/aws-glue-alpha.TableBase",
@@ -19316,12 +19539,12 @@
19316
19539
  "immutable": true,
19317
19540
  "locationInModule": {
19318
19541
  "filename": "lib/s3-table.ts",
19319
- "line": 188
19542
+ "line": 191
19320
19543
  },
19321
19544
  "name": "clientSideEncryptionKey",
19322
19545
  "optional": true,
19323
19546
  "type": {
19324
- "fqn": "aws-cdk-lib.aws_kms.IKey"
19547
+ "fqn": "aws-cdk-lib.interfaces.aws_kms.IKeyRef"
19325
19548
  }
19326
19549
  },
19327
19550
  {
@@ -19332,7 +19555,7 @@
19332
19555
  "immutable": true,
19333
19556
  "locationInModule": {
19334
19557
  "filename": "lib/s3-table.ts",
19335
- "line": 193
19558
+ "line": 196
19336
19559
  },
19337
19560
  "name": "partitionIndexes",
19338
19561
  "optional": true,
@@ -19452,7 +19675,7 @@
19452
19675
  "kind": "interface",
19453
19676
  "locationInModule": {
19454
19677
  "filename": "lib/s3-table.ts",
19455
- "line": 130
19678
+ "line": 133
19456
19679
  },
19457
19680
  "name": "S3TableProps",
19458
19681
  "properties": [
@@ -19467,7 +19690,7 @@
19467
19690
  "immutable": true,
19468
19691
  "locationInModule": {
19469
19692
  "filename": "lib/s3-table.ts",
19470
- "line": 158
19693
+ "line": 161
19471
19694
  },
19472
19695
  "name": "clientSideEncryption",
19473
19696
  "optional": true,
@@ -19486,7 +19709,7 @@
19486
19709
  "immutable": true,
19487
19710
  "locationInModule": {
19488
19711
  "filename": "lib/s3-table.ts",
19489
- "line": 148
19712
+ "line": 151
19490
19713
  },
19491
19714
  "name": "s3Prefix",
19492
19715
  "optional": true,
@@ -19504,7 +19727,7 @@
19504
19727
  "immutable": true,
19505
19728
  "locationInModule": {
19506
19729
  "filename": "lib/s3-table.ts",
19507
- "line": 137
19730
+ "line": 140
19508
19731
  },
19509
19732
  "name": "storage",
19510
19733
  "optional": true,
@@ -19530,7 +19753,7 @@
19530
19753
  "kind": "class",
19531
19754
  "locationInModule": {
19532
19755
  "filename": "lib/s3-table.ts",
19533
- "line": 64
19756
+ "line": 67
19534
19757
  },
19535
19758
  "methods": [
19536
19759
  {
@@ -19541,7 +19764,7 @@
19541
19764
  },
19542
19765
  "locationInModule": {
19543
19766
  "filename": "lib/s3-table.ts",
19544
- "line": 89
19767
+ "line": 92
19545
19768
  },
19546
19769
  "name": "fromBucket",
19547
19770
  "parameters": [
@@ -19570,7 +19793,7 @@
19570
19793
  },
19571
19794
  "locationInModule": {
19572
19795
  "filename": "lib/s3-table.ts",
19573
- "line": 71
19796
+ "line": 74
19574
19797
  },
19575
19798
  "name": "managedBucket",
19576
19799
  "parameters": [
@@ -19600,7 +19823,7 @@
19600
19823
  "assembly": "@aws-cdk/aws-glue-alpha",
19601
19824
  "base": "@aws-cdk/aws-glue-alpha.SparkJob",
19602
19825
  "docs": {
19603
- "remarks": "ETL jobs support pySpark and Scala languages, for which there are separate\nbut similar constructors. ETL jobs default to the G2 worker type, but you\ncan override this default with other supported worker type values\n(G1, G2, G4 and G8). ETL jobs defaults to Glue version 4.0, which you can\noverride to 3.0. The following ETL features are enabled by default:\nenable-metrics, enable-spark-ui, enable-continuous-cloudwatch-log.\nYou can find more details about version, worker type and other features\nin Glue's public documentation.",
19826
+ "remarks": "ETL jobs support pySpark and Scala languages, for which there are separate\nbut similar constructors. ETL jobs default to the G1 worker type, but you\ncan override this default with other supported worker type values\n(G1, G2, G4 and G8). ETL jobs defaults to Glue version 4.0, which you can\noverride to 3.0. The following ETL features are enabled by default:\n--enable-metrics, --enable-continuous-cloudwatch-log. The Spark UI\n(--enable-spark-ui) is off by default; enable it by setting the `sparkUI` prop.\nYou can find more details about version, worker type and other features\nin Glue's public documentation.",
19604
19827
  "stability": "experimental",
19605
19828
  "summary": "Spark ETL Jobs class.",
19606
19829
  "example": "// The code below shows an example of how to instantiate this type.\n// The values are placeholders you should change.\nimport * as glue_alpha from '@aws-cdk/aws-glue-alpha';\nimport * as cdk from 'aws-cdk-lib';\nimport { aws_iam as iam } from 'aws-cdk-lib';\nimport { aws_logs as logs } from 'aws-cdk-lib';\nimport { aws_s3 as s3 } from 'aws-cdk-lib';\n\ndeclare const bucket: s3.Bucket;\ndeclare const code: glue_alpha.Code;\ndeclare const connection: glue_alpha.Connection;\ndeclare const logGroup: logs.LogGroup;\ndeclare const role: iam.Role;\ndeclare const securityConfiguration: glue_alpha.SecurityConfiguration;\nconst scalaSparkEtlJob = new glue_alpha.ScalaSparkEtlJob(this, 'MyScalaSparkEtlJob', {\n className: 'className',\n role: role,\n script: code,\n\n // the properties below are optional\n connections: [connection],\n continuousLogging: {\n enabled: false,\n\n // the properties below are optional\n conversionPattern: 'conversionPattern',\n logGroup: logGroup,\n logStreamPrefix: 'logStreamPrefix',\n quiet: false,\n },\n defaultArguments: {\n defaultArgumentsKey: 'defaultArguments',\n },\n description: 'description',\n enableMetrics: false,\n enableObservabilityMetrics: false,\n extraFiles: [code],\n extraJars: [code],\n extraJarsFirst: false,\n glueVersion: glue_alpha.GlueVersion.V0_9,\n jobName: 'jobName',\n jobRunQueuingEnabled: false,\n maxConcurrentRuns: 123,\n maxRetries: 123,\n notifyDelayAfter: cdk.Duration.minutes(30),\n securityConfiguration: securityConfiguration,\n sparkUI: {\n bucket: bucket,\n prefix: 'prefix',\n },\n tags: {\n tagsKey: 'tags',\n },\n timeout: cdk.Duration.minutes(30),\n workerConfiguration: {\n numberOfWorkers: 123,\n workerType: glue_alpha.WorkerType.STANDARD,\n },\n});",
@@ -19616,7 +19839,7 @@
19616
19839
  },
19617
19840
  "locationInModule": {
19618
19841
  "filename": "lib/jobs/scala-spark-etl-job.ts",
19619
- "line": 89
19842
+ "line": 90
19620
19843
  },
19621
19844
  "parameters": [
19622
19845
  {
@@ -19642,7 +19865,7 @@
19642
19865
  "kind": "class",
19643
19866
  "locationInModule": {
19644
19867
  "filename": "lib/jobs/scala-spark-etl-job.ts",
19645
- "line": 80
19868
+ "line": 81
19646
19869
  },
19647
19870
  "name": "ScalaSparkEtlJob",
19648
19871
  "properties": [
@@ -19655,7 +19878,7 @@
19655
19878
  "immutable": true,
19656
19879
  "locationInModule": {
19657
19880
  "filename": "lib/jobs/scala-spark-etl-job.ts",
19658
- "line": 83
19881
+ "line": 84
19659
19882
  },
19660
19883
  "name": "PROPERTY_INJECTION_ID",
19661
19884
  "static": true,
@@ -19671,7 +19894,7 @@
19671
19894
  "immutable": true,
19672
19895
  "locationInModule": {
19673
19896
  "filename": "lib/jobs/scala-spark-etl-job.ts",
19674
- "line": 123
19897
+ "line": 124
19675
19898
  },
19676
19899
  "name": "jobArn",
19677
19900
  "overrides": "@aws-cdk/aws-glue-alpha.JobBase",
@@ -19687,7 +19910,7 @@
19687
19910
  "immutable": true,
19688
19911
  "locationInModule": {
19689
19912
  "filename": "lib/jobs/scala-spark-etl-job.ts",
19690
- "line": 128
19913
+ "line": 129
19691
19914
  },
19692
19915
  "name": "jobName",
19693
19916
  "overrides": "@aws-cdk/aws-glue-alpha.JobBase",
@@ -19847,9 +20070,9 @@
19847
20070
  "assembly": "@aws-cdk/aws-glue-alpha",
19848
20071
  "base": "@aws-cdk/aws-glue-alpha.SparkJob",
19849
20072
  "docs": {
19850
- "remarks": "ETL jobs support pySpark and Scala languages, for which there are separate\nbut similar constructors. ETL jobs default to the G2 worker type, but you\ncan override this default with other supported worker type values\n(G1, G2, G4 and G8). ETL jobs defaults to Glue version 4.0, which you can\noverride to 3.0. The following ETL features are enabled by default:\n—enable-metrics, —enable-spark-ui, —enable-continuous-cloudwatch-log.\nYou can find more details about version, worker type and other features\nin Glue's public documentation.",
20073
+ "remarks": "Flex jobs support Python and Scala languages.\nThe flexible execution class is appropriate for non-urgent jobs such as\npre-production jobs, testing, and one-time data loads.\nFlexible job runs are supported for jobs using AWS Glue version 3.0 or later and `G_1X` or\n`G_2X` worker types but will default to the latest version of Glue (currently Glue 5.0).\n\nSimilar to ETL, we’ll enable these features: --enable-metrics,\n--enable-continuous-cloudwatch-log. The Spark UI (--enable-spark-ui) is off by\ndefault; enable it by setting the `sparkUI` prop.",
19851
20074
  "stability": "experimental",
19852
- "summary": "Spark ETL Jobs class.",
20075
+ "summary": "Scala Spark Flex ETL Jobs class.",
19853
20076
  "example": "// The code below shows an example of how to instantiate this type.\n// The values are placeholders you should change.\nimport * as glue_alpha from '@aws-cdk/aws-glue-alpha';\nimport * as cdk from 'aws-cdk-lib';\nimport { aws_iam as iam } from 'aws-cdk-lib';\nimport { aws_logs as logs } from 'aws-cdk-lib';\nimport { aws_s3 as s3 } from 'aws-cdk-lib';\n\ndeclare const bucket: s3.Bucket;\ndeclare const code: glue_alpha.Code;\ndeclare const connection: glue_alpha.Connection;\ndeclare const logGroup: logs.LogGroup;\ndeclare const role: iam.Role;\ndeclare const securityConfiguration: glue_alpha.SecurityConfiguration;\nconst scalaSparkFlexEtlJob = new glue_alpha.ScalaSparkFlexEtlJob(this, 'MyScalaSparkFlexEtlJob', {\n className: 'className',\n role: role,\n script: code,\n\n // the properties below are optional\n connections: [connection],\n continuousLogging: {\n enabled: false,\n\n // the properties below are optional\n conversionPattern: 'conversionPattern',\n logGroup: logGroup,\n logStreamPrefix: 'logStreamPrefix',\n quiet: false,\n },\n defaultArguments: {\n defaultArgumentsKey: 'defaultArguments',\n },\n description: 'description',\n enableMetrics: false,\n enableObservabilityMetrics: false,\n extraFiles: [code],\n extraJars: [code],\n extraJarsFirst: false,\n glueVersion: glue_alpha.GlueVersion.V0_9,\n jobName: 'jobName',\n maxConcurrentRuns: 123,\n maxRetries: 123,\n notifyDelayAfter: cdk.Duration.minutes(30),\n securityConfiguration: securityConfiguration,\n sparkUI: {\n bucket: bucket,\n prefix: 'prefix',\n },\n tags: {\n tagsKey: 'tags',\n },\n timeout: cdk.Duration.minutes(30),\n workerConfiguration: {\n numberOfWorkers: 123,\n workerType: glue_alpha.WorkerType.STANDARD,\n },\n});",
19854
20077
  "custom": {
19855
20078
  "exampleMetadata": "fixture=_generated"
@@ -19863,7 +20086,7 @@
19863
20086
  },
19864
20087
  "locationInModule": {
19865
20088
  "filename": "lib/jobs/scala-spark-flex-etl-job.ts",
19866
- "line": 87
20089
+ "line": 78
19867
20090
  },
19868
20091
  "parameters": [
19869
20092
  {
@@ -19889,7 +20112,7 @@
19889
20112
  "kind": "class",
19890
20113
  "locationInModule": {
19891
20114
  "filename": "lib/jobs/scala-spark-flex-etl-job.ts",
19892
- "line": 78
20115
+ "line": 69
19893
20116
  },
19894
20117
  "name": "ScalaSparkFlexEtlJob",
19895
20118
  "properties": [
@@ -19902,7 +20125,7 @@
19902
20125
  "immutable": true,
19903
20126
  "locationInModule": {
19904
20127
  "filename": "lib/jobs/scala-spark-flex-etl-job.ts",
19905
- "line": 81
20128
+ "line": 72
19906
20129
  },
19907
20130
  "name": "PROPERTY_INJECTION_ID",
19908
20131
  "static": true,
@@ -19918,7 +20141,7 @@
19918
20141
  "immutable": true,
19919
20142
  "locationInModule": {
19920
20143
  "filename": "lib/jobs/scala-spark-flex-etl-job.ts",
19921
- "line": 122
20144
+ "line": 113
19922
20145
  },
19923
20146
  "name": "jobArn",
19924
20147
  "overrides": "@aws-cdk/aws-glue-alpha.JobBase",
@@ -19934,7 +20157,7 @@
19934
20157
  "immutable": true,
19935
20158
  "locationInModule": {
19936
20159
  "filename": "lib/jobs/scala-spark-flex-etl-job.ts",
19937
- "line": 127
20160
+ "line": 118
19938
20161
  },
19939
20162
  "name": "jobName",
19940
20163
  "overrides": "@aws-cdk/aws-glue-alpha.JobBase",
@@ -19949,9 +20172,8 @@
19949
20172
  "assembly": "@aws-cdk/aws-glue-alpha",
19950
20173
  "datatype": true,
19951
20174
  "docs": {
19952
- "remarks": "Flex jobs supports Python and Scala language.\nThe flexible execution class is appropriate for non-urgent jobs such as\npre-production jobs, testing, and one-time data loads.\nFlexible job runs are supported for jobs using AWS Glue version 3.0 or later and G.1X or\nG.2X worker types but will default to the latest version of Glue (currently Glue 3.0.)\n\nSimilar to ETL, we’ll enable these features: —enable-metrics, —enable-spark-ui,\n—enable-continuous-cloudwatch-log",
19953
20175
  "stability": "experimental",
19954
- "summary": "Flex Jobs class.",
20176
+ "summary": "Properties for a `ScalaSparkFlexEtlJob`.",
19955
20177
  "example": "// The code below shows an example of how to instantiate this type.\n// The values are placeholders you should change.\nimport * as glue_alpha from '@aws-cdk/aws-glue-alpha';\nimport * as cdk from 'aws-cdk-lib';\nimport { aws_iam as iam } from 'aws-cdk-lib';\nimport { aws_logs as logs } from 'aws-cdk-lib';\nimport { aws_s3 as s3 } from 'aws-cdk-lib';\n\ndeclare const bucket: s3.Bucket;\ndeclare const code: glue_alpha.Code;\ndeclare const connection: glue_alpha.Connection;\ndeclare const logGroup: logs.LogGroup;\ndeclare const role: iam.Role;\ndeclare const securityConfiguration: glue_alpha.SecurityConfiguration;\nconst scalaSparkFlexEtlJobProps: glue_alpha.ScalaSparkFlexEtlJobProps = {\n className: 'className',\n role: role,\n script: code,\n\n // the properties below are optional\n connections: [connection],\n continuousLogging: {\n enabled: false,\n\n // the properties below are optional\n conversionPattern: 'conversionPattern',\n logGroup: logGroup,\n logStreamPrefix: 'logStreamPrefix',\n quiet: false,\n },\n defaultArguments: {\n defaultArgumentsKey: 'defaultArguments',\n },\n description: 'description',\n enableMetrics: false,\n enableObservabilityMetrics: false,\n extraFiles: [code],\n extraJars: [code],\n extraJarsFirst: false,\n glueVersion: glue_alpha.GlueVersion.V0_9,\n jobName: 'jobName',\n maxConcurrentRuns: 123,\n maxRetries: 123,\n notifyDelayAfter: cdk.Duration.minutes(30),\n securityConfiguration: securityConfiguration,\n sparkUI: {\n bucket: bucket,\n prefix: 'prefix',\n },\n tags: {\n tagsKey: 'tags',\n },\n timeout: cdk.Duration.minutes(30),\n workerConfiguration: {\n numberOfWorkers: 123,\n workerType: glue_alpha.WorkerType.STANDARD,\n },\n};",
19956
20178
  "custom": {
19957
20179
  "exampleMetadata": "fixture=_generated"
@@ -19964,7 +20186,7 @@
19964
20186
  "kind": "interface",
19965
20187
  "locationInModule": {
19966
20188
  "filename": "lib/jobs/scala-spark-flex-etl-job.ts",
19967
- "line": 25
20189
+ "line": 15
19968
20190
  },
19969
20191
  "name": "ScalaSparkFlexEtlJobProps",
19970
20192
  "properties": [
@@ -19978,7 +20200,7 @@
19978
20200
  "immutable": true,
19979
20201
  "locationInModule": {
19980
20202
  "filename": "lib/jobs/scala-spark-flex-etl-job.ts",
19981
- "line": 38
20203
+ "line": 28
19982
20204
  },
19983
20205
  "name": "className",
19984
20206
  "type": {
@@ -19996,7 +20218,7 @@
19996
20218
  "immutable": true,
19997
20219
  "locationInModule": {
19998
20220
  "filename": "lib/jobs/scala-spark-flex-etl-job.ts",
19999
- "line": 47
20221
+ "line": 37
20000
20222
  },
20001
20223
  "name": "extraFiles",
20002
20224
  "optional": true,
@@ -20019,7 +20241,7 @@
20019
20241
  "immutable": true,
20020
20242
  "locationInModule": {
20021
20243
  "filename": "lib/jobs/scala-spark-flex-etl-job.ts",
20022
- "line": 54
20244
+ "line": 44
20023
20245
  },
20024
20246
  "name": "extraJars",
20025
20247
  "optional": true,
@@ -20043,7 +20265,7 @@
20043
20265
  "immutable": true,
20044
20266
  "locationInModule": {
20045
20267
  "filename": "lib/jobs/scala-spark-flex-etl-job.ts",
20046
- "line": 63
20268
+ "line": 53
20047
20269
  },
20048
20270
  "name": "extraJarsFirst",
20049
20271
  "optional": true,
@@ -20062,7 +20284,7 @@
20062
20284
  "immutable": true,
20063
20285
  "locationInModule": {
20064
20286
  "filename": "lib/jobs/scala-spark-flex-etl-job.ts",
20065
- "line": 31
20287
+ "line": 21
20066
20288
  },
20067
20289
  "name": "notifyDelayAfter",
20068
20290
  "optional": true,
@@ -20077,7 +20299,7 @@
20077
20299
  "assembly": "@aws-cdk/aws-glue-alpha",
20078
20300
  "base": "@aws-cdk/aws-glue-alpha.SparkJob",
20079
20301
  "docs": {
20080
- "remarks": "A Streaming job is similar to an ETL job, except that it performs ETL on data streams\nusing the Apache Spark Structured Streaming framework.\nThese jobs will default to use Python 3.9.\n\nSimilar to ETL jobs, streaming job supports Scala and Python languages. Similar to ETL,\nit supports G1 and G2 worker type and 2.0, 3.0 and 4.0 version. We’ll default to G2 worker\nand 4.0 version for streaming jobs which developers can override.\nWe will enable enable-metrics, enable-spark-ui, —enable-continuous-cloudwatch-log.",
20302
+ "remarks": "A Streaming job is similar to an ETL job, except that it performs ETL on data streams\nusing the Apache Spark Structured Streaming framework.\nThese jobs will default to use Python 3.9.\n\nSimilar to ETL jobs, streaming job supports Scala and Python languages. Similar to ETL,\nit supports G1 and G2 worker type and 2.0, 3.0 and 4.0 version. We’ll default to G1 worker\nand 4.0 version for streaming jobs which developers can override.\nWe will enable --enable-metrics, --enable-continuous-cloudwatch-log. The Spark UI\n(--enable-spark-ui) is off by default; enable it by setting the `sparkUI` prop.",
20081
20303
  "stability": "experimental",
20082
20304
  "summary": "Scala Streaming Jobs class.",
20083
20305
  "example": "// The code below shows an example of how to instantiate this type.\n// The values are placeholders you should change.\nimport * as glue_alpha from '@aws-cdk/aws-glue-alpha';\nimport * as cdk from 'aws-cdk-lib';\nimport { aws_iam as iam } from 'aws-cdk-lib';\nimport { aws_logs as logs } from 'aws-cdk-lib';\nimport { aws_s3 as s3 } from 'aws-cdk-lib';\n\ndeclare const bucket: s3.Bucket;\ndeclare const code: glue_alpha.Code;\ndeclare const connection: glue_alpha.Connection;\ndeclare const logGroup: logs.LogGroup;\ndeclare const role: iam.Role;\ndeclare const securityConfiguration: glue_alpha.SecurityConfiguration;\nconst scalaSparkStreamingJob = new glue_alpha.ScalaSparkStreamingJob(this, 'MyScalaSparkStreamingJob', {\n className: 'className',\n role: role,\n script: code,\n\n // the properties below are optional\n connections: [connection],\n continuousLogging: {\n enabled: false,\n\n // the properties below are optional\n conversionPattern: 'conversionPattern',\n logGroup: logGroup,\n logStreamPrefix: 'logStreamPrefix',\n quiet: false,\n },\n defaultArguments: {\n defaultArgumentsKey: 'defaultArguments',\n },\n description: 'description',\n enableMetrics: false,\n enableObservabilityMetrics: false,\n extraFiles: [code],\n extraJars: [code],\n extraJarsFirst: false,\n glueVersion: glue_alpha.GlueVersion.V0_9,\n jobName: 'jobName',\n jobRunQueuingEnabled: false,\n maxConcurrentRuns: 123,\n maxRetries: 123,\n securityConfiguration: securityConfiguration,\n sparkUI: {\n bucket: bucket,\n prefix: 'prefix',\n },\n tags: {\n tagsKey: 'tags',\n },\n timeout: cdk.Duration.minutes(30),\n workerConfiguration: {\n numberOfWorkers: 123,\n workerType: glue_alpha.WorkerType.STANDARD,\n },\n});",
@@ -20093,7 +20315,7 @@
20093
20315
  },
20094
20316
  "locationInModule": {
20095
20317
  "filename": "lib/jobs/scala-spark-streaming-job.ts",
20096
- "line": 81
20318
+ "line": 82
20097
20319
  },
20098
20320
  "parameters": [
20099
20321
  {
@@ -20119,7 +20341,7 @@
20119
20341
  "kind": "class",
20120
20342
  "locationInModule": {
20121
20343
  "filename": "lib/jobs/scala-spark-streaming-job.ts",
20122
- "line": 72
20344
+ "line": 73
20123
20345
  },
20124
20346
  "name": "ScalaSparkStreamingJob",
20125
20347
  "properties": [
@@ -20132,7 +20354,7 @@
20132
20354
  "immutable": true,
20133
20355
  "locationInModule": {
20134
20356
  "filename": "lib/jobs/scala-spark-streaming-job.ts",
20135
- "line": 75
20357
+ "line": 76
20136
20358
  },
20137
20359
  "name": "PROPERTY_INJECTION_ID",
20138
20360
  "static": true,
@@ -20148,7 +20370,7 @@
20148
20370
  "immutable": true,
20149
20371
  "locationInModule": {
20150
20372
  "filename": "lib/jobs/scala-spark-streaming-job.ts",
20151
- "line": 114
20373
+ "line": 115
20152
20374
  },
20153
20375
  "name": "jobArn",
20154
20376
  "overrides": "@aws-cdk/aws-glue-alpha.JobBase",
@@ -20164,7 +20386,7 @@
20164
20386
  "immutable": true,
20165
20387
  "locationInModule": {
20166
20388
  "filename": "lib/jobs/scala-spark-streaming-job.ts",
20167
- "line": 119
20389
+ "line": 120
20168
20390
  },
20169
20391
  "name": "jobName",
20170
20392
  "overrides": "@aws-cdk/aws-glue-alpha.JobBase",
@@ -23426,7 +23648,7 @@
23426
23648
  "kind": "class",
23427
23649
  "locationInModule": {
23428
23650
  "filename": "lib/s3-table.ts",
23429
- "line": 112
23651
+ "line": 115
23430
23652
  },
23431
23653
  "methods": [
23432
23654
  {
@@ -23436,7 +23658,7 @@
23436
23658
  },
23437
23659
  "locationInModule": {
23438
23660
  "filename": "lib/s3-table.ts",
23439
- "line": 118
23661
+ "line": 121
23440
23662
  },
23441
23663
  "name": "kms",
23442
23664
  "parameters": [
@@ -23448,7 +23670,7 @@
23448
23670
  "name": "key",
23449
23671
  "optional": true,
23450
23672
  "type": {
23451
- "fqn": "aws-cdk-lib.aws_kms.IKey"
23673
+ "fqn": "aws-cdk-lib.interfaces.aws_kms.IKeyRef"
23452
23674
  }
23453
23675
  }
23454
23676
  ],
@@ -24682,6 +24904,6 @@
24682
24904
  "symbolId": "lib/storage-parameter:WriteParallel"
24683
24905
  }
24684
24906
  },
24685
- "version": "2.267.0-alpha.0",
24907
+ "version": "2.268.0-alpha.0",
24686
24908
  "fingerprint": "**********"
24687
24909
  }