@aws-cdk/aws-glue-alpha 2.266.0-alpha.0 → 2.267.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 +487 -349
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +0 -58
  4. package/README.md +47 -29
  5. package/awslint.json +4 -0
  6. package/lib/catalog.js +3 -3
  7. package/lib/code.js +3 -3
  8. package/lib/connection.d.ts +41 -1
  9. package/lib/connection.js +48 -9
  10. package/lib/data-format.js +5 -5
  11. package/lib/data-quality-ruleset.js +3 -3
  12. package/lib/database.js +1 -1
  13. package/lib/external-table.js +1 -1
  14. package/lib/index.d.ts +0 -1
  15. package/lib/index.js +1 -2
  16. package/lib/jobs/job.js +2 -2
  17. package/lib/jobs/pyspark-etl-job.js +1 -1
  18. package/lib/jobs/pyspark-flex-etl-job.js +1 -1
  19. package/lib/jobs/pyspark-streaming-job.js +1 -1
  20. package/lib/jobs/python-shell-job.js +1 -1
  21. package/lib/jobs/ray-job.js +1 -1
  22. package/lib/jobs/scala-spark-etl-job.js +1 -1
  23. package/lib/jobs/scala-spark-flex-etl-job.js +1 -1
  24. package/lib/jobs/scala-spark-streaming-job.js +1 -1
  25. package/lib/jobs/spark-job.js +1 -1
  26. package/lib/partition-projection.d.ts +8 -8
  27. package/lib/partition-projection.js +49 -2
  28. package/lib/s3-table.d.ts +83 -40
  29. package/lib/s3-table.js +133 -85
  30. package/lib/schema.d.ts +26 -6
  31. package/lib/schema.js +74 -77
  32. package/lib/security-configuration.js +4 -4
  33. package/lib/storage-parameter.d.ts +14 -3
  34. package/lib/storage-parameter.js +16 -6
  35. package/lib/table-base.d.ts +1 -1
  36. package/lib/table-base.js +2 -2
  37. package/lib/triggers/trigger-options.js +1 -1
  38. package/lib/triggers/workflow.js +2 -2
  39. package/package.json +7 -7
  40. package/lib/table-deprecated.d.ts +0 -13
  41. package/lib/table-deprecated.js +0 -70
package/.jsii CHANGED
@@ -8,7 +8,7 @@
8
8
  "url": "https://aws.amazon.com"
9
9
  },
10
10
  "dependencies": {
11
- "aws-cdk-lib": "^2.266.0",
11
+ "aws-cdk-lib": "^2.267.0",
12
12
  "constructs": "^10.5.0"
13
13
  },
14
14
  "dependencyClosure": {
@@ -9409,7 +9409,7 @@
9409
9409
  },
9410
9410
  "name": "@aws-cdk/aws-glue-alpha",
9411
9411
  "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 You must specify JDBC connection credentials in Secrets Manager and\n provide the Secrets Manager Key name as a property to the job connection.\n\n* **Networking - the CDK determines the best fit subnet for Glue connection\nconfiguration**\n The prior version of the glue-alpha-module requires the developer to\n specify the subnet of the Connection when it’s defined. Now, you can still\n specify the specific subnet you want to use, but are no longer required\n to. You are only required to provide a VPC and either a public or private\n subnet selection. Without a specific subnet provided, the L2 leverages the\n existing [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.\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\nFor RDS `Connection` by JDBC, it is recommended to manage credentials using AWS Secrets Manager. To use Secret, specify `SECRET_ID` in `properties` like the following code. 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 properties: {\n JDBC_CONNECTION_URL: `jdbc:mysql://${db.clusterEndpoint.socketAddress}/databasename`,\n JDBC_ENFORCE_SSL: \"false\",\n SECRET_ID: db.secret!.secretName,\n },\n});\n```\n\nConnection `properties` are emitted verbatim into the CloudFormation template, so\nany credential placed there in plaintext is stored in plaintext in the template,\n`cdk.out`, and source control. Reference a Secrets Manager secret through\n`SECRET_ID` (as above) instead. 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 manually pass the `bucket` and `s3Prefix`:\n\n```ts\ndeclare const myBucket: s3.Bucket;\ndeclare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n bucket: 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 (i.e. you do not pass an explicit `bucket`), that bucket enforces SSL: a bucket policy denies any request made over plain HTTP. If you provide your own bucket, enabling `enforceSSL` on it is your responsibility.\n\nYou can enable encryption on a Table's data:\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 encryption: glue.TableEncryption.S3_MANAGED,\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 encryption: glue.TableEncryption.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 encryption: glue.TableEncryption.KMS,\n encryptionKey: 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 encryption: glue.TableEncryption.KMS_MANAGED,\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});\n```\n\n* [ClientSideKms](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html#client-side-encryption-kms-managed-master-key-intro) - Client-side encryption (`CSE-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 encryption: glue.TableEncryption.CLIENT_SIDE_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 encryption: glue.TableEncryption.CLIENT_SIDE_KMS,\n encryptionKey: 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*Note: you cannot provide a `Bucket` when creating the `S3Table` if you wish to use server-side encryption (`KMS`, `KMS_MANAGED` or `S3_MANAGED`)*.\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\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"
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"
9413
9413
  },
9414
9414
  "repository": {
9415
9415
  "directory": "packages/@aws-cdk/aws-glue-alpha",
@@ -10582,7 +10582,7 @@
10582
10582
  "docs": {
10583
10583
  "stability": "experimental",
10584
10584
  "summary": "A column of a table.",
10585
- "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';\nconst column: glue_alpha.Column = {\n name: 'name',\n type: {\n inputString: 'inputString',\n isPrimitive: false,\n },\n\n // the properties below are optional\n comment: 'comment',\n};",
10585
+ "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';\n\ndeclare const type: glue_alpha.Type;\nconst column: glue_alpha.Column = {\n name: 'name',\n type: type,\n\n // the properties below are optional\n comment: 'comment',\n};",
10586
10586
  "custom": {
10587
10587
  "exampleMetadata": "fixture=_generated"
10588
10588
  }
@@ -10660,7 +10660,7 @@
10660
10660
  "kind": "enum",
10661
10661
  "locationInModule": {
10662
10662
  "filename": "lib/storage-parameter.ts",
10663
- "line": 156
10663
+ "line": 158
10664
10664
  },
10665
10665
  "members": [
10666
10666
  {
@@ -10710,7 +10710,7 @@
10710
10710
  "kind": "enum",
10711
10711
  "locationInModule": {
10712
10712
  "filename": "lib/storage-parameter.ts",
10713
- "line": 6
10713
+ "line": 8
10714
10714
  },
10715
10715
  "members": [
10716
10716
  {
@@ -10940,7 +10940,7 @@
10940
10940
  },
10941
10941
  "locationInModule": {
10942
10942
  "filename": "lib/connection.ts",
10943
- "line": 359
10943
+ "line": 397
10944
10944
  },
10945
10945
  "parameters": [
10946
10946
  {
@@ -10969,7 +10969,7 @@
10969
10969
  "kind": "class",
10970
10970
  "locationInModule": {
10971
10971
  "filename": "lib/connection.ts",
10972
- "line": 311
10972
+ "line": 349
10973
10973
  },
10974
10974
  "methods": [
10975
10975
  {
@@ -10979,7 +10979,7 @@
10979
10979
  },
10980
10980
  "locationInModule": {
10981
10981
  "filename": "lib/connection.ts",
10982
- "line": 323
10982
+ "line": 361
10983
10983
  },
10984
10984
  "name": "fromConnectionArn",
10985
10985
  "parameters": [
@@ -11025,7 +11025,7 @@
11025
11025
  },
11026
11026
  "locationInModule": {
11027
11027
  "filename": "lib/connection.ts",
11028
- "line": 339
11028
+ "line": 377
11029
11029
  },
11030
11030
  "name": "fromConnectionName",
11031
11031
  "parameters": [
@@ -11071,7 +11071,7 @@
11071
11071
  },
11072
11072
  "locationInModule": {
11073
11073
  "filename": "lib/connection.ts",
11074
- "line": 420
11074
+ "line": 504
11075
11075
  },
11076
11076
  "name": "addProperty",
11077
11077
  "parameters": [
@@ -11107,7 +11107,7 @@
11107
11107
  "immutable": true,
11108
11108
  "locationInModule": {
11109
11109
  "filename": "lib/connection.ts",
11110
- "line": 314
11110
+ "line": 352
11111
11111
  },
11112
11112
  "name": "PROPERTY_INJECTION_ID",
11113
11113
  "static": true,
@@ -11123,7 +11123,7 @@
11123
11123
  "immutable": true,
11124
11124
  "locationInModule": {
11125
11125
  "filename": "lib/connection.ts",
11126
- "line": 410
11126
+ "line": 494
11127
11127
  },
11128
11128
  "name": "connectionArn",
11129
11129
  "overrides": "@aws-cdk/aws-glue-alpha.IConnection",
@@ -11139,7 +11139,7 @@
11139
11139
  "immutable": true,
11140
11140
  "locationInModule": {
11141
11141
  "filename": "lib/connection.ts",
11142
- "line": 402
11142
+ "line": 486
11143
11143
  },
11144
11144
  "name": "connectionName",
11145
11145
  "overrides": "@aws-cdk/aws-glue-alpha.IConnection",
@@ -11156,7 +11156,7 @@
11156
11156
  "docs": {
11157
11157
  "stability": "experimental",
11158
11158
  "summary": "Base Connection Options.",
11159
- "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 { aws_ec2 as ec2 } from 'aws-cdk-lib';\n\ndeclare const securityGroup: ec2.SecurityGroup;\ndeclare const subnet: ec2.Subnet;\nconst connectionOptions: glue_alpha.ConnectionOptions = {\n connectionName: 'connectionName',\n description: 'description',\n matchCriteria: ['matchCriteria'],\n properties: {\n propertiesKey: 'properties',\n },\n securityGroups: [securityGroup],\n subnet: subnet,\n};",
11159
+ "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 { aws_ec2 as ec2 } from 'aws-cdk-lib';\nimport { aws_secretsmanager as interfaces_secretsmanager } from 'aws-cdk-lib/interfaces';\n\ndeclare const secretRef: interfaces_secretsmanager.ISecretRef;\ndeclare const securityGroup: ec2.SecurityGroup;\ndeclare const subnet: ec2.Subnet;\ndeclare const subnetFilter: ec2.SubnetFilter;\ndeclare const vpc: ec2.Vpc;\nconst connectionOptions: glue_alpha.ConnectionOptions = {\n connectionName: 'connectionName',\n description: 'description',\n matchCriteria: ['matchCriteria'],\n properties: {\n propertiesKey: 'properties',\n },\n secret: secretRef,\n securityGroups: [securityGroup],\n subnet: subnet,\n vpc: vpc,\n vpcSubnets: {\n availabilityZones: ['availabilityZones'],\n onePerAz: false,\n subnetFilters: [subnetFilter],\n subnetGroupName: 'subnetGroupName',\n subnets: [subnet],\n subnetType: ec2.SubnetType.PRIVATE_ISOLATED,\n },\n};",
11160
11160
  "custom": {
11161
11161
  "exampleMetadata": "fixture=_generated"
11162
11162
  }
@@ -11165,7 +11165,7 @@
11165
11165
  "kind": "interface",
11166
11166
  "locationInModule": {
11167
11167
  "filename": "lib/connection.ts",
11168
- "line": 258
11168
+ "line": 259
11169
11169
  },
11170
11170
  "name": "ConnectionOptions",
11171
11171
  "properties": [
@@ -11179,7 +11179,7 @@
11179
11179
  "immutable": true,
11180
11180
  "locationInModule": {
11181
11181
  "filename": "lib/connection.ts",
11182
- "line": 263
11182
+ "line": 264
11183
11183
  },
11184
11184
  "name": "connectionName",
11185
11185
  "optional": true,
@@ -11197,7 +11197,7 @@
11197
11197
  "immutable": true,
11198
11198
  "locationInModule": {
11199
11199
  "filename": "lib/connection.ts",
11200
- "line": 269
11200
+ "line": 270
11201
11201
  },
11202
11202
  "name": "description",
11203
11203
  "optional": true,
@@ -11216,7 +11216,7 @@
11216
11216
  "immutable": true,
11217
11217
  "locationInModule": {
11218
11218
  "filename": "lib/connection.ts",
11219
- "line": 283
11219
+ "line": 296
11220
11220
  },
11221
11221
  "name": "matchCriteria",
11222
11222
  "optional": true,
@@ -11240,7 +11240,7 @@
11240
11240
  "immutable": true,
11241
11241
  "locationInModule": {
11242
11242
  "filename": "lib/connection.ts",
11243
- "line": 276
11243
+ "line": 277
11244
11244
  },
11245
11245
  "name": "properties",
11246
11246
  "optional": true,
@@ -11253,6 +11253,25 @@
11253
11253
  }
11254
11254
  }
11255
11255
  },
11256
+ {
11257
+ "abstract": true,
11258
+ "docs": {
11259
+ "default": "- no secret; any credentials must be supplied via `properties`",
11260
+ "remarks": "The secret is referenced through the connection's `SECRET_ID` property, so\nGlue reads the credentials at runtime and the secret value never appears in\nthe synthesized template. Prefer this over placing credentials directly in\n`properties`. Accepts any `secretsmanager.ISecret`.",
11261
+ "stability": "experimental",
11262
+ "summary": "A reference to a Secrets Manager secret holding the credentials for this connection."
11263
+ },
11264
+ "immutable": true,
11265
+ "locationInModule": {
11266
+ "filename": "lib/connection.ts",
11267
+ "line": 289
11268
+ },
11269
+ "name": "secret",
11270
+ "optional": true,
11271
+ "type": {
11272
+ "fqn": "aws-cdk-lib.interfaces.aws_secretsmanager.ISecretRef"
11273
+ }
11274
+ },
11256
11275
  {
11257
11276
  "abstract": true,
11258
11277
  "docs": {
@@ -11263,7 +11282,7 @@
11263
11282
  "immutable": true,
11264
11283
  "locationInModule": {
11265
11284
  "filename": "lib/connection.ts",
11266
- "line": 289
11285
+ "line": 302
11267
11286
  },
11268
11287
  "name": "securityGroups",
11269
11288
  "optional": true,
@@ -11279,21 +11298,59 @@
11279
11298
  {
11280
11299
  "abstract": true,
11281
11300
  "docs": {
11282
- "default": "no subnet",
11283
- "remarks": "See more at https://docs.aws.amazon.com/glue/latest/dg/start-connecting.html.",
11301
+ "default": "- no subnet, unless `vpc` is provided",
11302
+ "remarks": "Mutually exclusive with `vpc`: provide `subnet` to pin the connection to a\nspecific subnet, or provide `vpc` (optionally with `vpcSubnets`) to let the\nCDK select one for you.",
11284
11303
  "stability": "experimental",
11285
- "summary": "The VPC subnet to connect to resources within a VPC."
11304
+ "summary": "The VPC subnet to connect to resources within a VPC. See more at https://docs.aws.amazon.com/glue/latest/dg/start-connecting.html."
11286
11305
  },
11287
11306
  "immutable": true,
11288
11307
  "locationInModule": {
11289
11308
  "filename": "lib/connection.ts",
11290
- "line": 295
11309
+ "line": 313
11291
11310
  },
11292
11311
  "name": "subnet",
11293
11312
  "optional": true,
11294
11313
  "type": {
11295
11314
  "fqn": "aws-cdk-lib.aws_ec2.ISubnet"
11296
11315
  }
11316
+ },
11317
+ {
11318
+ "abstract": true,
11319
+ "docs": {
11320
+ "default": "- no VPC, the subnet is taken from `subnet` if provided",
11321
+ "remarks": "When provided, the CDK selects a\nsubnet from this VPC using `vpcSubnets`. A Glue connection targets a single\nsubnet, so the first subnet of the selection is used.\n\nMutually exclusive with `subnet`.",
11322
+ "stability": "experimental",
11323
+ "summary": "The VPC to connect to resources within."
11324
+ },
11325
+ "immutable": true,
11326
+ "locationInModule": {
11327
+ "filename": "lib/connection.ts",
11328
+ "line": 324
11329
+ },
11330
+ "name": "vpc",
11331
+ "optional": true,
11332
+ "type": {
11333
+ "fqn": "aws-cdk-lib.aws_ec2.IVpc"
11334
+ }
11335
+ },
11336
+ {
11337
+ "abstract": true,
11338
+ "docs": {
11339
+ "default": "- private subnets",
11340
+ "remarks": "Only used when\n`vpc` is provided. Since a Glue connection targets a single subnet, the\nfirst subnet of the selection is used.",
11341
+ "stability": "experimental",
11342
+ "summary": "Which subnets of `vpc` to select the connection subnet from."
11343
+ },
11344
+ "immutable": true,
11345
+ "locationInModule": {
11346
+ "filename": "lib/connection.ts",
11347
+ "line": 333
11348
+ },
11349
+ "name": "vpcSubnets",
11350
+ "optional": true,
11351
+ "type": {
11352
+ "fqn": "aws-cdk-lib.aws_ec2.SubnetSelection"
11353
+ }
11297
11354
  }
11298
11355
  ],
11299
11356
  "symbolId": "lib/connection:ConnectionOptions"
@@ -11365,7 +11422,7 @@
11365
11422
  "docs": {
11366
11423
  "stability": "experimental",
11367
11424
  "summary": "Construction properties for `Connection`.",
11368
- "example": "declare 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});",
11425
+ "example": "declare 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});",
11369
11426
  "custom": {
11370
11427
  "exampleMetadata": "infused"
11371
11428
  }
@@ -11377,7 +11434,7 @@
11377
11434
  "kind": "interface",
11378
11435
  "locationInModule": {
11379
11436
  "filename": "lib/connection.ts",
11380
- "line": 301
11437
+ "line": 339
11381
11438
  },
11382
11439
  "name": "ConnectionProps",
11383
11440
  "properties": [
@@ -11390,7 +11447,7 @@
11390
11447
  "immutable": true,
11391
11448
  "locationInModule": {
11392
11449
  "filename": "lib/connection.ts",
11393
- "line": 305
11450
+ "line": 343
11394
11451
  },
11395
11452
  "name": "type",
11396
11453
  "type": {
@@ -11407,7 +11464,7 @@
11407
11464
  "see": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-connection-connectioninput.html#cfn-glue-connection-connectioninput-connectiontype",
11408
11465
  "stability": "experimental",
11409
11466
  "summary": "The type of the glue connection.",
11410
- "example": "declare 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});",
11467
+ "example": "declare 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});",
11411
11468
  "custom": {
11412
11469
  "exampleMetadata": "infused"
11413
11470
  }
@@ -11419,7 +11476,7 @@
11419
11476
  },
11420
11477
  "locationInModule": {
11421
11478
  "filename": "lib/connection.ts",
11422
- "line": 226
11479
+ "line": 227
11423
11480
  },
11424
11481
  "parameters": [
11425
11482
  {
@@ -11433,7 +11490,7 @@
11433
11490
  "kind": "class",
11434
11491
  "locationInModule": {
11435
11492
  "filename": "lib/connection.ts",
11436
- "line": 18
11493
+ "line": 19
11437
11494
  },
11438
11495
  "methods": [
11439
11496
  {
@@ -11443,7 +11500,7 @@
11443
11500
  },
11444
11501
  "locationInModule": {
11445
11502
  "filename": "lib/connection.ts",
11446
- "line": 233
11503
+ "line": 234
11447
11504
  },
11448
11505
  "name": "toString",
11449
11506
  "returns": {
@@ -11464,7 +11521,7 @@
11464
11521
  "immutable": true,
11465
11522
  "locationInModule": {
11466
11523
  "filename": "lib/connection.ts",
11467
- "line": 174
11524
+ "line": 175
11468
11525
  },
11469
11526
  "name": "AZURECOSMOS",
11470
11527
  "static": true,
@@ -11481,7 +11538,7 @@
11481
11538
  "immutable": true,
11482
11539
  "locationInModule": {
11483
11540
  "filename": "lib/connection.ts",
11484
- "line": 169
11541
+ "line": 170
11485
11542
  },
11486
11543
  "name": "AZURESQL",
11487
11544
  "static": true,
@@ -11498,7 +11555,7 @@
11498
11555
  "immutable": true,
11499
11556
  "locationInModule": {
11500
11557
  "filename": "lib/connection.ts",
11501
- "line": 164
11558
+ "line": 165
11502
11559
  },
11503
11560
  "name": "BIGQUERY",
11504
11561
  "static": true,
@@ -11515,7 +11572,7 @@
11515
11572
  "immutable": true,
11516
11573
  "locationInModule": {
11517
11574
  "filename": "lib/connection.ts",
11518
- "line": 59
11575
+ "line": 60
11519
11576
  },
11520
11577
  "name": "CUSTOM",
11521
11578
  "static": true,
@@ -11532,7 +11589,7 @@
11532
11589
  "immutable": true,
11533
11590
  "locationInModule": {
11534
11591
  "filename": "lib/connection.ts",
11535
- "line": 219
11592
+ "line": 220
11536
11593
  },
11537
11594
  "name": "DYNAMODB",
11538
11595
  "static": true,
@@ -11549,7 +11606,7 @@
11549
11606
  "immutable": true,
11550
11607
  "locationInModule": {
11551
11608
  "filename": "lib/connection.ts",
11552
- "line": 64
11609
+ "line": 65
11553
11610
  },
11554
11611
  "name": "FACEBOOKADS",
11555
11612
  "static": true,
@@ -11566,7 +11623,7 @@
11566
11623
  "immutable": true,
11567
11624
  "locationInModule": {
11568
11625
  "filename": "lib/connection.ts",
11569
- "line": 69
11626
+ "line": 70
11570
11627
  },
11571
11628
  "name": "GOOGLEADS",
11572
11629
  "static": true,
@@ -11583,7 +11640,7 @@
11583
11640
  "immutable": true,
11584
11641
  "locationInModule": {
11585
11642
  "filename": "lib/connection.ts",
11586
- "line": 79
11643
+ "line": 80
11587
11644
  },
11588
11645
  "name": "GOOGLEANALYTICS4",
11589
11646
  "static": true,
@@ -11600,7 +11657,7 @@
11600
11657
  "immutable": true,
11601
11658
  "locationInModule": {
11602
11659
  "filename": "lib/connection.ts",
11603
- "line": 74
11660
+ "line": 75
11604
11661
  },
11605
11662
  "name": "GOOGLESHEETS",
11606
11663
  "static": true,
@@ -11617,7 +11674,7 @@
11617
11674
  "immutable": true,
11618
11675
  "locationInModule": {
11619
11676
  "filename": "lib/connection.ts",
11620
- "line": 84
11677
+ "line": 85
11621
11678
  },
11622
11679
  "name": "HUBSPOT",
11623
11680
  "static": true,
@@ -11634,7 +11691,7 @@
11634
11691
  "immutable": true,
11635
11692
  "locationInModule": {
11636
11693
  "filename": "lib/connection.ts",
11637
- "line": 89
11694
+ "line": 90
11638
11695
  },
11639
11696
  "name": "INSTAGRAMADS",
11640
11697
  "static": true,
@@ -11651,7 +11708,7 @@
11651
11708
  "immutable": true,
11652
11709
  "locationInModule": {
11653
11710
  "filename": "lib/connection.ts",
11654
- "line": 94
11711
+ "line": 95
11655
11712
  },
11656
11713
  "name": "INTERCOM",
11657
11714
  "static": true,
@@ -11668,7 +11725,7 @@
11668
11725
  "immutable": true,
11669
11726
  "locationInModule": {
11670
11727
  "filename": "lib/connection.ts",
11671
- "line": 22
11728
+ "line": 23
11672
11729
  },
11673
11730
  "name": "JDBC",
11674
11731
  "static": true,
@@ -11685,7 +11742,7 @@
11685
11742
  "immutable": true,
11686
11743
  "locationInModule": {
11687
11744
  "filename": "lib/connection.ts",
11688
- "line": 99
11745
+ "line": 100
11689
11746
  },
11690
11747
  "name": "JIRACLOUD",
11691
11748
  "static": true,
@@ -11702,7 +11759,7 @@
11702
11759
  "immutable": true,
11703
11760
  "locationInModule": {
11704
11761
  "filename": "lib/connection.ts",
11705
- "line": 27
11762
+ "line": 28
11706
11763
  },
11707
11764
  "name": "KAFKA",
11708
11765
  "static": true,
@@ -11719,7 +11776,7 @@
11719
11776
  "immutable": true,
11720
11777
  "locationInModule": {
11721
11778
  "filename": "lib/connection.ts",
11722
- "line": 104
11779
+ "line": 105
11723
11780
  },
11724
11781
  "name": "MARKETO",
11725
11782
  "static": true,
@@ -11736,7 +11793,7 @@
11736
11793
  "immutable": true,
11737
11794
  "locationInModule": {
11738
11795
  "filename": "lib/connection.ts",
11739
- "line": 53
11796
+ "line": 54
11740
11797
  },
11741
11798
  "name": "MARKETPLACE",
11742
11799
  "static": true,
@@ -11753,7 +11810,7 @@
11753
11810
  "immutable": true,
11754
11811
  "locationInModule": {
11755
11812
  "filename": "lib/connection.ts",
11756
- "line": 32
11813
+ "line": 33
11757
11814
  },
11758
11815
  "name": "MONGODB",
11759
11816
  "static": true,
@@ -11770,7 +11827,7 @@
11770
11827
  "immutable": true,
11771
11828
  "locationInModule": {
11772
11829
  "filename": "lib/connection.ts",
11773
- "line": 184
11830
+ "line": 185
11774
11831
  },
11775
11832
  "name": "MYSQL",
11776
11833
  "static": true,
@@ -11787,7 +11844,7 @@
11787
11844
  "immutable": true,
11788
11845
  "locationInModule": {
11789
11846
  "filename": "lib/connection.ts",
11790
- "line": 109
11847
+ "line": 110
11791
11848
  },
11792
11849
  "name": "NETSUITEERP",
11793
11850
  "static": true,
@@ -11804,7 +11861,7 @@
11804
11861
  "immutable": true,
11805
11862
  "locationInModule": {
11806
11863
  "filename": "lib/connection.ts",
11807
- "line": 47
11864
+ "line": 48
11808
11865
  },
11809
11866
  "name": "NETWORK",
11810
11867
  "static": true,
@@ -11821,7 +11878,7 @@
11821
11878
  "immutable": true,
11822
11879
  "locationInModule": {
11823
11880
  "filename": "lib/connection.ts",
11824
- "line": 179
11881
+ "line": 180
11825
11882
  },
11826
11883
  "name": "OPENSEARCH",
11827
11884
  "static": true,
@@ -11838,7 +11895,7 @@
11838
11895
  "immutable": true,
11839
11896
  "locationInModule": {
11840
11897
  "filename": "lib/connection.ts",
11841
- "line": 194
11898
+ "line": 195
11842
11899
  },
11843
11900
  "name": "ORACLE",
11844
11901
  "static": true,
@@ -11855,7 +11912,7 @@
11855
11912
  "immutable": true,
11856
11913
  "locationInModule": {
11857
11914
  "filename": "lib/connection.ts",
11858
- "line": 189
11915
+ "line": 190
11859
11916
  },
11860
11917
  "name": "POSTGRESQL",
11861
11918
  "static": true,
@@ -11872,7 +11929,7 @@
11872
11929
  "immutable": true,
11873
11930
  "locationInModule": {
11874
11931
  "filename": "lib/connection.ts",
11875
- "line": 114
11932
+ "line": 115
11876
11933
  },
11877
11934
  "name": "SALESFORCE",
11878
11935
  "static": true,
@@ -11889,7 +11946,7 @@
11889
11946
  "immutable": true,
11890
11947
  "locationInModule": {
11891
11948
  "filename": "lib/connection.ts",
11892
- "line": 119
11949
+ "line": 120
11893
11950
  },
11894
11951
  "name": "SALESFORCEMARKETINGCLOUD",
11895
11952
  "static": true,
@@ -11906,7 +11963,7 @@
11906
11963
  "immutable": true,
11907
11964
  "locationInModule": {
11908
11965
  "filename": "lib/connection.ts",
11909
- "line": 124
11966
+ "line": 125
11910
11967
  },
11911
11968
  "name": "SALESFORCEPARDOT",
11912
11969
  "static": true,
@@ -11923,7 +11980,7 @@
11923
11980
  "immutable": true,
11924
11981
  "locationInModule": {
11925
11982
  "filename": "lib/connection.ts",
11926
- "line": 204
11983
+ "line": 205
11927
11984
  },
11928
11985
  "name": "SAPHANA",
11929
11986
  "static": true,
@@ -11940,7 +11997,7 @@
11940
11997
  "immutable": true,
11941
11998
  "locationInModule": {
11942
11999
  "filename": "lib/connection.ts",
11943
- "line": 129
12000
+ "line": 130
11944
12001
  },
11945
12002
  "name": "SAPODATA",
11946
12003
  "static": true,
@@ -11957,7 +12014,7 @@
11957
12014
  "immutable": true,
11958
12015
  "locationInModule": {
11959
12016
  "filename": "lib/connection.ts",
11960
- "line": 134
12017
+ "line": 135
11961
12018
  },
11962
12019
  "name": "SERVICENOW",
11963
12020
  "static": true,
@@ -11974,7 +12031,7 @@
11974
12031
  "immutable": true,
11975
12032
  "locationInModule": {
11976
12033
  "filename": "lib/connection.ts",
11977
- "line": 139
12034
+ "line": 140
11978
12035
  },
11979
12036
  "name": "SLACK",
11980
12037
  "static": true,
@@ -11991,7 +12048,7 @@
11991
12048
  "immutable": true,
11992
12049
  "locationInModule": {
11993
12050
  "filename": "lib/connection.ts",
11994
- "line": 144
12051
+ "line": 145
11995
12052
  },
11996
12053
  "name": "SNAPCHATADS",
11997
12054
  "static": true,
@@ -12008,7 +12065,7 @@
12008
12065
  "immutable": true,
12009
12066
  "locationInModule": {
12010
12067
  "filename": "lib/connection.ts",
12011
- "line": 199
12068
+ "line": 200
12012
12069
  },
12013
12070
  "name": "SQLSERVER",
12014
12071
  "static": true,
@@ -12025,7 +12082,7 @@
12025
12082
  "immutable": true,
12026
12083
  "locationInModule": {
12027
12084
  "filename": "lib/connection.ts",
12028
- "line": 149
12085
+ "line": 150
12029
12086
  },
12030
12087
  "name": "STRIPE",
12031
12088
  "static": true,
@@ -12042,7 +12099,7 @@
12042
12099
  "immutable": true,
12043
12100
  "locationInModule": {
12044
12101
  "filename": "lib/connection.ts",
12045
- "line": 209
12102
+ "line": 210
12046
12103
  },
12047
12104
  "name": "TERADATA",
12048
12105
  "static": true,
@@ -12059,7 +12116,7 @@
12059
12116
  "immutable": true,
12060
12117
  "locationInModule": {
12061
12118
  "filename": "lib/connection.ts",
12062
- "line": 214
12119
+ "line": 215
12063
12120
  },
12064
12121
  "name": "VERTICA",
12065
12122
  "static": true,
@@ -12076,7 +12133,7 @@
12076
12133
  "immutable": true,
12077
12134
  "locationInModule": {
12078
12135
  "filename": "lib/connection.ts",
12079
- "line": 42
12136
+ "line": 43
12080
12137
  },
12081
12138
  "name": "VIEW_VALIDATION_ATHENA",
12082
12139
  "static": true,
@@ -12093,7 +12150,7 @@
12093
12150
  "immutable": true,
12094
12151
  "locationInModule": {
12095
12152
  "filename": "lib/connection.ts",
12096
- "line": 37
12153
+ "line": 38
12097
12154
  },
12098
12155
  "name": "VIEW_VALIDATION_REDSHIFT",
12099
12156
  "static": true,
@@ -12110,7 +12167,7 @@
12110
12167
  "immutable": true,
12111
12168
  "locationInModule": {
12112
12169
  "filename": "lib/connection.ts",
12113
- "line": 154
12170
+ "line": 155
12114
12171
  },
12115
12172
  "name": "ZENDESK",
12116
12173
  "static": true,
@@ -12127,7 +12184,7 @@
12127
12184
  "immutable": true,
12128
12185
  "locationInModule": {
12129
12186
  "filename": "lib/connection.ts",
12130
- "line": 159
12187
+ "line": 160
12131
12188
  },
12132
12189
  "name": "ZOHOCRM",
12133
12190
  "static": true,
@@ -12143,7 +12200,7 @@
12143
12200
  "immutable": true,
12144
12201
  "locationInModule": {
12145
12202
  "filename": "lib/connection.ts",
12146
- "line": 224
12203
+ "line": 225
12147
12204
  },
12148
12205
  "name": "name",
12149
12206
  "type": {
@@ -12572,7 +12629,7 @@
12572
12629
  "docs": {
12573
12630
  "stability": "experimental",
12574
12631
  "summary": "Defines the input/output formats and ser/de for a single DataFormat.",
12575
- "example": "declare 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});",
12632
+ "example": "declare 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});",
12576
12633
  "custom": {
12577
12634
  "exampleMetadata": "infused"
12578
12635
  }
@@ -13760,8 +13817,8 @@
13760
13817
  {
13761
13818
  "abstract": true,
13762
13819
  "docs": {
13763
- "default": "- 1 for single-day or single-month precision, otherwise required",
13764
- "remarks": "When the provided dates are at single-day or single-month precision,\nthe interval is optional and defaults to 1 day or 1 month, respectively.\nOtherwise, interval is required.",
13820
+ "default": "- Athena's default step for the format's precision; required when `format` is sub-day precision",
13821
+ "remarks": "Required (together with `intervalUnit`) when `format` carries sub-day\nprecision i.e. a field finer than a day, such as hours or AM/PM. At day\nor coarser precision Athena defaults the step, so it is optional.",
13765
13822
  "stability": "experimental",
13766
13823
  "summary": "Interval between partition values."
13767
13824
  },
@@ -13779,8 +13836,8 @@
13779
13836
  {
13780
13837
  "abstract": true,
13781
13838
  "docs": {
13782
- "default": "- DAYS for single-day precision, MONTHS for single-month precision, otherwise required",
13783
- "remarks": "When the provided dates are at single-day or single-month precision,\nthe intervalUnit is optional and defaults to 1 day or 1 month, respectively.\nOtherwise, the intervalUnit is required.",
13839
+ "default": "- Athena's default unit for the format's precision; required when `format` is sub-day precision",
13840
+ "remarks": "Required (together with `interval`) when `format` carries sub-day\nprecision i.e. a field finer than a day, such as hours or AM/PM. At day\nor coarser precision Athena defaults the step, so it is optional.",
13784
13841
  "stability": "experimental",
13785
13842
  "summary": "Unit for the interval."
13786
13843
  },
@@ -14459,7 +14516,7 @@
14459
14516
  "kind": "interface",
14460
14517
  "locationInModule": {
14461
14518
  "filename": "lib/connection.ts",
14462
- "line": 241
14519
+ "line": 242
14463
14520
  },
14464
14521
  "name": "IConnection",
14465
14522
  "properties": [
@@ -14475,7 +14532,7 @@
14475
14532
  "immutable": true,
14476
14533
  "locationInModule": {
14477
14534
  "filename": "lib/connection.ts",
14478
- "line": 252
14535
+ "line": 253
14479
14536
  },
14480
14537
  "name": "connectionArn",
14481
14538
  "type": {
@@ -14494,7 +14551,7 @@
14494
14551
  "immutable": true,
14495
14552
  "locationInModule": {
14496
14553
  "filename": "lib/connection.ts",
14497
- "line": 246
14554
+ "line": 247
14498
14555
  },
14499
14556
  "name": "connectionName",
14500
14557
  "type": {
@@ -15477,7 +15534,7 @@
15477
15534
  "kind": "enum",
15478
15535
  "locationInModule": {
15479
15536
  "filename": "lib/storage-parameter.ts",
15480
- "line": 33
15537
+ "line": 35
15481
15538
  },
15482
15539
  "members": [
15483
15540
  {
@@ -16858,7 +16915,7 @@
16858
16915
  "kind": "enum",
16859
16916
  "locationInModule": {
16860
16917
  "filename": "lib/storage-parameter.ts",
16861
- "line": 65
16918
+ "line": 67
16862
16919
  },
16863
16920
  "members": [
16864
16921
  {
@@ -16927,7 +16984,7 @@
16927
16984
  "kind": "enum",
16928
16985
  "locationInModule": {
16929
16986
  "filename": "lib/storage-parameter.ts",
16930
- "line": 200
16987
+ "line": 202
16931
16988
  },
16932
16989
  "members": [
16933
16990
  {
@@ -17148,7 +17205,7 @@
17148
17205
  "kind": "class",
17149
17206
  "locationInModule": {
17150
17207
  "filename": "lib/partition-projection.ts",
17151
- "line": 230
17208
+ "line": 269
17152
17209
  },
17153
17210
  "methods": [
17154
17211
  {
@@ -17158,7 +17215,7 @@
17158
17215
  },
17159
17216
  "locationInModule": {
17160
17217
  "filename": "lib/partition-projection.ts",
17161
- "line": 288
17218
+ "line": 327
17162
17219
  },
17163
17220
  "name": "date",
17164
17221
  "parameters": [
@@ -17183,7 +17240,7 @@
17183
17240
  },
17184
17241
  "locationInModule": {
17185
17242
  "filename": "lib/partition-projection.ts",
17186
- "line": 373
17243
+ "line": 424
17187
17244
  },
17188
17245
  "name": "enum",
17189
17246
  "parameters": [
@@ -17210,7 +17267,7 @@
17210
17267
  },
17211
17268
  "locationInModule": {
17212
17269
  "filename": "lib/partition-projection.ts",
17213
- "line": 413
17270
+ "line": 464
17214
17271
  },
17215
17272
  "name": "injected",
17216
17273
  "returns": {
@@ -17227,7 +17284,7 @@
17227
17284
  },
17228
17285
  "locationInModule": {
17229
17286
  "filename": "lib/partition-projection.ts",
17230
- "line": 234
17287
+ "line": 273
17231
17288
  },
17232
17289
  "name": "integer",
17233
17290
  "parameters": [
@@ -17256,7 +17313,7 @@
17256
17313
  "immutable": true,
17257
17314
  "locationInModule": {
17258
17315
  "filename": "lib/partition-projection.ts",
17259
- "line": 422
17316
+ "line": 473
17260
17317
  },
17261
17318
  "name": "type",
17262
17319
  "type": {
@@ -17272,7 +17329,7 @@
17272
17329
  "immutable": true,
17273
17330
  "locationInModule": {
17274
17331
  "filename": "lib/partition-projection.ts",
17275
- "line": 436
17332
+ "line": 487
17276
17333
  },
17277
17334
  "name": "dateRange",
17278
17335
  "optional": true,
@@ -17293,7 +17350,7 @@
17293
17350
  "immutable": true,
17294
17351
  "locationInModule": {
17295
17352
  "filename": "lib/partition-projection.ts",
17296
- "line": 446
17353
+ "line": 497
17297
17354
  },
17298
17355
  "name": "digits",
17299
17356
  "optional": true,
@@ -17309,7 +17366,7 @@
17309
17366
  "immutable": true,
17310
17367
  "locationInModule": {
17311
17368
  "filename": "lib/partition-projection.ts",
17312
- "line": 451
17369
+ "line": 502
17313
17370
  },
17314
17371
  "name": "format",
17315
17372
  "optional": true,
@@ -17326,7 +17383,7 @@
17326
17383
  "immutable": true,
17327
17384
  "locationInModule": {
17328
17385
  "filename": "lib/partition-projection.ts",
17329
- "line": 429
17386
+ "line": 480
17330
17387
  },
17331
17388
  "name": "integerRange",
17332
17389
  "optional": true,
@@ -17347,7 +17404,7 @@
17347
17404
  "immutable": true,
17348
17405
  "locationInModule": {
17349
17406
  "filename": "lib/partition-projection.ts",
17350
- "line": 441
17407
+ "line": 492
17351
17408
  },
17352
17409
  "name": "interval",
17353
17410
  "optional": true,
@@ -17363,7 +17420,7 @@
17363
17420
  "immutable": true,
17364
17421
  "locationInModule": {
17365
17422
  "filename": "lib/partition-projection.ts",
17366
- "line": 456
17423
+ "line": 507
17367
17424
  },
17368
17425
  "name": "intervalUnit",
17369
17426
  "optional": true,
@@ -17379,7 +17436,7 @@
17379
17436
  "immutable": true,
17380
17437
  "locationInModule": {
17381
17438
  "filename": "lib/partition-projection.ts",
17382
- "line": 461
17439
+ "line": 512
17383
17440
  },
17384
17441
  "name": "values",
17385
17442
  "optional": true,
@@ -19011,7 +19068,7 @@
19011
19068
  },
19012
19069
  "stability": "experimental",
19013
19070
  "summary": "A Glue table that targets a S3 dataset.",
19014
- "example": "declare 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});"
19071
+ "example": "declare 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});"
19015
19072
  },
19016
19073
  "fqn": "@aws-cdk/aws-glue-alpha.S3Table",
19017
19074
  "initializer": {
@@ -19020,7 +19077,7 @@
19020
19077
  },
19021
19078
  "locationInModule": {
19022
19079
  "filename": "lib/s3-table.ts",
19023
- "line": 134
19080
+ "line": 204
19024
19081
  },
19025
19082
  "parameters": [
19026
19083
  {
@@ -19046,7 +19103,7 @@
19046
19103
  "kind": "class",
19047
19104
  "locationInModule": {
19048
19105
  "filename": "lib/s3-table.ts",
19049
- "line": 93
19106
+ "line": 165
19050
19107
  },
19051
19108
  "methods": [
19052
19109
  {
@@ -19055,7 +19112,7 @@
19055
19112
  },
19056
19113
  "locationInModule": {
19057
19114
  "filename": "lib/s3-table.ts",
19058
- "line": 260
19115
+ "line": 333
19059
19116
  },
19060
19117
  "name": "generateS3PrefixForGrant",
19061
19118
  "protected": true,
@@ -19073,7 +19130,7 @@
19073
19130
  },
19074
19131
  "locationInModule": {
19075
19132
  "filename": "lib/s3-table.ts",
19076
- "line": 224
19133
+ "line": 297
19077
19134
  },
19078
19135
  "name": "grantRead",
19079
19136
  "overrides": "@aws-cdk/aws-glue-alpha.TableBase",
@@ -19102,7 +19159,7 @@
19102
19159
  },
19103
19160
  "locationInModule": {
19104
19161
  "filename": "lib/s3-table.ts",
19105
- "line": 252
19162
+ "line": 325
19106
19163
  },
19107
19164
  "name": "grantReadWrite",
19108
19165
  "overrides": "@aws-cdk/aws-glue-alpha.TableBase",
@@ -19131,7 +19188,7 @@
19131
19188
  },
19132
19189
  "locationInModule": {
19133
19190
  "filename": "lib/s3-table.ts",
19134
- "line": 238
19191
+ "line": 311
19135
19192
  },
19136
19193
  "name": "grantWrite",
19137
19194
  "overrides": "@aws-cdk/aws-glue-alpha.TableBase",
@@ -19164,7 +19221,7 @@
19164
19221
  "immutable": true,
19165
19222
  "locationInModule": {
19166
19223
  "filename": "lib/s3-table.ts",
19167
- "line": 96
19224
+ "line": 168
19168
19225
  },
19169
19226
  "name": "PROPERTY_INJECTION_ID",
19170
19227
  "static": true,
@@ -19180,28 +19237,13 @@
19180
19237
  "immutable": true,
19181
19238
  "locationInModule": {
19182
19239
  "filename": "lib/s3-table.ts",
19183
- "line": 103
19240
+ "line": 175
19184
19241
  },
19185
19242
  "name": "bucket",
19186
19243
  "type": {
19187
19244
  "fqn": "aws-cdk-lib.aws_s3.IBucket"
19188
19245
  }
19189
19246
  },
19190
- {
19191
- "docs": {
19192
- "stability": "experimental",
19193
- "summary": "The type of encryption enabled for the table."
19194
- },
19195
- "immutable": true,
19196
- "locationInModule": {
19197
- "filename": "lib/s3-table.ts",
19198
- "line": 113
19199
- },
19200
- "name": "encryption",
19201
- "type": {
19202
- "fqn": "@aws-cdk/aws-glue-alpha.TableEncryption"
19203
- }
19204
- },
19205
19247
  {
19206
19248
  "docs": {
19207
19249
  "stability": "experimental",
@@ -19210,7 +19252,7 @@
19210
19252
  "immutable": true,
19211
19253
  "locationInModule": {
19212
19254
  "filename": "lib/s3-table.ts",
19213
- "line": 108
19255
+ "line": 180
19214
19256
  },
19215
19257
  "name": "s3Prefix",
19216
19258
  "type": {
@@ -19225,7 +19267,7 @@
19225
19267
  "immutable": true,
19226
19268
  "locationInModule": {
19227
19269
  "filename": "lib/s3-table.ts",
19228
- "line": 209
19270
+ "line": 282
19229
19271
  },
19230
19272
  "name": "tableArn",
19231
19273
  "overrides": "@aws-cdk/aws-glue-alpha.TableBase",
@@ -19241,7 +19283,7 @@
19241
19283
  "immutable": true,
19242
19284
  "locationInModule": {
19243
19285
  "filename": "lib/s3-table.ts",
19244
- "line": 201
19286
+ "line": 274
19245
19287
  },
19246
19288
  "name": "tableName",
19247
19289
  "overrides": "@aws-cdk/aws-glue-alpha.TableBase",
@@ -19256,7 +19298,7 @@
19256
19298
  "immutable": true,
19257
19299
  "locationInModule": {
19258
19300
  "filename": "lib/s3-table.ts",
19259
- "line": 125
19301
+ "line": 195
19260
19302
  },
19261
19303
  "name": "tableResource",
19262
19304
  "overrides": "@aws-cdk/aws-glue-alpha.TableBase",
@@ -19267,16 +19309,16 @@
19267
19309
  },
19268
19310
  {
19269
19311
  "docs": {
19270
- "remarks": "Otherwise, `undefined`.",
19312
+ "remarks": "For server-side (bucket) encryption, read `bucket.encryptionKey` instead.",
19271
19313
  "stability": "experimental",
19272
- "summary": "The KMS key used to secure the data if `encryption` is set to `CSE-KMS` or `SSE-KMS`."
19314
+ "summary": "The KMS key used for client-side encryption of the table's data, if `clientSideEncryption` was configured. Otherwise, `undefined`."
19273
19315
  },
19274
19316
  "immutable": true,
19275
19317
  "locationInModule": {
19276
19318
  "filename": "lib/s3-table.ts",
19277
- "line": 118
19319
+ "line": 188
19278
19320
  },
19279
- "name": "encryptionKey",
19321
+ "name": "clientSideEncryptionKey",
19280
19322
  "optional": true,
19281
19323
  "type": {
19282
19324
  "fqn": "aws-cdk-lib.aws_kms.IKey"
@@ -19290,7 +19332,7 @@
19290
19332
  "immutable": true,
19291
19333
  "locationInModule": {
19292
19334
  "filename": "lib/s3-table.ts",
19293
- "line": 123
19335
+ "line": 193
19294
19336
  },
19295
19337
  "name": "partitionIndexes",
19296
19338
  "optional": true,
@@ -19307,6 +19349,92 @@
19307
19349
  ],
19308
19350
  "symbolId": "lib/s3-table:S3Table"
19309
19351
  },
19352
+ "@aws-cdk/aws-glue-alpha.S3TableEncryption": {
19353
+ "assembly": "@aws-cdk/aws-glue-alpha",
19354
+ "docs": {
19355
+ "remarks": "Applies only when the table manages its own bucket (via\n`S3TableStorage.managedBucket`). An existing bucket keeps whatever encryption\nit was created with.",
19356
+ "stability": "experimental",
19357
+ "summary": "Server-side encryption for the S3 bucket that a managed `S3Table` creates.",
19358
+ "example": "declare 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});",
19359
+ "custom": {
19360
+ "exampleMetadata": "infused"
19361
+ }
19362
+ },
19363
+ "fqn": "@aws-cdk/aws-glue-alpha.S3TableEncryption",
19364
+ "kind": "class",
19365
+ "locationInModule": {
19366
+ "filename": "lib/s3-table.ts",
19367
+ "line": 21
19368
+ },
19369
+ "methods": [
19370
+ {
19371
+ "docs": {
19372
+ "stability": "experimental",
19373
+ "summary": "Server-side encryption (SSE-KMS) with an AWS KMS key managed by the account owner."
19374
+ },
19375
+ "locationInModule": {
19376
+ "filename": "lib/s3-table.ts",
19377
+ "line": 34
19378
+ },
19379
+ "name": "kms",
19380
+ "parameters": [
19381
+ {
19382
+ "docs": {
19383
+ "remarks": "A key is created if one is not provided.",
19384
+ "summary": "the KMS key used to encrypt the data."
19385
+ },
19386
+ "name": "key",
19387
+ "optional": true,
19388
+ "type": {
19389
+ "fqn": "aws-cdk-lib.aws_kms.IKey"
19390
+ }
19391
+ }
19392
+ ],
19393
+ "returns": {
19394
+ "type": {
19395
+ "fqn": "@aws-cdk/aws-glue-alpha.S3TableEncryption"
19396
+ }
19397
+ },
19398
+ "static": true
19399
+ },
19400
+ {
19401
+ "docs": {
19402
+ "stability": "experimental",
19403
+ "summary": "Server-side encryption (SSE-KMS) with an AWS KMS key managed by the KMS service."
19404
+ },
19405
+ "locationInModule": {
19406
+ "filename": "lib/s3-table.ts",
19407
+ "line": 41
19408
+ },
19409
+ "name": "kmsManaged",
19410
+ "returns": {
19411
+ "type": {
19412
+ "fqn": "@aws-cdk/aws-glue-alpha.S3TableEncryption"
19413
+ }
19414
+ },
19415
+ "static": true
19416
+ },
19417
+ {
19418
+ "docs": {
19419
+ "stability": "experimental",
19420
+ "summary": "Server-side encryption (SSE-S3) with an Amazon S3-managed key."
19421
+ },
19422
+ "locationInModule": {
19423
+ "filename": "lib/s3-table.ts",
19424
+ "line": 25
19425
+ },
19426
+ "name": "s3Managed",
19427
+ "returns": {
19428
+ "type": {
19429
+ "fqn": "@aws-cdk/aws-glue-alpha.S3TableEncryption"
19430
+ }
19431
+ },
19432
+ "static": true
19433
+ }
19434
+ ],
19435
+ "name": "S3TableEncryption",
19436
+ "symbolId": "lib/s3-table:S3TableEncryption"
19437
+ },
19310
19438
  "@aws-cdk/aws-glue-alpha.S3TableProps": {
19311
19439
  "assembly": "@aws-cdk/aws-glue-alpha",
19312
19440
  "datatype": true,
@@ -19324,87 +19452,149 @@
19324
19452
  "kind": "interface",
19325
19453
  "locationInModule": {
19326
19454
  "filename": "lib/s3-table.ts",
19327
- "line": 47
19455
+ "line": 130
19328
19456
  },
19329
19457
  "name": "S3TableProps",
19330
19458
  "properties": [
19331
19459
  {
19332
19460
  "abstract": true,
19333
19461
  "docs": {
19334
- "default": "one is created for you",
19462
+ "default": "- no client-side encryption",
19463
+ "remarks": "Independent of the bucket's server-side encryption, and valid whether the\nbucket is managed or provided.",
19335
19464
  "stability": "experimental",
19336
- "summary": "S3 bucket in which to store data."
19465
+ "summary": "Client-side encryption (CSE-KMS) for the table's data."
19337
19466
  },
19338
19467
  "immutable": true,
19339
19468
  "locationInModule": {
19340
19469
  "filename": "lib/s3-table.ts",
19341
- "line": 53
19470
+ "line": 158
19342
19471
  },
19343
- "name": "bucket",
19472
+ "name": "clientSideEncryption",
19344
19473
  "optional": true,
19345
19474
  "type": {
19346
- "fqn": "aws-cdk-lib.aws_s3.IBucket"
19475
+ "fqn": "@aws-cdk/aws-glue-alpha.TableClientSideEncryption"
19347
19476
  }
19348
19477
  },
19349
19478
  {
19350
19479
  "abstract": true,
19351
19480
  "docs": {
19352
- "default": "BucketEncryption.S3_MANAGED",
19353
- "remarks": "You can only provide this option if you are not explicitly passing in a bucket.\n\nIf you choose `SSE-KMS`, you *can* provide an un-managed KMS key with `encryptionKey`.\nIf you choose `CSE-KMS`, you *may* provide an un-managed KMS key with `encryptionKey`;\none is created automatically if omitted.",
19481
+ "default": "- No prefix. The data will be stored under the root of the bucket.",
19482
+ "remarks": "When the table shares a bucket with other tables or consumers, set this so\nthat the `grant*` methods scope S3 access to this table's data. Without a\nprefix, those grants cover the entire bucket.",
19354
19483
  "stability": "experimental",
19355
- "summary": "The kind of encryption to secure the data with."
19484
+ "summary": "S3 prefix under which table objects are stored."
19356
19485
  },
19357
19486
  "immutable": true,
19358
19487
  "locationInModule": {
19359
19488
  "filename": "lib/s3-table.ts",
19360
- "line": 77
19489
+ "line": 148
19361
19490
  },
19362
- "name": "encryption",
19491
+ "name": "s3Prefix",
19363
19492
  "optional": true,
19364
19493
  "type": {
19365
- "fqn": "@aws-cdk/aws-glue-alpha.TableEncryption"
19494
+ "primitive": "string"
19366
19495
  }
19367
19496
  },
19368
19497
  {
19369
19498
  "abstract": true,
19370
19499
  "docs": {
19371
- "default": "key is managed by KMS.",
19372
- "remarks": "The `encryption` property must be `SSE-KMS` or `CSE-KMS`.",
19500
+ "default": "- a managed bucket with S3-managed (SSE-S3) encryption",
19373
19501
  "stability": "experimental",
19374
- "summary": "External KMS key to use for bucket encryption."
19502
+ "summary": "Where the table's data is stored: a bucket created and managed by the table, or an existing bucket you provide."
19375
19503
  },
19376
19504
  "immutable": true,
19377
19505
  "locationInModule": {
19378
19506
  "filename": "lib/s3-table.ts",
19379
- "line": 86
19507
+ "line": 137
19380
19508
  },
19381
- "name": "encryptionKey",
19509
+ "name": "storage",
19382
19510
  "optional": true,
19383
19511
  "type": {
19384
- "fqn": "aws-cdk-lib.aws_kms.IKey"
19512
+ "fqn": "@aws-cdk/aws-glue-alpha.S3TableStorage"
19385
19513
  }
19386
- },
19387
- {
19388
- "abstract": true,
19514
+ }
19515
+ ],
19516
+ "symbolId": "lib/s3-table:S3TableProps"
19517
+ },
19518
+ "@aws-cdk/aws-glue-alpha.S3TableStorage": {
19519
+ "assembly": "@aws-cdk/aws-glue-alpha",
19520
+ "docs": {
19521
+ "remarks": "The two paths are mutually exclusive: a managed bucket may specify its\nserver-side encryption, while an existing bucket keeps its own encryption — so\nan encryption choice can never be paired with a bring-your-own bucket.",
19522
+ "stability": "experimental",
19523
+ "summary": "Where an `S3Table` stores its data.",
19524
+ "example": "declare 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});",
19525
+ "custom": {
19526
+ "exampleMetadata": "infused"
19527
+ }
19528
+ },
19529
+ "fqn": "@aws-cdk/aws-glue-alpha.S3TableStorage",
19530
+ "kind": "class",
19531
+ "locationInModule": {
19532
+ "filename": "lib/s3-table.ts",
19533
+ "line": 64
19534
+ },
19535
+ "methods": [
19536
+ {
19389
19537
  "docs": {
19390
- "default": "- No prefix. The data will be stored under the root of the bucket.",
19391
- "remarks": "When the table shares a bucket with other tables or consumers, set this so\nthat the `grant*` methods scope S3 access to this table's data. Without a\nprefix, those grants cover the entire bucket.",
19538
+ "remarks": "The bucket can be one you don't own, imported with\n`Bucket.fromBucketArn()` or `Bucket.fromBucketAttributes()`. If that bucket\nis KMS-encrypted, import it with `Bucket.fromBucketAttributes()` and supply\nthe `encryptionKey` attribute. Otherwise, CDK has no reference to the key,\nwhich means that `S3Table.grantRead()`/`grantWrite()` will correctly grant\nS3 access but silently skip the KMS permissions on the key. As a consequence,\nat runtime, reads and writes will fail with access denied on the key.",
19392
19539
  "stability": "experimental",
19393
- "summary": "S3 prefix under which table objects are stored."
19540
+ "summary": "Store the table's data in an existing bucket. CDK does not manage the bucket's encryption."
19394
19541
  },
19395
- "immutable": true,
19396
19542
  "locationInModule": {
19397
19543
  "filename": "lib/s3-table.ts",
19398
- "line": 64
19544
+ "line": 89
19399
19545
  },
19400
- "name": "s3Prefix",
19401
- "optional": true,
19402
- "type": {
19403
- "primitive": "string"
19404
- }
19546
+ "name": "fromBucket",
19547
+ "parameters": [
19548
+ {
19549
+ "docs": {
19550
+ "summary": "the bucket that holds the table's data."
19551
+ },
19552
+ "name": "bucket",
19553
+ "type": {
19554
+ "fqn": "aws-cdk-lib.aws_s3.IBucket"
19555
+ }
19556
+ }
19557
+ ],
19558
+ "returns": {
19559
+ "type": {
19560
+ "fqn": "@aws-cdk/aws-glue-alpha.S3TableStorage"
19561
+ }
19562
+ },
19563
+ "static": true
19564
+ },
19565
+ {
19566
+ "docs": {
19567
+ "default": "- S3-managed (SSE-S3) encryption",
19568
+ "stability": "experimental",
19569
+ "summary": "Store the table's data in a bucket created and managed by the table."
19570
+ },
19571
+ "locationInModule": {
19572
+ "filename": "lib/s3-table.ts",
19573
+ "line": 71
19574
+ },
19575
+ "name": "managedBucket",
19576
+ "parameters": [
19577
+ {
19578
+ "docs": {
19579
+ "summary": "the server-side encryption for the created bucket."
19580
+ },
19581
+ "name": "encryption",
19582
+ "optional": true,
19583
+ "type": {
19584
+ "fqn": "@aws-cdk/aws-glue-alpha.S3TableEncryption"
19585
+ }
19586
+ }
19587
+ ],
19588
+ "returns": {
19589
+ "type": {
19590
+ "fqn": "@aws-cdk/aws-glue-alpha.S3TableStorage"
19591
+ }
19592
+ },
19593
+ "static": true
19405
19594
  }
19406
19595
  ],
19407
- "symbolId": "lib/s3-table:S3TableProps"
19596
+ "name": "S3TableStorage",
19597
+ "symbolId": "lib/s3-table:S3TableStorage"
19408
19598
  },
19409
19599
  "@aws-cdk/aws-glue-alpha.ScalaSparkEtlJob": {
19410
19600
  "assembly": "@aws-cdk/aws-glue-alpha",
@@ -20116,7 +20306,7 @@
20116
20306
  "docs": {
20117
20307
  "see": "https://docs.aws.amazon.com/athena/latest/ug/data-types.html",
20118
20308
  "stability": "experimental",
20119
- "example": "declare 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});",
20309
+ "example": "declare 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});",
20120
20310
  "custom": {
20121
20311
  "exampleMetadata": "infused"
20122
20312
  }
@@ -20130,7 +20320,7 @@
20130
20320
  "kind": "class",
20131
20321
  "locationInModule": {
20132
20322
  "filename": "lib/schema.ts",
20133
- "line": 44
20323
+ "line": 62
20134
20324
  },
20135
20325
  "methods": [
20136
20326
  {
@@ -20140,7 +20330,7 @@
20140
20330
  },
20141
20331
  "locationInModule": {
20142
20332
  "filename": "lib/schema.ts",
20143
- "line": 177
20333
+ "line": 158
20144
20334
  },
20145
20335
  "name": "array",
20146
20336
  "parameters": [
@@ -20168,7 +20358,7 @@
20168
20358
  },
20169
20359
  "locationInModule": {
20170
20360
  "filename": "lib/schema.ts",
20171
- "line": 141
20361
+ "line": 128
20172
20362
  },
20173
20363
  "name": "char",
20174
20364
  "parameters": [
@@ -20191,19 +20381,59 @@
20191
20381
  },
20192
20382
  {
20193
20383
  "docs": {
20194
- "remarks": "TODO: Bounds",
20384
+ "remarks": "Escape hatch for column types the other `Schema` factories don't model. The\n`inputString` is emitted verbatim and is not validated.",
20385
+ "stability": "experimental",
20386
+ "summary": "Creates a custom type from a raw Glue input string."
20387
+ },
20388
+ "locationInModule": {
20389
+ "filename": "lib/schema.ts",
20390
+ "line": 195
20391
+ },
20392
+ "name": "custom",
20393
+ "parameters": [
20394
+ {
20395
+ "docs": {
20396
+ "summary": "the Glue input string for the type (for example `interval_day_to_second`)."
20397
+ },
20398
+ "name": "inputString",
20399
+ "type": {
20400
+ "primitive": "string"
20401
+ }
20402
+ },
20403
+ {
20404
+ "docs": {
20405
+ "remarks": "Defaults to true.",
20406
+ "summary": "whether the type is a primitive (non-nested) data type."
20407
+ },
20408
+ "name": "isPrimitive",
20409
+ "optional": true,
20410
+ "type": {
20411
+ "primitive": "boolean"
20412
+ }
20413
+ }
20414
+ ],
20415
+ "returns": {
20416
+ "type": {
20417
+ "fqn": "@aws-cdk/aws-glue-alpha.Type"
20418
+ }
20419
+ },
20420
+ "static": true
20421
+ },
20422
+ {
20423
+ "docs": {
20424
+ "see": "https://docs.aws.amazon.com/athena/latest/ug/data-types.html",
20195
20425
  "stability": "experimental",
20196
20426
  "summary": "Creates a decimal type."
20197
20427
  },
20198
20428
  "locationInModule": {
20199
20429
  "filename": "lib/schema.ts",
20200
- "line": 129
20430
+ "line": 113
20201
20431
  },
20202
20432
  "name": "decimal",
20203
20433
  "parameters": [
20204
20434
  {
20205
20435
  "docs": {
20206
- "summary": "the total number of digits."
20436
+ "summary": "the total number of digits, between 1 and 38."
20207
20437
  },
20208
20438
  "name": "precision",
20209
20439
  "type": {
@@ -20212,7 +20442,8 @@
20212
20442
  },
20213
20443
  {
20214
20444
  "docs": {
20215
- "summary": "the number of digits in fractional part, the default is 0."
20445
+ "remarks": "the default is 0",
20446
+ "summary": "the number of digits in the fractional part, between 0 and 38;"
20216
20447
  },
20217
20448
  "name": "scale",
20218
20449
  "optional": true,
@@ -20235,7 +20466,7 @@
20235
20466
  },
20236
20467
  "locationInModule": {
20237
20468
  "filename": "lib/schema.ts",
20238
- "line": 190
20469
+ "line": 168
20239
20470
  },
20240
20471
  "name": "map",
20241
20472
  "parameters": [
@@ -20272,7 +20503,7 @@
20272
20503
  },
20273
20504
  "locationInModule": {
20274
20505
  "filename": "lib/schema.ts",
20275
- "line": 205
20506
+ "line": 180
20276
20507
  },
20277
20508
  "name": "struct",
20278
20509
  "parameters": [
@@ -20305,7 +20536,7 @@
20305
20536
  },
20306
20537
  "locationInModule": {
20307
20538
  "filename": "lib/schema.ts",
20308
- "line": 159
20539
+ "line": 143
20309
20540
  },
20310
20541
  "name": "varchar",
20311
20542
  "parameters": [
@@ -20338,7 +20569,7 @@
20338
20569
  "immutable": true,
20339
20570
  "locationInModule": {
20340
20571
  "filename": "lib/schema.ts",
20341
- "line": 58
20572
+ "line": 70
20342
20573
  },
20343
20574
  "name": "BIG_INT",
20344
20575
  "static": true,
@@ -20354,7 +20585,7 @@
20354
20585
  "immutable": true,
20355
20586
  "locationInModule": {
20356
20587
  "filename": "lib/schema.ts",
20357
- "line": 50
20588
+ "line": 65
20358
20589
  },
20359
20590
  "name": "BINARY",
20360
20591
  "static": true,
@@ -20370,7 +20601,7 @@
20370
20601
  "immutable": true,
20371
20602
  "locationInModule": {
20372
20603
  "filename": "lib/schema.ts",
20373
- "line": 45
20604
+ "line": 63
20374
20605
  },
20375
20606
  "name": "BOOLEAN",
20376
20607
  "static": true,
@@ -20387,7 +20618,7 @@
20387
20618
  "immutable": true,
20388
20619
  "locationInModule": {
20389
20620
  "filename": "lib/schema.ts",
20390
- "line": 100
20621
+ "line": 94
20391
20622
  },
20392
20623
  "name": "DATE",
20393
20624
  "static": true,
@@ -20403,7 +20634,7 @@
20403
20634
  "immutable": true,
20404
20635
  "locationInModule": {
20405
20636
  "filename": "lib/schema.ts",
20406
- "line": 63
20637
+ "line": 72
20407
20638
  },
20408
20639
  "name": "DOUBLE",
20409
20640
  "static": true,
@@ -20419,7 +20650,7 @@
20419
20650
  "immutable": true,
20420
20651
  "locationInModule": {
20421
20652
  "filename": "lib/schema.ts",
20422
- "line": 68
20653
+ "line": 74
20423
20654
  },
20424
20655
  "name": "FLOAT",
20425
20656
  "static": true,
@@ -20436,7 +20667,7 @@
20436
20667
  "immutable": true,
20437
20668
  "locationInModule": {
20438
20669
  "filename": "lib/schema.ts",
20439
- "line": 76
20670
+ "line": 79
20440
20671
  },
20441
20672
  "name": "INTEGER",
20442
20673
  "static": true,
@@ -20470,7 +20701,7 @@
20470
20701
  "immutable": true,
20471
20702
  "locationInModule": {
20472
20703
  "filename": "lib/schema.ts",
20473
- "line": 116
20704
+ "line": 104
20474
20705
  },
20475
20706
  "name": "STRING",
20476
20707
  "static": true,
@@ -20487,7 +20718,7 @@
20487
20718
  "immutable": true,
20488
20719
  "locationInModule": {
20489
20720
  "filename": "lib/schema.ts",
20490
- "line": 108
20721
+ "line": 99
20491
20722
  },
20492
20723
  "name": "TIMESTAMP",
20493
20724
  "static": true,
@@ -20504,7 +20735,7 @@
20504
20735
  "immutable": true,
20505
20736
  "locationInModule": {
20506
20737
  "filename": "lib/schema.ts",
20507
- "line": 92
20738
+ "line": 89
20508
20739
  },
20509
20740
  "name": "TINY_INT",
20510
20741
  "static": true,
@@ -21545,7 +21776,7 @@
21545
21776
  },
21546
21777
  "locationInModule": {
21547
21778
  "filename": "lib/storage-parameter.ts",
21548
- "line": 422
21779
+ "line": 434
21549
21780
  },
21550
21781
  "parameters": [
21551
21782
  {
@@ -21566,7 +21797,7 @@
21566
21797
  "kind": "class",
21567
21798
  "locationInModule": {
21568
21799
  "filename": "lib/storage-parameter.ts",
21569
- "line": 303
21800
+ "line": 305
21570
21801
  },
21571
21802
  "methods": [
21572
21803
  {
@@ -21577,7 +21808,7 @@
21577
21808
  },
21578
21809
  "locationInModule": {
21579
21810
  "filename": "lib/storage-parameter.ts",
21580
- "line": 363
21811
+ "line": 365
21581
21812
  },
21582
21813
  "name": "columnCountMismatchHandling",
21583
21814
  "parameters": [
@@ -21603,7 +21834,7 @@
21603
21834
  },
21604
21835
  "locationInModule": {
21605
21836
  "filename": "lib/storage-parameter.ts",
21606
- "line": 321
21837
+ "line": 323
21607
21838
  },
21608
21839
  "name": "compressionType",
21609
21840
  "parameters": [
@@ -21628,7 +21859,7 @@
21628
21859
  },
21629
21860
  "locationInModule": {
21630
21861
  "filename": "lib/storage-parameter.ts",
21631
- "line": 418
21862
+ "line": 430
21632
21863
  },
21633
21864
  "name": "custom",
21634
21865
  "parameters": [
@@ -21647,7 +21878,7 @@
21647
21878
  },
21648
21879
  "name": "value",
21649
21880
  "type": {
21650
- "primitive": "any"
21881
+ "primitive": "string"
21651
21882
  }
21652
21883
  }
21653
21884
  ],
@@ -21665,7 +21896,7 @@
21665
21896
  },
21666
21897
  "locationInModule": {
21667
21898
  "filename": "lib/storage-parameter.ts",
21668
- "line": 314
21899
+ "line": 316
21669
21900
  },
21670
21901
  "name": "dataCleansingEnabled",
21671
21902
  "parameters": [
@@ -21690,7 +21921,7 @@
21690
21921
  },
21691
21922
  "locationInModule": {
21692
21923
  "filename": "lib/storage-parameter.ts",
21693
- "line": 328
21924
+ "line": 330
21694
21925
  },
21695
21926
  "name": "invalidCharHandling",
21696
21927
  "parameters": [
@@ -21715,7 +21946,7 @@
21715
21946
  },
21716
21947
  "locationInModule": {
21717
21948
  "filename": "lib/storage-parameter.ts",
21718
- "line": 342
21949
+ "line": 344
21719
21950
  },
21720
21951
  "name": "numericOverflowHandling",
21721
21952
  "parameters": [
@@ -21741,7 +21972,7 @@
21741
21972
  },
21742
21973
  "locationInModule": {
21743
21974
  "filename": "lib/storage-parameter.ts",
21744
- "line": 370
21975
+ "line": 372
21745
21976
  },
21746
21977
  "name": "numRows",
21747
21978
  "parameters": [
@@ -21768,7 +21999,7 @@
21768
21999
  },
21769
22000
  "locationInModule": {
21770
22001
  "filename": "lib/storage-parameter.ts",
21771
- "line": 386
22002
+ "line": 388
21772
22003
  },
21773
22004
  "name": "orcSchemaResolution",
21774
22005
  "parameters": [
@@ -21793,7 +22024,7 @@
21793
22024
  },
21794
22025
  "locationInModule": {
21795
22026
  "filename": "lib/storage-parameter.ts",
21796
- "line": 335
22027
+ "line": 337
21797
22028
  },
21798
22029
  "name": "replacementChar",
21799
22030
  "parameters": [
@@ -21818,7 +22049,7 @@
21818
22049
  },
21819
22050
  "locationInModule": {
21820
22051
  "filename": "lib/storage-parameter.ts",
21821
- "line": 377
22052
+ "line": 379
21822
22053
  },
21823
22054
  "name": "serializationNullFormat",
21824
22055
  "parameters": [
@@ -21843,7 +22074,7 @@
21843
22074
  },
21844
22075
  "locationInModule": {
21845
22076
  "filename": "lib/storage-parameter.ts",
21846
- "line": 307
22077
+ "line": 309
21847
22078
  },
21848
22079
  "name": "skipHeaderLineCount",
21849
22080
  "parameters": [
@@ -21869,7 +22100,7 @@
21869
22100
  },
21870
22101
  "locationInModule": {
21871
22102
  "filename": "lib/storage-parameter.ts",
21872
- "line": 349
22103
+ "line": 351
21873
22104
  },
21874
22105
  "name": "surplusBytesHandling",
21875
22106
  "parameters": [
@@ -21895,7 +22126,7 @@
21895
22126
  },
21896
22127
  "locationInModule": {
21897
22128
  "filename": "lib/storage-parameter.ts",
21898
- "line": 356
22129
+ "line": 358
21899
22130
  },
21900
22131
  "name": "surplusCharHandling",
21901
22132
  "parameters": [
@@ -21915,19 +22146,21 @@
21915
22146
  },
21916
22147
  {
21917
22148
  "docs": {
22149
+ "remarks": "Redshift Spectrum accepts either the key's ARN or its bare key ID for the\n`write.kms.key.id` property, and encrypts the written objects with that key;\nthis renders the ARN. To use the S3 bucket's default KMS key instead, set the\nliteral value `auto` via `StorageParameter.custom('write.kms.key.id', 'auto')` —\nthis typed factory cannot express `auto`.",
22150
+ "see": "https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_TABLE.html",
21918
22151
  "stability": "experimental",
21919
- "summary": "You can specify an AWS Key Management Service key to enable Server–Side Encryption (SSE) for Amazon S3 objects."
22152
+ "summary": "Enables server-side encryption (SSE-KMS) with the given AWS KMS key on the files Redshift Spectrum writes for this table (via `CREATE EXTERNAL TABLE AS` or `INSERT`)."
21920
22153
  },
21921
22154
  "locationInModule": {
21922
22155
  "filename": "lib/storage-parameter.ts",
21923
- "line": 409
22156
+ "line": 421
21924
22157
  },
21925
22158
  "name": "writeKmsKeyId",
21926
22159
  "parameters": [
21927
22160
  {
21928
- "name": "value",
22161
+ "name": "key",
21929
22162
  "type": {
21930
- "primitive": "string"
22163
+ "fqn": "aws-cdk-lib.interfaces.aws_kms.IKeyRef"
21931
22164
  }
21932
22165
  }
21933
22166
  ],
@@ -21946,7 +22179,7 @@
21946
22179
  },
21947
22180
  "locationInModule": {
21948
22181
  "filename": "lib/storage-parameter.ts",
21949
- "line": 402
22182
+ "line": 404
21950
22183
  },
21951
22184
  "name": "writeMaxFileSizeMb",
21952
22185
  "parameters": [
@@ -21973,7 +22206,7 @@
21973
22206
  },
21974
22207
  "locationInModule": {
21975
22208
  "filename": "lib/storage-parameter.ts",
21976
- "line": 395
22209
+ "line": 397
21977
22210
  },
21978
22211
  "name": "writeParallel",
21979
22212
  "parameters": [
@@ -22001,7 +22234,7 @@
22001
22234
  "immutable": true,
22002
22235
  "locationInModule": {
22003
22236
  "filename": "lib/storage-parameter.ts",
22004
- "line": 422
22237
+ "line": 434
22005
22238
  },
22006
22239
  "name": "key",
22007
22240
  "type": {
@@ -22015,7 +22248,7 @@
22015
22248
  "immutable": true,
22016
22249
  "locationInModule": {
22017
22250
  "filename": "lib/storage-parameter.ts",
22018
- "line": 422
22251
+ "line": 434
22019
22252
  },
22020
22253
  "name": "value",
22021
22254
  "type": {
@@ -22030,7 +22263,7 @@
22030
22263
  "docs": {
22031
22264
  "stability": "experimental",
22032
22265
  "summary": "The storage parameter keys that are currently known, this list is not exhaustive and other keys may be used.",
22033
- "example": " declare const glueDatabase: glue.IDatabase;\n const table = new glue.Table(this, 'Table', {\n storageParameters: [\n glue.StorageParameter.skipHeaderLineCount(1),\n glue.StorageParameter.compressionType(glue.CompressionType.GZIP),\n glue.StorageParameter.custom('foo', 'bar'), // Will have no effect\n glue.StorageParameter.custom('separatorChar', ','), // Will describe the separator char used in the data\n glue.StorageParameter.custom(glue.StorageParameters.WRITE_PARALLEL, 'off'),\n ],\n // ...\n database: glueDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.CSV,\n });",
22266
+ "example": " declare const glueDatabase: glue.IDatabase;\n const table = new glue.S3Table(this, 'Table', {\n storageParameters: [\n glue.StorageParameter.skipHeaderLineCount(1),\n glue.StorageParameter.compressionType(glue.CompressionType.GZIP),\n glue.StorageParameter.custom('foo', 'bar'), // Will have no effect\n glue.StorageParameter.custom('separatorChar', ','), // Will describe the separator char used in the data\n glue.StorageParameter.custom(glue.StorageParameters.WRITE_PARALLEL, 'off'),\n ],\n // ...\n database: glueDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.CSV,\n });",
22034
22267
  "custom": {
22035
22268
  "exampleMetadata": "infused"
22036
22269
  }
@@ -22039,7 +22272,7 @@
22039
22272
  "kind": "enum",
22040
22273
  "locationInModule": {
22041
22274
  "filename": "lib/storage-parameter.ts",
22042
- "line": 215
22275
+ "line": 217
22043
22276
  },
22044
22277
  "members": [
22045
22278
  {
@@ -22171,7 +22404,7 @@
22171
22404
  "kind": "enum",
22172
22405
  "locationInModule": {
22173
22406
  "filename": "lib/storage-parameter.ts",
22174
- "line": 92
22407
+ "line": 94
22175
22408
  },
22176
22409
  "members": [
22177
22410
  {
@@ -22225,7 +22458,7 @@
22225
22458
  "kind": "enum",
22226
22459
  "locationInModule": {
22227
22460
  "filename": "lib/storage-parameter.ts",
22228
- "line": 124
22461
+ "line": 126
22229
22462
  },
22230
22463
  "members": [
22231
22464
  {
@@ -22267,76 +22500,6 @@
22267
22500
  "name": "SurplusCharHandlingAction",
22268
22501
  "symbolId": "lib/storage-parameter:SurplusCharHandlingAction"
22269
22502
  },
22270
- "@aws-cdk/aws-glue-alpha.Table": {
22271
- "assembly": "@aws-cdk/aws-glue-alpha",
22272
- "base": "@aws-cdk/aws-glue-alpha.S3Table",
22273
- "docs": {
22274
- "deprecated": "Use {@link S3Table } instead.",
22275
- "stability": "deprecated",
22276
- "summary": "A Glue table.",
22277
- "example": " declare const glueDatabase: glue.IDatabase;\n const table = new glue.Table(this, 'Table', {\n storageParameters: [\n glue.StorageParameter.skipHeaderLineCount(1),\n glue.StorageParameter.compressionType(glue.CompressionType.GZIP),\n glue.StorageParameter.custom('foo', 'bar'), // Will have no effect\n glue.StorageParameter.custom('separatorChar', ','), // Will describe the separator char used in the data\n glue.StorageParameter.custom(glue.StorageParameters.WRITE_PARALLEL, 'off'),\n ],\n // ...\n database: glueDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.CSV,\n });",
22278
- "custom": {
22279
- "exampleMetadata": "infused"
22280
- }
22281
- },
22282
- "fqn": "@aws-cdk/aws-glue-alpha.Table",
22283
- "initializer": {
22284
- "docs": {
22285
- "stability": "experimental"
22286
- },
22287
- "locationInModule": {
22288
- "filename": "lib/s3-table.ts",
22289
- "line": 134
22290
- },
22291
- "parameters": [
22292
- {
22293
- "name": "scope",
22294
- "type": {
22295
- "fqn": "constructs.Construct"
22296
- }
22297
- },
22298
- {
22299
- "name": "id",
22300
- "type": {
22301
- "primitive": "string"
22302
- }
22303
- },
22304
- {
22305
- "name": "props",
22306
- "type": {
22307
- "fqn": "@aws-cdk/aws-glue-alpha.S3TableProps"
22308
- }
22309
- }
22310
- ]
22311
- },
22312
- "kind": "class",
22313
- "locationInModule": {
22314
- "filename": "lib/table-deprecated.ts",
22315
- "line": 12
22316
- },
22317
- "name": "Table",
22318
- "properties": [
22319
- {
22320
- "const": true,
22321
- "docs": {
22322
- "stability": "deprecated",
22323
- "summary": "Uniquely identifies this class."
22324
- },
22325
- "immutable": true,
22326
- "locationInModule": {
22327
- "filename": "lib/table-deprecated.ts",
22328
- "line": 15
22329
- },
22330
- "name": "PROPERTY_INJECTION_ID",
22331
- "overrides": "@aws-cdk/aws-glue-alpha.S3Table",
22332
- "static": true,
22333
- "type": {
22334
- "primitive": "string"
22335
- }
22336
- }
22337
- ],
22338
- "symbolId": "lib/table-deprecated:Table"
22339
- },
22340
22503
  "@aws-cdk/aws-glue-alpha.TableAttributes": {
22341
22504
  "assembly": "@aws-cdk/aws-glue-alpha",
22342
22505
  "datatype": true,
@@ -22945,7 +23108,7 @@
22945
23108
  "datatype": true,
22946
23109
  "docs": {
22947
23110
  "stability": "experimental",
22948
- "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';\n\ndeclare const database: glue_alpha.Database;\ndeclare const dataFormat: glue_alpha.DataFormat;\ndeclare const partitionProjectionConfiguration: glue_alpha.PartitionProjectionConfiguration;\ndeclare const storageParameter: glue_alpha.StorageParameter;\nconst tableBaseProps: glue_alpha.TableBaseProps = {\n columns: [{\n name: 'name',\n type: {\n inputString: 'inputString',\n isPrimitive: false,\n },\n\n // the properties below are optional\n comment: 'comment',\n }],\n database: database,\n dataFormat: dataFormat,\n\n // the properties below are optional\n compressed: false,\n description: 'description',\n enablePartitionFiltering: false,\n hasEncryptedData: false,\n parameters: {\n parametersKey: 'parameters',\n },\n partitionIndexes: [{\n keyNames: ['keyNames'],\n\n // the properties below are optional\n indexName: 'indexName',\n }],\n partitionKeys: [{\n name: 'name',\n type: {\n inputString: 'inputString',\n isPrimitive: false,\n },\n\n // the properties below are optional\n comment: 'comment',\n }],\n partitionProjection: {\n partitionProjectionKey: partitionProjectionConfiguration,\n },\n storageParameters: [storageParameter],\n storedAsSubDirectories: false,\n tableName: 'tableName',\n};",
23111
+ "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';\n\ndeclare const database: glue_alpha.Database;\ndeclare const dataFormat: glue_alpha.DataFormat;\ndeclare const partitionProjectionConfiguration: glue_alpha.PartitionProjectionConfiguration;\ndeclare const storageParameter: glue_alpha.StorageParameter;\ndeclare const type: glue_alpha.Type;\nconst tableBaseProps: glue_alpha.TableBaseProps = {\n columns: [{\n name: 'name',\n type: type,\n\n // the properties below are optional\n comment: 'comment',\n }],\n database: database,\n dataFormat: dataFormat,\n\n // the properties below are optional\n compressed: false,\n description: 'description',\n enablePartitionFiltering: false,\n hasEncryptedData: false,\n parameters: {\n parametersKey: 'parameters',\n },\n partitionIndexes: [{\n keyNames: ['keyNames'],\n\n // the properties below are optional\n indexName: 'indexName',\n }],\n partitionKeys: [{\n name: 'name',\n type: type,\n\n // the properties below are optional\n comment: 'comment',\n }],\n partitionProjection: {\n partitionProjectionKey: partitionProjectionConfiguration,\n },\n storageParameters: [storageParameter],\n storedAsSubDirectories: false,\n tableName: 'tableName',\n};",
22949
23112
  "custom": {
22950
23113
  "exampleMetadata": "fixture=_generated"
22951
23114
  }
@@ -23187,7 +23350,7 @@
23187
23350
  "abstract": true,
23188
23351
  "docs": {
23189
23352
  "default": "- The parameter is not defined",
23190
- "example": " declare const glueDatabase: glue.IDatabase;\n const table = new glue.Table(this, 'Table', {\n storageParameters: [\n glue.StorageParameter.skipHeaderLineCount(1),\n glue.StorageParameter.compressionType(glue.CompressionType.GZIP),\n glue.StorageParameter.custom('foo', 'bar'), // Will have no effect\n glue.StorageParameter.custom('separatorChar', ','), // Will describe the separator char used in the data\n glue.StorageParameter.custom(glue.StorageParameters.WRITE_PARALLEL, 'off'),\n ],\n // ...\n database: glueDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.CSV,\n });",
23353
+ "example": " declare const glueDatabase: glue.IDatabase;\n const table = new glue.S3Table(this, 'Table', {\n storageParameters: [\n glue.StorageParameter.skipHeaderLineCount(1),\n glue.StorageParameter.compressionType(glue.CompressionType.GZIP),\n glue.StorageParameter.custom('foo', 'bar'), // Will have no effect\n glue.StorageParameter.custom('separatorChar', ','), // Will describe the separator char used in the data\n glue.StorageParameter.custom(glue.StorageParameters.WRITE_PARALLEL, 'off'),\n ],\n // ...\n database: glueDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.CSV,\n });",
23191
23354
  "remarks": "These properties help describe the format of the data that is stored within the crawled data sources.\n\nThe key/value pairs that are allowed to be submitted are not limited, however their functionality is not guaranteed.\n\nSome keys will be auto-populated by glue crawlers, however, you can override them by specifying the key and value in this property.",
23192
23355
  "see": "https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_TABLE.html#r_CREATE_EXTERNAL_TABLE-parameters - under _\"TABLE PROPERTIES\"_",
23193
23356
  "stability": "experimental",
@@ -23248,80 +23411,57 @@
23248
23411
  ],
23249
23412
  "symbolId": "lib/table-base:TableBaseProps"
23250
23413
  },
23251
- "@aws-cdk/aws-glue-alpha.TableEncryption": {
23414
+ "@aws-cdk/aws-glue-alpha.TableClientSideEncryption": {
23252
23415
  "assembly": "@aws-cdk/aws-glue-alpha",
23253
23416
  "docs": {
23254
- "see": "https://docs.aws.amazon.com/athena/latest/ug/encryption.html",
23417
+ "remarks": "Independent of the bucket's server-side encryption and of who owns the bucket:\nthe data is encrypted by the client before it is written to S3. When set, the\n`grant*` methods also grant the relevant KMS permissions on the key.",
23255
23418
  "stability": "experimental",
23256
- "summary": "Encryption options for a Table.",
23257
- "example": "declare const myDatabase: glue.Database;\nnew glue.S3Table(this, 'MyTable', {\n encryption: glue.TableEncryption.S3_MANAGED,\n // ...\n database: myDatabase,\n columns: [{\n name: 'col1',\n type: glue.Schema.STRING,\n }],\n dataFormat: glue.DataFormat.JSON,\n});",
23419
+ "summary": "Client-side encryption for an `S3Table`'s data.",
23420
+ "example": "declare 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});",
23258
23421
  "custom": {
23259
23422
  "exampleMetadata": "infused"
23260
23423
  }
23261
23424
  },
23262
- "fqn": "@aws-cdk/aws-glue-alpha.TableEncryption",
23263
- "kind": "enum",
23425
+ "fqn": "@aws-cdk/aws-glue-alpha.TableClientSideEncryption",
23426
+ "kind": "class",
23264
23427
  "locationInModule": {
23265
23428
  "filename": "lib/s3-table.ts",
23266
- "line": 19
23429
+ "line": 112
23267
23430
  },
23268
- "members": [
23269
- {
23270
- "docs": {
23271
- "see": "https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html",
23272
- "stability": "experimental",
23273
- "summary": "Server side encryption (SSE) with an Amazon S3-managed key."
23274
- },
23275
- "name": "S3_MANAGED"
23276
- },
23431
+ "methods": [
23277
23432
  {
23278
23433
  "docs": {
23279
- "see": "https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html",
23280
23434
  "stability": "experimental",
23281
- "summary": "Server-side encryption (SSE) with an AWS KMS key managed by the account owner."
23435
+ "summary": "Client-side encryption (CSE-KMS) with an AWS KMS key managed by the account owner."
23282
23436
  },
23283
- "name": "KMS"
23284
- },
23285
- {
23286
- "docs": {
23287
- "stability": "experimental",
23288
- "summary": "Server-side encryption (SSE) with an AWS KMS key managed by the KMS service."
23437
+ "locationInModule": {
23438
+ "filename": "lib/s3-table.ts",
23439
+ "line": 118
23289
23440
  },
23290
- "name": "KMS_MANAGED"
23291
- },
23292
- {
23293
- "docs": {
23294
- "see": "https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html",
23295
- "stability": "experimental",
23296
- "summary": "Client-side encryption (CSE) with an AWS KMS key managed by the account owner."
23441
+ "name": "kms",
23442
+ "parameters": [
23443
+ {
23444
+ "docs": {
23445
+ "remarks": "A key is created if one is not provided.",
23446
+ "summary": "the KMS key used to encrypt the data."
23447
+ },
23448
+ "name": "key",
23449
+ "optional": true,
23450
+ "type": {
23451
+ "fqn": "aws-cdk-lib.aws_kms.IKey"
23452
+ }
23453
+ }
23454
+ ],
23455
+ "returns": {
23456
+ "type": {
23457
+ "fqn": "@aws-cdk/aws-glue-alpha.TableClientSideEncryption"
23458
+ }
23297
23459
  },
23298
- "name": "CLIENT_SIDE_KMS"
23460
+ "static": true
23299
23461
  }
23300
23462
  ],
23301
- "name": "TableEncryption",
23302
- "symbolId": "lib/s3-table:TableEncryption"
23303
- },
23304
- "@aws-cdk/aws-glue-alpha.TableProps": {
23305
- "assembly": "@aws-cdk/aws-glue-alpha",
23306
- "datatype": true,
23307
- "docs": {
23308
- "stability": "experimental",
23309
- "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 { aws_kms as kms } from 'aws-cdk-lib';\nimport { aws_s3 as s3 } from 'aws-cdk-lib';\n\ndeclare const bucket: s3.Bucket;\ndeclare const database: glue_alpha.Database;\ndeclare const dataFormat: glue_alpha.DataFormat;\ndeclare const key: kms.Key;\ndeclare const partitionProjectionConfiguration: glue_alpha.PartitionProjectionConfiguration;\ndeclare const storageParameter: glue_alpha.StorageParameter;\nconst tableProps: glue_alpha.TableProps = {\n columns: [{\n name: 'name',\n type: {\n inputString: 'inputString',\n isPrimitive: false,\n },\n\n // the properties below are optional\n comment: 'comment',\n }],\n database: database,\n dataFormat: dataFormat,\n\n // the properties below are optional\n bucket: bucket,\n compressed: false,\n description: 'description',\n enablePartitionFiltering: false,\n encryption: glue_alpha.TableEncryption.S3_MANAGED,\n encryptionKey: key,\n hasEncryptedData: false,\n parameters: {\n parametersKey: 'parameters',\n },\n partitionIndexes: [{\n keyNames: ['keyNames'],\n\n // the properties below are optional\n indexName: 'indexName',\n }],\n partitionKeys: [{\n name: 'name',\n type: {\n inputString: 'inputString',\n isPrimitive: false,\n },\n\n // the properties below are optional\n comment: 'comment',\n }],\n partitionProjection: {\n partitionProjectionKey: partitionProjectionConfiguration,\n },\n s3Prefix: 's3Prefix',\n storageParameters: [storageParameter],\n storedAsSubDirectories: false,\n tableName: 'tableName',\n};",
23310
- "custom": {
23311
- "exampleMetadata": "fixture=_generated"
23312
- }
23313
- },
23314
- "fqn": "@aws-cdk/aws-glue-alpha.TableProps",
23315
- "interfaces": [
23316
- "@aws-cdk/aws-glue-alpha.S3TableProps"
23317
- ],
23318
- "kind": "interface",
23319
- "locationInModule": {
23320
- "filename": "lib/table-deprecated.ts",
23321
- "line": 5
23322
- },
23323
- "name": "TableProps",
23324
- "symbolId": "lib/table-deprecated:TableProps"
23463
+ "name": "TableClientSideEncryption",
23464
+ "symbolId": "lib/s3-table:TableClientSideEncryption"
23325
23465
  },
23326
23466
  "@aws-cdk/aws-glue-alpha.TriggerOptions": {
23327
23467
  "assembly": "@aws-cdk/aws-glue-alpha",
@@ -23500,25 +23640,24 @@
23500
23640
  },
23501
23641
  "@aws-cdk/aws-glue-alpha.Type": {
23502
23642
  "assembly": "@aws-cdk/aws-glue-alpha",
23503
- "datatype": true,
23504
23643
  "docs": {
23644
+ "remarks": "Instances are opaque: obtain one from a `Schema` factory (for example\n`Schema.STRING`, `Schema.decimal(...)`, `Schema.array(...)`) or, for a type the\n`Schema` factories don't model, from `Schema.custom(...)`.",
23505
23645
  "stability": "experimental",
23506
- "summary": "Represents a type of a column in a table schema.",
23507
- "example": "declare 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});",
23646
+ "summary": "The type of a column in a table schema.",
23647
+ "example": "declare 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});",
23508
23648
  "custom": {
23509
23649
  "exampleMetadata": "infused"
23510
23650
  }
23511
23651
  },
23512
23652
  "fqn": "@aws-cdk/aws-glue-alpha.Type",
23513
- "kind": "interface",
23653
+ "kind": "class",
23514
23654
  "locationInModule": {
23515
23655
  "filename": "lib/schema.ts",
23516
- "line": 29
23656
+ "line": 33
23517
23657
  },
23518
23658
  "name": "Type",
23519
23659
  "properties": [
23520
23660
  {
23521
- "abstract": true,
23522
23661
  "docs": {
23523
23662
  "stability": "experimental",
23524
23663
  "summary": "Glue InputString for this type."
@@ -23526,7 +23665,7 @@
23526
23665
  "immutable": true,
23527
23666
  "locationInModule": {
23528
23667
  "filename": "lib/schema.ts",
23529
- "line": 38
23668
+ "line": 51
23530
23669
  },
23531
23670
  "name": "inputString",
23532
23671
  "type": {
@@ -23534,7 +23673,6 @@
23534
23673
  }
23535
23674
  },
23536
23675
  {
23537
- "abstract": true,
23538
23676
  "docs": {
23539
23677
  "stability": "experimental",
23540
23678
  "summary": "Indicates whether this type is a primitive data type."
@@ -23542,7 +23680,7 @@
23542
23680
  "immutable": true,
23543
23681
  "locationInModule": {
23544
23682
  "filename": "lib/schema.ts",
23545
- "line": 33
23683
+ "line": 46
23546
23684
  },
23547
23685
  "name": "isPrimitive",
23548
23686
  "type": {
@@ -24522,7 +24660,7 @@
24522
24660
  "kind": "enum",
24523
24661
  "locationInModule": {
24524
24662
  "filename": "lib/storage-parameter.ts",
24525
- "line": 183
24663
+ "line": 185
24526
24664
  },
24527
24665
  "members": [
24528
24666
  {
@@ -24544,6 +24682,6 @@
24544
24682
  "symbolId": "lib/storage-parameter:WriteParallel"
24545
24683
  }
24546
24684
  },
24547
- "version": "2.266.0-alpha.0",
24685
+ "version": "2.267.0-alpha.0",
24548
24686
  "fingerprint": "**********"
24549
24687
  }